如何以编程方式从Mac上的PDF文档中删除页面?

cei*_*cat 6 pdf macos

我有一堆PDF文档,所有这些文档都包含我要删除的标题页.

有没有办法以编程方式删除它们?

我找到的大多数PDF实用程序只能合并文档,但不能删除页面.在打印对话框中,我可以选择第2页,然后打印到文件,但我找不到以编程方式访问此功能的任何方法.

Ben*_*oit 9

使用pdftk.

要删除第8页:

pdftk in.pdf cat 1-7 9-end output out.pdf
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,如果其他人也懒得弄清楚如何构建pdftk(macport仍然存在gcc42的问题),这里有一个二进制文件http://fredericiana.com/2010/03/01/pdftk-1-41 - 用于-MAC-OS-X-10-6 / (2认同)

Kur*_*fle 6

仅供记录:您也可以使用 Ghostscript:

gs \
  -o removed-page-1-from-input.pdf \
  -sDEVICE=pdfwrite \
  -dFirstPage=2 \
  /path/to/input.pdf
Run Code Online (Sandbox Code Playgroud)

然而,pdftk对于更好的工具工作(并已推荐给你)。

此外,这个 Ghostscript 命令行可能会更改 input.pdf 中的一些属性,因为它本质上是重新提炼它。这可能是理想的改变,也可能不是。要控制此行为的各个方面(或抑制其中的某些方面),需要具有更多参数的更复杂的命令行。

pdftk 将按原样重新使用每个页面的原始 PDF 对象。


更新

Ghostscript 也有附加参数-dLastPage。与-dFirstPage此一起允许提取页面范围。

最新版本采用了新参数-sPageList. 这可以像这样使用:

-sPageList="1, 5-10, 12-"
Run Code Online (Sandbox Code Playgroud)

从输入文档中提取第 1、5-10 和 12-last 页。但是,我还没有(还)亲自测试过这个新功能,我不确定它的工作可靠性。

对于旧版本的 Ghostscript(以及最新版本),它应该可以将具有不同参数的相同输入 PDF 多次提供给相同的 GS 调用,以从文档中提取不连续的页面选择。您甚至可以通过这种方式组合来自不同文档的页面:

gs \
  -o selected-pages.pdf \
  -sDEVICE=pdfwrite     \
  -dFirstPage=2         \
  -dLastPage=2          \
   in1.pdf              \
                        \
  -dFirstPage=10        \
  -dLastPage=15         \
   in1.pdf              \
                        \
  -dFirstPage=1         \
  -dLastPage=1          \
   in1.pdf              \
                        \
  -dFirstPage=4         \
  -dLastPage=6          \
   in2.pdf
Run Code Online (Sandbox Code Playgroud)

注意事项:将使用非嵌入字体或相同字体名称但使用不同编码和/或不同子集(具有相同字体名称前缀)的不同文档中的页面组合在一起可能会导致结果出现错误的 PDF。