我的代码需要大量PDF并将它们合并到一个文件中......
PdfWriter writer = PdfWriter.getInstance(document, baos)
....
PdfFileSpecification fs = PdfFileSpecification.fileEmbedded(writer, null, af.fileName, af.documentData.data)
fs.addCollectionItem(item)
writer.addFileAttachment(fs)
这很有效,我可以看到所有页面。现在我希望将其拆分并根据大小复制到多个子文件。但是,当我使用生成的byte []时,iText似乎只能看到第一页......
PdfCopy copy = null
PdfReader reader = new PdfReader(before) // Add the byte array here
int pages = reader.getNumberOfPages() //It is only 1 I would expect more pages.
似乎只是识别在其他文件之前添加的封面。有没有办法可以得到所有页面的数量?如果我之前使用它并将其作为附件发送,则会显示所有1xx页面。
答案 0 :(得分:4)
您通过将文件附加到只有封面页的新PDF并将此文件作为Adobe调用的投资组合来合并文件:
PdfFileSpecification fs = PdfFileSpecification.fileEmbedded(writer, null, af.fileName, af.documentData.data);
fs.addCollectionItem(item);
writer.addFileAttachment(fs);
因此,您的代码不是典型的合并函数之一(使用PdfCopy
或PdfWriter
使用getImportedPage
;正确的使用PdfCopy
,可疑的使用PdfWriter
生成包含所有源页面作为真正文档页面的单个PDF。相反,您的代码会创建一个单页文档,其他PDF作为附件和一些额外信息,使PDF查看器以内联方式显示附加的PDF。
如果要访问这些附加PDF的页面,则必须再次提取它们并在单独的PdfReader
实例中打开它们。
您可以在this answer中找到有关提取PDF附件的详细信息。