我有一堆PDF文档,所有这些文档都包含我要删除的标题页。
有没有办法以编程方式删除它们?
我发现的大多数PDF实用程序只能合并文档但不能删除页面。在打印对话框中,我可以选择第2页,然后打印到文件,但我找不到以编程方式访问此功能的任何方法。
答案 0 :(得分:8)
答案 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可以删除一个页面,但它不是可编写脚本的,所以这不是一个程序化的解决方案。