我对此主题进行了大量研究,但是每次“使用压模的getOverContent函数”时,我发现的一切都是。我做到了,它仍然无法正常工作。
我编写了一个程序,将一个库的PDF合并在一起,而不是将这个新文档分页(希望您能按照我的写作)。原始PDF是自制的(直接保存为PDF)还是非自制的(已扫描)。最后的那边有麻烦。分页显示在第一个而不是秒上(它可能存在,但应该在图像后面)!
这是分页代码,有人想到了,我在哪里弄错了?
PdfReader reader = new PdfReader(source);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(destination));
for (int i = start + 1; i <= reader.getNumberOfPages(); i++) {
Phrase noPage = new Phrase((i - start) + "", new Font(FontFamily.COURIER, 14));
float x = reader.getPageSize(i).getRight(20);
float y = reader.getPageSize(i).getTop(20);
PdfContentByte content = stamper.getOverContent(i);
content.beginText();
ColumnText.showTextAligned(content,Element.ALIGN_CENTER, noPage, x, y, 0);
content.endText();
}
stamper.close();
reader.close();
谢谢
在Bruno回答之后,我做了以下事情:
PdfReader reader =新的PdfReader(源代码); PdfStamper压模=新的PdfStamper(阅读器,新的FileOutputStream(destination));
for (int i = start + 1; i <= reader.getNumberOfPages(); i++) {
Phrase noPage = new Phrase((i - start) + "", new Font(FontFamily.COURIER, 14));
float x = reader.getCropBox(i).getRight(20);
float y = reader.getCropBox(i).getTop(20);
PdfContentByte content = stamper.getOverContent(i);
ColumnText.showTextAligned(content,Element.ALIGN_CENTER, noPage, x, y, 0);
}
stamper.close();
reader.close();
但它仍然无法正常工作
原始的PDF是自制的(直接保存在PDF中)还是不是自制的(已扫描)。最后的那边有麻烦。分页显示在第一个而不是秒上(它可能存在,但应该在图像后面)!
问题不在于扫描了第二类PDF,而是它使用了页面旋转。
旋转页面时,iText在不足和过度内容的开头插入坐标系旋转指令,以确保在不进行进一步变换的情况下绘制的任何文本都在旋转的页面上垂直显示。
选择绝对坐标时,显然需要考虑坐标系的这种旋转。
因此,代替
reader.getPageSize(i)
你应该用
reader.getPageSizeWithRotation(i)
或者,您可以使用以下命令切换此iText机制
stamper.setRotateContents(false);
然后在所有后续操作中明确考虑页面轮换的存在。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句