问题描述
我正在使用 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);
这实际上对添加的文本应用了适当的反向旋转,从而取消了页面旋转,因此文本似乎没有旋转。