我有一堆PDF文档,它们都包含一个我想要删除的封面页。
有没有办法以编程方式将它们删除?
我发现大多数PDF工具只能合并文档,而不能删除页面。在打印对话框中,我可以选择第2页到最后一页,然后打印到文件,但我找不到任何以编程方式访问此功能的方法。
仅供记录:您也可以使用Ghostscript:
gs \
-o removed-page-1-from-input.pdf \
-sDEVICE=pdfwrite \
-dFirstPage=2 \
/path/to/input.pdf
然而,pdftk
是更好的工具来完成这项任务(并且已经向您推荐了该工具)。
此外,这个Ghostscript命令行可以改变输入PDF的一些属性,因为它本质上是重新压缩的。这可能是需要的更改,也可能不是。要控制这种行为的各个方面(或抑制其中的一些方面),需要使用更复杂的带有更多参数的命令行。
pdftk将每页重用原始PDF对象。
Ghostscript还有一个额外的参数-dLastPage
。与-dFirstPage
一起使用,这允许提取页面范围。
最新版本增加了一个新参数-sPageList
。可以像这样使用:
-sPageList="1, 5-10, 12-"
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 文件出现错误。
-sPageList="1, 5-10, 12-"
*** -- 可以处理输入文件的第1页、第5-10页和第12页到最后一页。然而,我从未真正测试过它,所以我不知道它的可靠性如何。对于旧版本,您可以使用不同的参数多次向同一GS调用提供输入PDF:***gs -o a.pdf -sDEVICE=pdfwrite -dFirstPage=1 -dLastPage=1 in.pdf -dFirstPage=5 -dLastPage=10 in.pdf -dFirstPage=12 in.pdf
*** 来实现相同的结果... - Kurt Pfeifle-[PDFDocument removePageAtIndex:]
看起来应该可以实现这个功能。顺便说一下,Preview.app 可以删除页面,但它不可编写脚本,因此这不是一个编程解决方案。