the*_*eta 3 pdf ghostscript mupdf
我正在寻找一种path从PDF文件中删除所有对象的方法.
我怀疑这可能是用Adobe Acrobat中的javascript完成的,但我真的很感激使用ghostscript或mupdf工具做一些提示.
无论如何,任何可行的解决方案都是正确的答案
要使用Ghostscript执行此操作,您必须修改pdfwrite设备.事实上,您可能需要为任何PDF解释器执行类似的操作.
你认为什么是"路径"对象?例如,一个shfill?文字怎么样?如何使用类型3字体(构造路径)的文本?
剪辑路径怎么样?
如果你真的想要追求这个,我可以告诉你在哪里修改pdfwrite,只要你不介意重新编译Ghostscript.
这可能是一个愚蠢的问题,但你为什么要这样做呢?是否可能有另一种解决方案可以解决您的问题?如果您要做的就是删除填充路径(或者实际上是描边路径.一种解决方案是通过ps2write运行文件以获取PostScript,将代码重新定义为'fill'和'stroke'作为no-ops,然后运行通过pdfwrite回复以获取PDF.
[阅读评论后添加]
与XObject(一种对象)不同,PDF没有"路径"对象.路径由一系列操作创建,例如'newpath','moveto','curveto'和'lineto'.一旦你建立了一条路径,你就可以用"填充"或"笔划"对其进行操作.请注意,PDF也没有"文本"对象类型.
这就是为什么你的方法不起作用,你不能删除'路径对象',因为没有,路径是在内容流中创建的.您可以使用Form XObject执行类似的操作,但是然后路径构造位于Form内容流中,它仍然不是单独的对象.
PostScript也是如此,它们不是任何一种面向对象的语言.您无法在任何一种语言中"检测路径类型的矢量对象",因为没有对象.在实践中,任何不是图像的东西都是矢量对象,并且是从路径构建的(并且具有剪切,甚至一些图像可能被视为路径)
您突出显示的PostScript片段在路径中添加了一个矩形(路径在PDF或PostScript中不必连续),然后填充它.请注意,与PostScript中的常规做法一样,这些不是直接使用PostScript运算符,而是执行使用运算符的过程.程序在程序序言中定义.
顺便说一句,看起来你在这里使用了pswrite设备(不能确定这么小的样本).如果是这种情况,你真的想从ps2write开始.否则你最终将会有很多东西退化为微小的填充矩形(pswrite会使用许多图像类型)
我没有建议您尝试'解密'ps2write输出(它没有加密,它是压缩的).
我建议创建一个PostScript文件,重新定义'show'和/或'fill'运算符,使它们什么都不做,然后使用pdfwrite设备通过Ghostscript运行生成的PostScript程序.这将生成一个PDF文件,其中忽略所有描边和/或填充的对象.
[最后补充]
我拿起了你的样本文件并进行了检查.
我认为你看到的错误是PDF文件使用/分色(肯定它不能填充矩形)与ICCBased替代品没有设备空间色调转换.在这种情况下,当前版本的ps2write可以解决您的问题.它(目前,这是由于更改)不保留/分离颜色,而是将它们作为设备颜色发出,默认为RGB.因此,只需将文件转换为PostScript并返回PDF即可完全解决您的问题.
如果你知道问题是什么,如果你告诉我们的话会更快,我可以在第一时间给你这些信息和解决方法.
然后使用ps2write我创建了一个PostScript版本的文件(注意Separation颜色现在是RGB)并在PostScript程序中加上两行前缀:
/fill {newpath} bind def
/stroke {newpath} bind def
Run Code Online (Sandbox Code Playgroud)
请注意,您必须使用保留二进制文件的编辑器.然后使用pdfwrite设备通过Ghostscript运行该PostScript程序,我获得了一个PDF文件,其中我认为你遇到问题的绿色"装饰"已经消失.
因此,您的问题有一个解决方案,也可能是解决问题的更好方法.