【问题标题】:How to downgrade arbitrary PDF file to version PDF-1.2?如何将任意 PDF 文件降级到 PDF-1.2 版本?
【发布时间】:2011-06-05 03:53:07
【问题描述】:

我有一些用户生成的 PDF 文件。通常这些文件是用 Word 生成的,但它们可能只是任何类型的有效 PDF 文件。如果他们有更高的版本号,我想将文件转换为版本 PDF-1.2。应删除仅在更高版本中可用的功能(如多媒体),结果仍应合理合理且可读。

如何在没有 Adob​​e Acrobat 等交互式工具的情况下以编程方式执行此操作?最好使用 Java 和 iText-library,但我也对其他解决方案感兴趣。

一种方法是从原始 PDF 生成一堆图像,然后将它们打包为 PDF-1.2 文件,但是更优雅的方法是什么?

【问题讨论】:

  • 这次降级的最终目的是什么?让 PDF 更易于阅读,例如在手机和电子书阅读器上?

标签: java pdf itext


【解决方案1】:

最简单的方法是通过 Ghostscript 重新打印。

【讨论】:

  • 那将文本数据保留为文本,而不生成单个大图吗?
  • 很可能不是。如果这是一项要求,那么您可能需要编辑您的问题。
  • @Juha Syrjälä:是的,Ghostscript 会将文本数据保存为文本 [尽管我不会将其称为“重印”而是通过 Ghostscript “重新提取”它],前提是:(1) 您使用适当的 Ghostscript 命令参数,以及 (2) PDF 已嵌入所有使用的字体,或 (b) PDF 使用的未嵌入字体可用于所有 PDF 阅读器。
【解决方案2】:

您可以使用setPdfVersion() 在 iText 中设置 PDF 版本,但我认为降级不会开箱即用。您可以使用 PdfCopy 并将您的 pdf 文件写入 1.2 版的新文件,并删除所有非 1.2 对象。或者将它们转换为 1.2 版对象(我认为你必须自己做,但不确定)

【讨论】:

    【解决方案3】:

    试试下面的命令行。它使用 Ghostscript 重新提取 PDF。使用 Ghostscript 8.71 或更高版本:9.00。 (上面建议“使用 setPdfVersion() 在 iText 中设置 PDF 版本” 的错误投票答案将不起作用——它只会重新标记 PDF,这只会误导.. .)

    gswin32c.exe ^
       -o output-v1.2.pdf ^
       -sDEVICE=pdfwrite ^
       -dPDFSETTINGS=/ebook ^
       -dCompatibilityLevel=1.2 ^
        input-v1.6.pdf
    

    【讨论】:

    • PDF 更高版本的功能的好处是它们会被老读者忽略。开头的“1.x”只不过是一个建议……观众可以忽略。如果您在带有 1.2 标记的 PDF 中删除表单域,我 怀疑 Reader 仍会读取/执行其中一个域和它们可能拥有的任何脚本。哦,它可能会抱怨版本不好,但我怀疑这些字段会中断。 iText 不会因为您要求它设置版本为 1.0 而删除所有标记的内容,也不会删除颜色信息。 PDF1.0 只是灰度 IIRC。
    • 我不建议使用 setPdfVersion,我只是说你可以使用它,并且我明确表示降级将不起作用,你必须手动删除更高版本的对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 2021-11-27
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    相关资源
    最近更新 更多