11

我有一个网站,用户可以在其中上传照片并创建相册。此外,他们可以在绝对位置、旋转和对齐位置添加文本。文本可以有新行。

我一直在使用 Itext 库来自动创建稍后打印的 Photobooks 高质量 Pdf。

将用户上传的图像添加到 PDF 非常简单,当我尝试添加文本时问题就来了。

理论上我需要做的是定义一段具有一定宽度和高度的段落,设置用户文本、字体、字体样式、对齐方式(居中、左、右、对齐),最后设置旋转。

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

我也不能使用表格单元格,因为旋转方法只允许 90 的倍数。

ColumnText.showTextAligned()有没有办法添加一段旋转(比如 20 度)的段落,而不必使用该方法和所有涉及的数学逐行添加文本?

---- 编辑:08-Ago-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);
4

2 回答 2

10
  • 创建一个PdfTemplate对象;只是一个矩形。
  • 画上你ColumnTextPdfTemplate;不用担心旋转,只需用您要添加到列中的任何内容填充矩形。
  • 包裹PdfTemplate里面的一个Image物体;这只是为了方便,避免数学。这并不意味着您的文本将被光栅化。
  • 现在对 应用旋转和绝对位置Image并将其添加到您的文档中。

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

PS:我是 iText in Action 书籍的作者。

于 2013-03-15T06:35:07.637 回答
1

感谢我们的两位朋友(Bruno 和 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();
于 2015-09-29T12:36:53.917 回答