我需要在pdf中添加一些文字。我这样做是通过创建一个短语并将其传递给ColumnText.showTextAligned方法,并且只有一个特定的pdf,当查看pdf时会出错: - “此页面上存在错误.Acrobat可能无法正确显示页面。请联系此人... “ 下面是用于添加文本的代码剪切: -
PdfReader reader = new PdfReader(pdfBytes);
PdfStamper stamper = new PdfStamper(reader, pdfOutputByteArray);
PdfContentByte page;
FontSelector selector = new FontSelector();
int start = 0;
int n = reader.getNumberOfPages();
BaseFont bf = BaseFont.createFont("GARABD.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font font1 = new Font(bf, 12, Font.NORMAL);
selector.addFont(font1);
for (int i = start; i < n + start; i++) {
page = stamper.getOverContent(i - start + 1);
Rectangle rect = reader.getPageSizeWithRotation(i - start + 1);
page.beginText();
page.setFontAndSize(bf, 12);
page.setColorFill(BaseColor.BLACK);
Phrase ph = selector.process(staticText);
ColumnText.showTextAligned(page, Element.ALIGN_RIGHT, ph, rect.getRight(350), rect.getTop(60), 0);
page.endText();
}
当我尝试通过以下方法添加相同的文本时,没有出现错误,下面是代码: -
PdfReader reader = new PdfReader(pdfBytes);
PdfStamper stamper = new PdfStamper(reader, pdfOutputByteArray);
PdfContentByte page;
FontSelector selector = new FontSelector();
int start = 0;
int n = reader.getNumberOfPages();
BaseFont bf = BaseFont.createFont("GARABD.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font font1 = new Font(bf, 12, Font.NORMAL);
selector.addFont(font1);
for (int i = start; i < n + start; i++) {
page = stamper.getOverContent(i - start + 1);
Rectangle rect = reader.getPageSizeWithRotation(i - start + 1);
page.beginText();
page.setFontAndSize(bf, 12);
page.setColorFill(BaseColor.BLACK);
page.setTextMatrix(rect.getRight(455), rect.getTop(60));
page.showText(staticText);
page.endText();
我想提一下,这只发生在一页的一个特定pdf上。以下是pdf链接: -
下载链接:https://www.send18.com/?uid=a89d-403ee175 密码:9mbBvqwY
代码无法更改,因为它已在许多地方编写,而且只更改一个pdf的代码没有意义。 请告知可能出现的问题。
答案 0 :(得分:1)
你正在混合两种不同的东西。
你可以拥有:
page.beginText();
page.setFontAndSize(bf, 12);
page.setColorFill(BaseColor.BLACK);
page.showTextAligned(Element.ALIGN_RIGHT, "some text", x, y, 0);
page.endText();
或者你可以拥有:
Phrase ph = new Phrase("some text");
ColumnText.showTextAligned(page, Element.ALIGN_RIGHT, ph, x, y, 0);
后者是前者的简写。
ColumnText.showTextAligned()
在内部创建beginText()
和endText()
,因此您可以使用以下内容:
page.beginText();
page.setFontAndSize(bf, 12);
page.setColorFill(BaseColor.BLACK);
page.beginText();
page.setFontAndSize(bf, 12);
page.showTextAligned(Element.ALIGN_RIGHT, "some text", x, y, 0);
page.endText();
page.endText();
在PDF中嵌套文本对象是非法的,这就是造成错误的原因。
我建议您从代码中删除以下行:
page.beginText();
page.setFontAndSize(bf, 12);
page.setColorFill(BaseColor.BLACK);
page.endText();
这应该可以解决问题。
您说您无法更改代码,但您应该这样做。现在所有您正在创建的PDF是错误的。在大多数情况下会忽略该错误,但不能保证所有PDF查看器的(所有版本)都会忽略该错误。