在How can I remove all images from a PDF?中,Kurt Pfeifle提供了一段PostScript代码(由Chris Liddell提供),使用GhostScript过滤掉PDF中的所有位图。
这就像一个魅力;但是,我也对从PDF中删除除位图之外的所有内容以及不重新压缩位图的配套任务感兴趣。或者,最终将矢量和位图“层”分开。 (我知道,这不是PDF术语中的图层。)
AFAIU,Kurt的过滤器通过将所有位图发送到空设备,同时将其他所有内容保留到pdfwrite
来工作。我读到有可能使用不同的设备与GS,所以我希望默认情况下可以将所有内容发送到假/空设备,并且只切换到pdfwrite
以获取由过滤。但不幸的是,我完全无法将这样的东西翻译成PostScript代码。
任何人都可以提供帮助,或者至少告诉我这种方法注定会失败吗?
答案 0 :(得分:3)
它可能,但它的工作量很大。
你不能从null设备开始并根据需要推送pdfwrite设备,这根本不起作用,因为pdfwrite设备会在你卸载它时立即写出累积的PDF文件。重新加载它将启动一个新的PDF文件。
此外,您需要所有代码的pdfwrite设备的相同实例,因此您无法加载pdfwrite设备,加载null设备,然后仅为位加载pdfwrite设备你要。这意味着(目前)工作的唯一方法是克里斯写的那个。您需要加载pdfwrite并在需要静默使用操作时将空设备推送到位。
只是'图像'是一个非常有限的变化,因为没有那么多的运营商处理图像。
为了删除除图像之外的所有内容,有一个很多的运算符。你需要覆盖;笔画,填充,eofill,rectstroke,rectfill,ustroke,ufill,ueofill,shfill,show,ashow,widthshow,awidthshow,xshow,xyshow,yshow,glyphshow,cshow和kshow。我可能错过了一些操作员,但至少这些是基础知识。
请注意,Chris最初发布的代码确实过滤了各种类型的对象,而不仅仅是图像,您可以在这里找到他的代码:
http://www.ghostscript.com/~chrisl/filter-obs.ps
请注意,这仅是不受支持的示例代码。