警告:gs 和 pdf2ps|ps2pdf 请勿拼合 PDF!

警告:gs 和 pdf2ps|ps2pdf 请勿拼合 PDF!

我使用 Mac OS X Snow Leopard。我有一个 PDF,上面有表单字段、注释和图章。我想冻结(或“压平”)该 PDF,这样表单字段就无法更改,注释/图章也不再可编辑。由于我实际上有很多这样的 PDF,所以我想在命令行上自动执行此操作。

我尝试过/考虑过的一些事情及其成功程度:

  • 在预览中打开并打印到文件。这将创建一个完全平面的 PDF,而不会改变文件大小。唯一的自动化方法似乎是编写一个笨拙的基于 UI 的 AppleScript,但我一直在努力避免这种情况。
  • 在 Acrobat Pro 中打开并使用JavaScript 函数来扁平化。同样,不确定如何在命令行上自动执行此操作。
  • 使用pdftk使用该flatten选项。但这只会展平表单字段,而不会展平图章和其他注释。
  • 使用cupsfilter它可以把许多文件格式转换成 PDF。像pdftk这样只展平表单字段。
  • 使用cups-pdf连接到 Mac 的打印服务器并保存 PDF 文件而不是打印。我使用了macports 版本。生成的文件是扁平的,但很大。我在一个 8MB 的文件上尝试了这个;扁平化的 PDF 是 358MB!也许可以将其与 ghostscript 调用结合使用,如下所示Ubuntu 提示:如何通过命令行减小 PDF 文件大小

如果有任何其他建议我将不胜感激。

答案1

警告:gs 和 pdf2ps|ps2pdf 请勿拼合 PDF!

使用 gs 或 pdf2ps 然后使用 ps2pdf 将产生多层带有注释内容的 PDF以原始形式呈现。您可以在预览中通过选择全部,然后复制,然后粘贴到文本编辑窗口(富文本模式)来验证此缺陷。例如,您将看到修订注释下的文本或图形。这显然非常如果你合法地需要将该内容从输出中消失,那就糟糕了。

可行的解决方案

ImageMagick 可以使用以下命令生成可配置质量、多页、单层扁平 PDF,其中包含每页的光栅:

convert -density 150 document_original.pdf document_flat.pdf

此命令将 document_original.pdf 栅格化,以 150 DPI 的分辨率制作每页的基于像素的图像,并将结果输出为 document_flat.pdf。

关于图像质量的说明

因为光栅化,它会生成不可缩放的 PDF(缩放后您会看到文本或原始矢量图像变得像素化)。除非原始文件包含非常复杂的矢量内容(如百万点散点图),否则文件大小可能会更大。

通过改变密度,您可以用更大的文件大小来换取更高的分辨率输出。

所有文本都将转换为每页图像中的原始像素。文本和矢量图受影响最大,因此请尝试使用 DPI,直到获得可用的输出文件。

答案2

尝试连续使用pdf2psps2pdf。这有点麻烦,但它帮助我将 30MB 的文档减少到 17MB。没有我想要的那么多,但还是更好。我从一位朋友那里得到了这个想法,他用这种方法摆脱了 pdf 上的密码权限。

pdf2ps your_pdf_file.pdf your_pdf_file.ps
ps2pdf your_pdf_file.ps your_pdf_file_from_ps.pdf

希望有帮助!

答案3

编辑2020-07-25 这曾经有效,但现在不再有效。现在这些命令继续保留 PDF 图层。


这是我最近一直在用的。我认为功能上它和 一样pdf2ps file.pdf - | ps2pdf - file_flat.pdf,但对我来说似乎效果更好。

gs -sDEVICE=pdfwrite -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -sOutputFile=<newfile> <oldfile>

答案4

Applescript 可能是命令行的最佳/最快捷方式。一旦它工作正常,您可以将其保存为应用程序,并在命令 shell 中创建别名来运行它。此后,您只需在命令行中输入您的别名即可。

相关内容