IText显示的页数少于实际页数

时间:2014-05-01 15:14:04

标签: pdf-generation itext

我的代码需要大量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页面。

1 个答案:

答案 0 :(得分:4)

您通过将文件附加到只有封面页的新PDF并将此文件作为Adobe调用的投资组合来合并文件:

PdfFileSpecification fs = PdfFileSpecification.fileEmbedded(writer, null, af.fileName, af.documentData.data);
fs.addCollectionItem(item);
writer.addFileAttachment(fs);

因此,您的代码不是典型的合并函数之一(使用PdfCopyPdfWriter使用getImportedPage;正确的使用PdfCopy,可疑的使用PdfWriter生成包含所有源页面作为真正文档页面的单个PDF。相反,您的代码会创建一个单页文档,其他PDF作为附件和一些额外信息,使PDF查看器以内联方式显示附加的PDF。

如果要访问这些附加PDF的页面,则必须再次提取它们并在单独的PdfReader实例中打开它们。

您可以在this answer中找到有关提取PDF附件的详细信息。