Ghostscript:使用嵌入字体而不是轮廓曲线将PDF转换为EPS

时间:2015-02-19 14:52:28

标签: pdf converter ghostscript eps

我使用以下命令将PDF转换为EPS:

gswin32 -dNOCACHE -dNOPAUSE -dBATCH -dSAFER -sDEVICE=epswrite -dLanguageLevel=2 -sOutputFile=test.eps -f test.pdf

然后我使用以下命令将EPS转换为另一个PDF(test2.pdf)以查看EPS数字。

gswin32 -dSAFER -dNOPLATFONTS -dNOPAUSE -dBATCH -dEPSCrop -sDEVICE=pdfwrite -dPDFSETTINGS=/printer -dCompatibilityLevel=1.4 -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true -sOutputFile=test2.pdf -f test.eps

我发现生成的test2.pdf中的文本已转换为轮廓曲线。也没有嵌入字体。

是否可以将PDF转换为EPS而无需将文本转换为轮廓?我的意思是,EPS嵌入字体和文字。

转换后(test.pdf - > test.eps - > test2.pdf),PDF图(test2.pdf)的高度和宽度略小于原始PDF(测试。 PDF):

检验.pdf:

enter image description here

test2.pdf:

enter image description here

转换后是否可以保持图形的宽度和高度?

这是test.pdf:https://dl.dropboxusercontent.com/u/45318932/test.pdf


我尝试了KenS的建议:

gswin32 -dNOPAUSE -dBATCH -dSAFER -sDEVICE=eps2write -dLanguageLevel=2 -sOutputFile=test.eps -f test.pdf
gswin32 -dSAFER -dNOPLATFONTS -dNOPAUSE -dBATCH -dEPSCrop -sDEVICE=pdfwrite -dPDFSETTINGS=/printer -dCompatibilityLevel=1.4 -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true -sOutputFile=test2.pdf -f test.eps

我可以看到转换后的test2.pdf有非常奇怪的字体:

enter image description here

与test.pdf中的原始字体不同:

enter image description here

当我从test2.pdf复制文本时,我只得到几个符号,如:

✕ ✖ ✗✘✙ ✚✛

这是test2.pdf:https://dl.dropboxusercontent.com/u/45318932/test2.pdf

我使用的是最新的Ghostscript 9.15。那么问题是什么?

1 个答案:

答案 0 :(得分:4)

我刚注意到你正在使用epswrite,你不想这样做。该设备非常糟糕,已被弃用(现已删除)。请改用eps2write设备(您需要一个相对较新版本的Ghostscript)。

除了扔掉它之外,你无法用epswrite做任何事情,它会造成可怕的EPS文件。它也无法制作2级文件,无论你将-dLanguageLevel设置为

哦,不要使用-dNOCACHE来防止字体被处理,并将所有内容分解为轮廓或位图。

<强>更新

您将子集字体设置为true。通过这样做,使用的字符代码或多或少是随机的。文档中的第一个字形(例如'Hello World'中的'H')获取代码1,第二个(例如'e')获取代码2,依此类推。

如果您有ToUnicode CMap,那么Acrobat和其他读者可以将这些字符代码转换为Unicode代码点,而不会让读者不得不依赖于启发式,最后一个是“将其视为ASCII”。因为编码排列不是 ASCII,所以你会得到胡言乱语。 MS Windows的PostScript输出可以包含其他ToUnicode信息,但这不是我们试图在ps2write中模仿的东西。毕竟,大概你已经有了一个PDF文件......

每次进行转换时都会冒这种降级的风险,您应该尝试在工作流程中尽量减少这种情况。

在这种情况下问题更严重,输入PDF文件具有TrueType CID字体。基本语言级别2 PostScript无法处理CIDFonts(这是在2015版本中引入的IIRC)。由于eps2write仅发出基本级别2,因此无法将字体写为CIDFont。因此,它会捕获字形轮廓并将其存储为类型3字体。

但是,我们的EPS / PS输出不会尝试在PostScript中嵌入ToUnicode信息(其非标准,极少数应用程序可以使用它,因此它使文件更大而没有什么好处)。另外,CIDFonts对字符代码使用多个(2个或更多)字节,因此无法将类型3字体编码为ASCII。

从根本上说,如果输入包含CIDFonts,则不能使用Ghostscript进行PDF-&gt; PS-&gt; PDF并且仍能够复制/粘贴/搜索文本。

顺便说一句,设置-dLanguageLevel毫无意义。 eps2write only 创建2级输出。