如何在命令行上的Mac OS中完全拉平PDF?


16

我使用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!也许可以与Ubuntu中的ghostscript调用结合使用提示:如何从命令行减少PDF文件的大小

任何其他建议,将不胜感激。


1
Automator.app具有一些内置的pdf处理选项。也许其中之一可以直接提供帮助,也可以与上述操作之一结合使用。
Kassym Dorsel 2011年

您能否提供包含这些元素的PDF示例文档?
丹尼尔·贝克

我认同。现在我所有的样本都是学生测验,所以我必须模拟一些东西。
Matthew Leingang

Answers:


11

尝试连续使用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
GhostScript FTW!我把箱子放到一个班轮用管:pdf2ps file.pdf - | ps2pdf - file_flat.pdf。文件从300K增长到500K,这是一个很大的百分比增长,但与cups-pdf方法产生的4400%增长没有什么不同。
Matthew Leingang

实际上,我的运气更好pdf2ps -q -sOutputFile=- file.pdf | ps2pdf - file_flat.pdf
Matthew Leingang

4
请注意,在Mac上,您可以安装Ghostscript使上述命令通过homebrew可用brew install ghostscript
尼克

5

这就是我最近一直在使用的。我认为从功能上讲,它的作用与相同pdf2ps file.pdf - | ps2pdf - file_flat.pdf,但对我来说似乎更好。

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

ps2pdf解决方案对我来说失败了。这显然可以通过重新索引PDF中的字体来实现。
ℝaphink

这些命令都不会变平。您可以使用“预览”来复制基础层,然后将显示原始内容。
阿兰·奥德

1

它可能是子可选的,但您是否考虑过将cups-pdf与pdftk或cupsfilter链接?就像您提到的那样,cups-pdf将生成一个平面pdf文件,然后将其通过pdftk或cupsfilter传递到可接受的大小?

或者看看/System/Library/Printers/Libraries/convert 你应该能够做类似的事情

/System/Library/Printers/Libraries/convert -f input_file.pdf -o output_file.pdf -j "application/pdf"

我的Mac没有/System/Library/Printers/Libraries/convert。我试过了cupsfilter。从PDF转换为PDF时,未对文件进行任何更改。从PDF转换为PS,然后转换为PDF时,注释会丢失。
Matthew Leingang 2013年

1

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

依次使用gs或pdf2ps和ps2pdf将产生一个多层 PDF,其注释下的内容以原始形式存在。您可以通过使用“全选”,“复制”然后“粘贴到TextEdit”窗口(在RTF模式下)来验证“预览”中的此缺陷。例如,您将在修订注释下看到文本或图形。如果您在法律上需要从输出中删除内容,这显然是非常糟糕的。

一个可行的解决方案

ImageMagick可以使用以下命令生成具有可配置质量的多页单层展平PDF,并具有每页的栅格:

convert -density 150 document_original.pdf document_flat.pdf

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

关于图像质量的注意事项

由于光栅化,它会产生不可缩放的(缩放,您会看到文本或原始矢量图像被像素化)PDF。除非原始文件具有非常复杂的矢量内容(如百万点散点图),否则文件大小可能会更大。

通过更改密度,您可以将更大的文件大小换成更高分辨率的输出。

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


1
感谢您提供此答案。5年前,我编写的解决方案为我工作。但是,下次我必须这样做时(实际上很快),我会尝试您的答案。
Matthew Leingang '19

那讲得通。我想象Ghostscript的行为在扁平化注释方面发生了变化。我尝试添加-PreserveAnnots = false,但仍然无法正常工作。在后台使用Ghostscript进行PDF处理。我想要做Acrobat所做的事情:它保留注释,删除注释后面的内容,并保留未覆盖的矢量图像。不过,带有新Acrobat的Document Cloud确实让我很紧张,无法将其用于敏感数据。
阿兰·奥德

0

Applescript可能是最好/最快的命令行方式。一旦运行,您可以将其另存为应用程序,并在命令外壳中创建一个别名以运行它。之后,您只需在命令行中输入别名。


但是,在AppleScript中展平PDF的最简单方法是什么?我宁愿不要编写UI脚本来模仿打印到文件。这似乎很混乱而且很慢。
Matthew Leingang
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.