我正在维护一个使用itext来组合多个横向和纵向pdf的遗留应用程序。当将由同一应用程序生成的pdf与其他pdf组合在一起时,此过程正常工作,它将横向渲染为portait并切断内容。
问题:pdf结构中是否存在可能导致渲染差异的属性?
谢谢!
答案 0 :(得分:6)
只有遵循不好的例子,才会出现您所描述的行为。按照the official documentation时不会发生此事。
虽然您没有提供任何源代码,但我很确定您使用PdfWriter
实例,并使用addTemplate()
方法将现有页面添加到此实例的直接内容中。这是(正如我多次向未阅读文档的人指出的那样)是错误的。
您需要替换合并过程并使用PdfCopy
或PdfSmartCopy
来连接PDF文档。请查看MergeForms
(合并表单)和FillFlattenMerge2
(介绍PdfSmartCopy
,以便生成的文件大小保持较低)以获取灵感示例。如果您的应用程序真的很旧,您可能找不到addDocument()
方法。
在这种情况下,您需要使用旧示例,例如Concatenate
示例:
Document document = new Document();
PdfCopy copy = new PdfCopy(document, new FileOutputStream(RESULT));
document.open();
PdfReader reader;
int n;
for (int i = 0; i < files.length; i++) {
reader = new PdfReader(files[i]);
n = reader.getNumberOfPages();
for (int page = 0; page < n; ) {
copy.addPage(copy.getImportedPage(reader, ++page));
}
copy.freeReader(reader);
reader.close();
}
document.close();