【问题标题】:IText Shows less pages than there actually areIText 显示的页面少于实际页面
【发布时间】:2014-05-01 15:14:04
【问题描述】:

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

【问题讨论】:

  • 您是要拆分已经“合并”的 PDF,还是要重新构建您的“合并”逻辑?
  • 您正在组合文件,方法是将它们附加到一个只有封面的新 PDF 中,并使该文件成为 Adob​​e 所称的 Portfolio .如果您想访问这些附加 PDF 的页面,您必须再次提取它们并在单独的 PdfReader 实例中打开它们。
  • @mkl 是对的,应该将他的评论变成答案。他的回答应该被接受。
  • @BrunoLowagie 把他的评论变成答案 - 好的,你来了! ;)
  • 谢谢,我赞成今天的答案和你提到的答案。

标签: pdf-generation itext


【解决方案1】:

您通过将文件附加到只有封面的新 PDF 来组合文件,并使该文件成为 Adob​​e 所称的 Portfolio:

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

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

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

您可以在this answer找到更多关于提取PDF附件的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多