Rotate paragraphs or cells some arbitrary number o

2019-07-21 15:52发布

我有一个网站,用户上传照片和写真集创建。 此外,他们可以在绝对位置,旋转和对齐添加文字。 文本可以有新的线路。

我一直在使用iText库,以使自动化被印在后者的照相簿高品质的PDF文件的创建。

添加用户上传的图片的PDF文件是非常简单的,问题是当我尝试添加文本。

从理论上说什么,我需要做的,就是要定义一些定义的宽度和高度的一个段落,设置用户文本,字体,字体样式,对齐方式(居中,左,右,证明),最后设置旋转。

对于我读过有关iText的,我可以创建一个段落设置的用户属性,并使用ColumnText对象设置绝对位置,宽度和高度。 但是这并不可能设置的任何比单行更大的旋转。

我不能使用表单元格任一,由于旋转方法只允许是90的倍数度。

有没有一种方法,而不必通过使用行添加文本行添加一些旋转(例如20度)的一段ColumnText.showTextAligned()方法,并涉及所有数学?

----编辑:2008年以前,2013 ----

如果有帮助的人,这是我用来解决这个问题(感谢布鲁诺)的代码:

//Create the template that will contain the text
PdfContentByte canvas = pdfWriter.getDirectContent();
PdfTemplate textTemplate = canvas.createTemplate(imgWidth, imgHeight); //The width and height of the text to be inserted

ColumnText columnText = new ColumnText(textTemplate);

columnText.setSimpleColumn(0, 0, imgWidth, imgHeight);
columnText.addElement(paragraph);

columnText.go();

//Create de image wraper for the template
Image textImg = Image.getInstance(textTemplate);

//Asign the dimentions of the image, in this case, the text
textImg.setInterpolation(true);
textImg.scaleAbsolute(imgWidth, imgHeight);
textImg.setRotationDegrees((float) -textComp.getRotation()); //Arbitrary number of degress
textImg.setAbsolutePosition(imgXPos, imgYPos);

//Add the text to the pdf
pdfDocument.add(textImg);

Answer 1:

  • 创建PdfTemplate对象; 只是一个矩形。
  • 画出你ColumnText这个PdfTemplate ; 不用担心旋转,只需填写您要添加到列任何内容的矩形。
  • 包裹PdfTemplate内部Image对象; 这仅仅是为了方便,避免了数学。 这并不意味着你的文本会被光栅化。
  • 现在适用于旋转,一个绝对位置的Image ,并将其添加到您的文档。

你的问题现在已经解决了;-)

PS:我是iText的在行动的书籍。



Answer 2:

多亏了我们的朋友(布鲁诺&BernalCarlos)的用户,在他们的项目中使用“RTL”我最后的代码是在这里:

// step 1
Document document = new Document();
document.setPageSize(PageSize.A4);

// step 2
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(destination_file));
CreateBorder event = new CreateBorder();
writer.setPageEvent(event);

// step 3
document.open();

// step 4
int imgWidth=400;
int imgHeight=50;
//Create the template that will contain the text
PdfContentByte canvas = writer.getDirectContent();
PdfTemplate textTemplate = canvas.createTemplate(imgWidth, imgHeight);
//The width and height of the text to be inserted

ColumnText columnText = new ColumnText(textTemplate);
columnText.setSimpleColumn(0, 0, imgWidth, imgHeight);
columnText.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);
columnText.addElement(new Paragraph("محاسبه بار غیر متعادل", font_IranSemiBold));
columnText.go();

//Create de image wraper for the template
Image textImg = Image.getInstance(textTemplate);

//Asign the dimentions of the image, in this case, the text
textImg.setInterpolation(true);
textImg.scaleAbsolute(imgWidth, imgHeight);
textImg.setRotationDegrees(90); //Arbitrary number of degress
textImg.setAbsolutePosition(50, 200);

//Add the text to the pdf
document.add(textImg);

// step 5
document.close();


文章来源: Rotate paragraphs or cells some arbitrary number of degrees — Itext