如何在使用Ghostscript将PDF转换为EPS轮廓时保留边距?
我使用Ghostscript将PDF文档转换为EPS文件。如何在使用Ghostscript将PDF转换为EPS轮廓时保留边距?
我的目标是删除文本信息(同时保持文本的矢量轮廓完整)在PDF中。我通过转换为EPS然后将其转换回PDF来做到这一点。 (当然,我不希望阻止人们运行OCR来获取文本。)
我使用的命令是:
gs -q -dNOCACHE -dNOPAUSE -dBATCH -dSAFER \
-sDEVICE=epswrite -sOutputFile=output.eps input.pdf
但是,当我转换所产生的EPS回PDF时,原始页边空白大部分丢失,页面大小缩小,偶数页面上的文本被裁剪到右侧。
有没有办法在转换过程中保留原始页面大小和边距?
我试过的另一个工具是ps2eps
。
虽然它支持指定页面大小,但确实而不是实际上删除了文本信息,所以仍然可以从生成的PDF中选择和复制文本。这打破了我的目的。
另一个缺点是它只支持转换单个页面,所以我必须先使用psselect
将我的PDF转换为一组单页PS文件。
首先不要使用epswrite
(实际上在最近版本的Ghostscript中,你不能 - 所以你必须使用旧版本,升级!)。您应该使用eps2write
设备。
其次,不要转换PDF-> EPS-> PDF。
每次转换都会让您损失准确性。如果您打算维护页面级别的信息(如边距),请不要这样做。 EPS文件故意打算有一个紧密的边界框,除了其他要求可能使它不适合你的目的。
如果你想保持页面级的数据,然后将转换为的PostScript,不EPS,使用ps2write
设备。
注意使用epswrite
设备时,你是不是“删除文本信息(同时保持完整文本的矢量轮廓)”,但在一般情况下要渲染文本的位图。丑陋,并且不能很好地扩展!
要明智地做到这一点,请使用当前版本的Ghostscript(9.16),使用pdfwrite
设备(使用PDF输入,PDF输出)并选择-dNoOutputFonts
开关。
这会做你想要的东西:它将绘制文本作为矢量,而不是文本。结果当然是一个PDF文件,它是不可测量的,并且不受复制/粘贴的影响。
感谢您的建议。我放大了从EPS转换而来的PDF,它绝对是矢量曲线,而不是位图。我升级了我的GhostScript并在PDF-out方法中尝试了PDF。它很好地工作,但生成了更大的PDF,可能是因为字形没有被重用。我的原始PDF是50 KB,通过EPS的PDF是20 KB,现在直接PDF是800 KB。奇怪的是,字形的形状似乎在EPS中被重用,这将解释小文件的大小。 – user31039
我发现自己现在无法重现PDF-> EPS-> PDF过程。所以这个答案是唯一剩下的工作方法。 – user31039
形状将被“重用”的唯一方法是如果它们被存储为类型3字体中的字形描述。这是可能的,在某些情况下,epswrite将生成矢量字形描述而不是位图,但通常它会生成位图。请注意,如果它是否生成位图或向量,它将作为3型字体进行操作,因此它仍保留文本信息。 pdfwrite方法完全删除所有文本信息,但epswrite不会(通常不是100%的时间)对文本进行重新编码,以便复制/粘贴/搜索没有用处。 – KenS