如何从PDF中删除除位图之外的所有内容?

时间:2015-05-07 15:49:49

标签: pdf ghostscript postscript

How can I remove all images from a PDF?中,Kurt Pfeifle提供了一段PostScript代码(由Chris Liddell提供),使用GhostScript过滤掉PDF中的所有位图。

这就像一个魅力;但是,我也对从PDF中删除位图之外的所有内容以及不重新压缩位图的配套任务感兴趣。或者,最终将矢量和位图“层”分开。 (我知道,这不是PDF术语中的图层。)

AFAIU,Kurt的过滤器通过将所有位图发送到空设备,同时将其他所有内容保留到pdfwrite来工作。我读到有可能使用不同的设备与GS,所以我希望默认情况下可以将所有内容发送到假/空设备,并且只切换到pdfwrite以获取由过滤。但不幸的是,我完全无法将这样的东西翻译成PostScript代码。

任何人都可以提供帮助,或者至少告诉我这种方法注定会失败吗?

1 个答案:

答案 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

请注意,这仅是不受支持的示例代码。