【问题标题】:"Flatten" incremental updates in PDFPDF 中的“展平”增量更新
【发布时间】:2013-12-02 15:12:12
【问题描述】:

我有一个通过增量更新制作的可编辑 PDF,但我需要将 PDF 与不支持此功能的代码库一起使用。

如何“扁平化”增量更新并使其成为常规 PDF?

【问题讨论】:

  • 这个问题不清楚。您说您想使用一些无法读取此类 PDF 的匿名 PDF 库通过增量更新来展平 PDF。
  • 具有增量更新的 PDF 很可能仍然是常规 PDF。如果 PDF 库不支持增量更新,我怀疑这是该库的唯一缺点。请首先确保您了解所有不足。
  • 玩了一些之后,我认为这个库不好,最终使用了 pdftk。

标签: pdf adobe acrobat


【解决方案1】:

您可以使用 Adob​​e Acrobat 并使用“另存为”菜单选项保存文件。这将合并所有增量更新,您将拥有一个常规 PDF。

【讨论】:

    【解决方案2】:

    PDF 的设计使得在不知道有增量更新的情况下阅读 PDF 等同于阅读最终修订版。

    如果一个库不支持增量更新,它可能会默认加载文件的最终版本,所以简单地读取和写入文件应该没问题。

    例如,使用Coherent PDF Command Line Tools(非商业用途免费)您可以这样做

    cpdf in.pdf -o out.pdf
    

    一切都会好起来的。

    【讨论】:

      【解决方案3】:

      我认为许多通用 PDF 库应该能够在保存文档的同时做到这一点。

      下面是Docotic.Pdf library的示例代码。

      string originalFile = "file-with-incremental-updates.pdf";
      string compressedFile = "file-without-incremental-updates.pdf";
                  
      using (PdfDocument pdf = new PdfDocument(originalFile))
      {
          pdf.SaveOptions.Compression = PdfCompression.Flate;
          pdf.SaveOptions.UseObjectStreams = false;
          pdf.SaveOptions.RemoveUnusedObjects = true;
          pdf.SaveOptions.OptimizeIndirectObjects = true;
          pdf.SaveOptions.WriteWithoutFormatting = true;
      
          pdf.Save(compressedFile);
      }
      

      如您所见,可以告诉库从相同的输入产生不同的输出。例如,您可以删除未使用的对象并减小输出文件的大小。

      免责声明:我是该库的开发人员之一。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 2010-09-23
        • 1970-01-01
        • 2019-02-09
        相关资源
        最近更新 更多