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

How to remove everything except bitmaps from a PDF?

中,Kurt Pfeifle 给出了一段 PostScript 代码(由 Chris Liddell 提供)使用 GhostScript 从 PDF 中过滤掉所有位图。

这很有魅力;但是,我也对从 PDF 中删除所有 除了 位图并且不重新压缩位图的伴随任务感兴趣。或者,最终分离矢量和位图 "layers."(我知道,这不是 PDF 术语中的层。)

AFAIU,Kurt 的过滤器的工作原理是将所有位图发送到空设备,同时将其他所有内容留给 pdfwrite。我读到可以将不同的设备与 GS 一起使用,所以我希望默认情况下可以将所有内容发送到 fake/null 设备,并且只为捕获的那些图像切换到 pdfwrite通过过滤器。但不幸的是,我完全无法将这样的东西翻译成 PostScript 代码。

谁能帮忙,或者至少告诉我这种方法是否注定要失败?

可以,但工作量很大。

您不能从 nulldevice 开始并根据需要推送 pdfwrite 设备,这根本行不通,因为 pdfwrite 设备会在您卸载后立即写出累积的 PDF 文件。 Reloadng 它将开始一个新的 PDF 文件。

此外,您需要相同的 pdfwrite 设备实例用于所有代码,因此您无法加载 pdfwrite 设备,加载 nulldevice,然后加载 pdfwrite 设备再次只为你想要的位。这意味着(目前)唯一有效的方法是 Chris 编写的方法。每当您想静默使用操作时,您都需要加载 pdfwrite 并将空设备推入到位。

只是 'images' 的变化非常有限,因为处理图像的运算符并不多。

然而,为了删除除图像之外的所有内容,有很多 操作员。你需要重写;描边、填充、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

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