我已经对这个主题进行了大量的研究,但我发现的每一件事都是使用了压模的功能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();
由于
在布鲁诺回答之后,我做了以下事情:
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.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();
但它还没有工作
答案 0 :(得分:0)
原始PDF是自制的(直接保存为PDF格式)或不是(扫描的)。那些最后的那些有麻烦的那个。分页显示在第一,但不在秒(它可能存在,但它应该在图像后面)!
问题不在于第二种类型的PDF是扫描,而是它使用页面旋转。
当页面旋转时,iText会在欠内容和超量内容的开头插入坐标系旋转指令,以确保在旋转的页面上直接显示任何未经进一步转换绘制的文本。
在选择绝对坐标时,显然需要考虑坐标系的这种旋转。
因此,而不是
reader.getPageSize(i)
你应该使用
reader.getPageSizeWithRotation(i)
或者,您可以使用
切换此iText机制stamper.setRotateContents(false);
然后在以下所有操作中明确考虑页面旋转的存在。