【问题标题】:itext merging in running report运行报告中的itext合并
【发布时间】:2017-03-16 11:49:21
【问题描述】:

你好

我们使用带有 PdfWriter(Document 组合的块和短语以及 DirectContent 等) 创建 PDF。到目前为止,这工作正常。虽然在某些空间创建 PDF,但我需要合并来自另一个 PDF 的页面。到目前为止我这样做是通过在实际报告的末尾保留要合并的文件列表并将它们合并在一起(通过关闭该报告,使用 PdfCopy 重新打开报告并在相应页面上合并文件)。

到目前为止,这也很好,但它有一个主要缺点:如果报告较大(例如,1800 页)并且需要将 1000 个 PDF 合并到该 PDF 中,它会变得非常非常慢。我想这与需要重写主 PDF 的事实有关,因为要合并到主文档中的 PDF 不仅在主报告的末尾简单地合并,而且在内部的某个地方,并且正在重复其他 999 个 PDF 要合并。

所以我考虑加快速度并导入页面,同时我仍在使用 PdfWriter.getImportedPage() 创建报告并将其作为模板添加到 PDF 中。这工作正常,但在阅读“如何不合并文档”(http://developers.itextpdf.com/examples/merging-pdf-documents-itext5/how-not-merge-documents) 之后,我不太确定这是否真的是一个好的解决方案。

但是.. 除了在主报告完成时合并之外,我真的不知道有什么更好的方法,而且这真的很慢,要合并数百个 PDF。

那么使用 PdfWriter.getImportedPage() 并相应地旋转页面是一个好主意还是一个坏主意?还是有什么我不知道的替代方案?

【问题讨论】:

  • 您是否每次都将 PDF 写入文件?如果您将其保存在内存中并仅在最后将其写入文件,它可能会加快速度。
  • @AmedeeVanGasse 我们无法将它保存在内存中,因为我们不知道它会有多大,并且内存耗尽的机会高于我们可以获得的性能提升。在应用程序服务器上耗尽内存通常不是一个好主意,因此我们需要将其保留为外部进程并像这样运行它,但我们暂时避免这样做。

标签: pdf merge itext


【解决方案1】:

那么使用 PdfWriter.getImportedPage() 并相应地旋转页面是个好主意还是坏主意?

这取决于。 ;)

这取决于您的用例中什么是重要的。一般来说:

  • 如果您希望在生成的文档中使页面与它们在各自的原始文档中完全一样,请使用PdfCopyPdfSmartCopy,这绝对是更好的选择.

  • 如果您的原始页面包含您希望在结果文档中也包含的注释(例如 AcroForm 表单字段可视化),则使用 PdfCopyPdfSmartCopy,这绝对是更好的选择 em> 在这种情况下也是如此。

  • 否则使用PdfWriteraddTemplate(...getImportedPage(...), ...) 可能是一个可以接受甚至是不错的选择。

或者有没有我不知道的替代方案?

您可能没有将优化应用于您的PdfCopy 解决方案,但在 iText 5 中没有概念上不同的选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    相关资源
    最近更新 更多