从PDF中删除所有矢量路径

从PDF中删除所有矢量路径,pdf,ghostscript,mupdf,Pdf,Ghostscript,Mupdf,我正在寻找从PDF文件中删除所有path对象的方法 我怀疑这可能可以通过AdobeAcrobat中的javascript来实现,但如果能提供一个使用ghostscript或mupdf工具来实现的技巧,我将不胜感激 无论如何,任何工作解决方案都可以接受为正确答案要使用Ghostscript执行此操作,您必须修改pdfwrite设备。事实上,您可能需要为任何PDF解释器执行类似的操作 你认为什么是“路径”对象?比如说一个shfill?文本怎么样?使用类型3字体的文本(构成路径)如何 剪辑路径呢 如果

我正在寻找从PDF文件中删除所有
path
对象的方法

我怀疑这可能可以通过AdobeAcrobat中的javascript来实现,但如果能提供一个使用ghostscript或mupdf工具来实现的技巧,我将不胜感激


无论如何,任何工作解决方案都可以接受为正确答案

要使用Ghostscript执行此操作,您必须修改pdfwrite设备。事实上,您可能需要为任何PDF解释器执行类似的操作

你认为什么是“路径”对象?比如说一个shfill?文本怎么样?使用类型3字体的文本(构成路径)如何

剪辑路径呢

如果您真的想继续,我可以告诉您在哪里修改pdfwrite,只要您不介意重新编译Ghostscript

这可能是个愚蠢的问题,但你为什么要这么做?你的问题是否可能有其他解决方案?如果您只想删除填充路径(或者确实是笔划路径)。一种解决方案是通过ps2write运行该文件以获取PostScript,预先编写代码以将“fill”和“stroke”重新定义为no ops,然后通过pdfwrite运行该文件以获取PDF

[阅读评论后添加]

与XObject不同,PDF没有“path”对象。XObject是一种对象类型。路径是通过一系列操作创建的,如“newpath”、“moveto”、“curveto”和“lineto”。构建路径后,您可以使用“fill”或“stroke”对其进行操作。请注意,PDF也没有“text”对象类型

这就是为什么您的方法不起作用,您无法删除“路径对象”,因为没有任何路径,路径是在内容流中创建的。您可以使用表单XObject执行类似的操作,但是路径构造在表单内容流中,它仍然不是单独的对象

PostScript也是如此,它们不是任何一种面向对象的语言。在这两种语言中都不能“检测路径类型的向量对象”,因为没有对象。实际上,任何不是图像的东西都是向量对象,并且是从路径构造的(通过剪裁,甚至有些图像也可能被视为路径)

高亮显示的PostScript片段将矩形添加到路径中(路径在PDF或PostScript中不必是连续的)请注意,与PostScript中的惯例一样,它们不是直接使用PostScript运算符,而是执行使用运算符的过程。这些过程在程序序言中定义

顺便说一句,看起来您在这里使用了pswrite设备(对于这么小的示例无法确定)。如果是这种情况,您真的想从ps2write开始。否则,您最终会看到很多东西退化为微小的填充矩形(pswrite对许多图像类型都这样做)

我不建议您尝试“解密”ps2write输出(它不是加密的,是压缩的)

我的建议是创建一个PostScript文件,重新定义“show”和/或“fill”操作符,使它们不做任何操作,然后使用pdfwrite设备通过Ghostscript运行生成的PostScript程序。这将生成一个PDF文件,其中忽略所有笔划和/或填充对象

[最后增补]

我拿起你的样本文件检查了一下

我猜想您看到的错误是PDF文件使用了基于ICC的替换颜色/分隔颜色(当然它不能不填充矩形),并且没有设备空间着色转换。在这种情况下,ps2write的当前版本可能会解决您的问题。它(目前,这是由于更改)不保留/分离颜色,而是将其作为设备颜色(默认为RGB)发射。因此,只需将文件转换为PostScript并返回PDF即可完全解决您的问题

如果你知道问题出在哪里,如果你告诉我们的话会更快,我本来可以给你这些信息并在第一时间解决问题的

然后,我使用ps2write创建了文件的PostScript版本(注意,分隔颜色现在是RGB),并在PostScript程序前面加了两行前缀:

/fill {newpath} bind def
/stroke {newpath} bind def
请注意,您必须使用保留二进制的编辑器。然后使用pdfwrite设备通过Ghostscript运行PostScript程序,我会得到一个PDF文件,其中绿色的“装饰”消失了,我认为您有问题


所以,你的问题有一个解决方案,也可能有一个更好的方法来解决你的问题。

谢谢Rachel,但那是为了删除链接目标。我正在寻找一种删除向量路径对象的方法Hanks Ken。我有两个PDF,它们会在移动渲染器上引起问题,因为这些路径对象。这些是
路径类型的对象
因为有类型为
xobject
text
,等等的对象。它们只是一些页面装饰,我希望我可以指示ghostscript迭代每个pdf对象,如果检测到
path
对象,则将其删除。我将很快尝试将示例文件转换为postscript,并使用您的提示或类似方法来处理它他的,然后回复。肯,我将示例页面转换为ps,找到了向量路径的一部分:,但我看不出如何检测路径类型的向量对象。我也将同一页面导出到ps2,但无法解密对我有意义的内容。你可能想添加一些示例。可能这些是损坏的路径对象,需要修复…@mkl:如果你认为这有助于找到解决方案,我上传了uuencoded示例页面:@theta哪些移动渲染器有问题?我尝试了Android上的Adobe Reader和Polaris Office,两者都使PDF看起来不错。