2

我正在转换使用在线编辑器创建的文档。我需要能够使用它的中心点而不是(0,0)来旋转文本。

由于图像使用中心旋转,我认为这会起作用,但事实并非如此。任何人都知道如何使用 itext 中的中心点旋转文本?

float fw = bf.getWidthPoint(text, textSize);
float fh = bf.getAscentPoint(text, textSize) - bf.getDescentPoint(text, textSize); 
PdfTemplate template = content.createTemplate(fw, fh);

Rectangle r = new Rectangle(0,0,fw, fw);
r.setBackgroundColor(BaseColor.YELLOW);
template.rectangle(r);

template.setFontAndSize(bf, 12);
template.beginText();
template.moveText(0, 0);
template.showText(text);
template.endText();

Image tmpImage = Image.getInstance(template);
tmpImage.setAbsolutePosition(Utilities.millimetersToPoints(x), Utilities.millimetersToPoints(pageHeight-(y+Utilities.pointsToMillimeters(fh))));
tmpImage.setRotationDegrees(0);
document.add(tmpImage);
4

2 回答 2

8

你为什么用beginText(), moveText(), showText(), endText()? 这些方法供能流利使用 PDF 语法的开发人员使用。其他开发人员应该避免使用那些低级方法,因为它们必然会出错。

例如:您正在使用setFontAndSize()文本对象之外的方法。该方法在图形状态下是禁止的,只能在文本状态下使用。尽管 Adob​​e Reader 可能会容忍它,但 Acrobat 在进行语法检查时会抱怨。

建议不流利使用 PDF 语法的开发人员使用TextMethods示例中演示的便捷方法。看看text_methods.pdf。文本“再次离开中心”可能是您需要的。

但是,还有一种更简单的方法可以实现您想要的。只需使用类中提供的静态showTextAligned()方法ColumnText即可。这样你甚至不需要使用beginText(), setFontAndSize(), endText():

ColumnText.showTextAligned(template,
    Element.ALIGN_CENTER, new Phrase(text), x, y, rotation);

使用showTextAligned()in 的方法ColumnText还有一个优点,即您可以使用包含具有不同字体的块的短语。

于 2013-08-02T07:42:54.213 回答
0

对于那些使用 itext 7 中的段落的人:

    paragraph.setFixedPosition(....)
    paragraph.setRotationAngle(Math.toRadians(....));
    paragraph.setProperty(Property.ROTATION_POINT_X, textCenterX);
    paragraph.setProperty(Property.ROTATION_POINT_Y, textCenterY);
于 2021-01-14T18:32:40.250 回答