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

时间:2010-09-29 06:14:05

标签: macos pdf

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

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

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

3 个答案:

答案 0 :(得分:8)

使用pdftk

删除第8页:

pdftk in.pdf cat 1-7 9-end output out.pdf

答案 1 :(得分:3)

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

gs \
  -o removed-page-1-from-input.pdf \
  -sDEVICE=pdfwrite \
  -dFirstPage=2 \
  /path/to/input.pdf

但是,pdftk 作业的更好工具(已经向您推荐)。

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

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


更新

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

最新版本带有一个新参数-sPageList。这可以这样使用:

-sPageList="1, 5-10, 12-"

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

对于旧版本的Ghostscript(以及最新版本的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

警告: 组合使用非嵌入字体或相同字体名称但不同编码和/或不同子集(具有相同字体名称前缀)的不同文档中的页面导致结果中出现错误的PDF。

答案 2 :(得分:0)

-[PDFDocument removePageAtIndex:]看起来应该让这成为可能。顺便说一句,Preview.app可以删除一个页面,但它不是可编写脚本的,所以这不是一个程序化的解决方案。