在现有的 pdf 旋转页面上写入文本

问题描述

我正在使用 iText 7 (7.1.14) 开发一个应用程序,以在现有 PDF 的右上角写入文本。 我有旋转页面的问题,例如 90、270。 我尝试将 AffineTransform.getRotateInstance 应用于画布,但没有。

PdfFont bf = PdfFontFactory.createFont(FontConstants.HELVETICA);
float stringWidth = bf.getWidth(stringa,fontSize);
PdfCanvas canvas=new PdfCanvas(page,true);
float centeredPosition = pageSize.getWidth() - (pageSize.getWidth()/30);
float yCoord = (pageSize.getHeight()-fontSize-5);
float xCoord = centeredPosition-stringWidth;
canvas.beginText().setFontAndSize(bf,fontSize)
    .moveText(xCoord,yCoord)
    .showtext(stringa)
    .setTextRenderingMode(pageN)
    .endText();

解决方法

您想要添加显示在页面右上角的文本,即使页面旋转已应用于页面。

确保在考虑旋转的情况下获得页面大小,以便您的坐标计算对于旋转页面是正确的:

Rectangle pageSize = page.getPageSizeWithRotation();

例如,对于旋转 90 度的 A4 页面,这将返回 842x595 而不是 595x842。

然后在添加新内容时“忽略”页面旋转:

page.setIgnorePageRotationForContent(true);

这实际上对添加的文本应用了适当的反向旋转,从而取消了页面旋转,因此文本似乎没有旋转。