Cha*_*ang 3 pdf converter ghostscript eps
我使用以下命令将 PDF 转换为 EPS:
gswin32 -dNOCACHE -dNOPAUSE -dBATCH -dSAFER -sDEVICE=epswrite -dLanguageLevel=2 -sOutputFile=test.eps -f test.pdf
Run Code Online (Sandbox Code Playgroud)
然后我使用以下命令将 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
Run Code Online (Sandbox Code Playgroud)
我发现生成的 test2.pdf 中的文本已转换为轮廓曲线。也不再嵌入字体。
是否可以将 PDF 转换为 EPS 而不将文本转换为轮廓?我的意思是,带有嵌入字体和文本的 EPS。
同样经过转换(test.pdf -> test.eps -> test2.pdf),PDF图(test2.pdf)的高宽比原来的PDF(test.pdf)要小一点:
测试.pdf:

测试2.pdf:

转换后是否可以保持图形的宽度和高度?
这是 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
Run Code Online (Sandbox Code Playgroud)
我可以看到转换后的 test2.pdf 有非常奇怪的字体:

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

当我从 test2.pdf 复制文本时,我只得到几个符号,例如:
? ? ??? ??
Run Code Online (Sandbox Code Playgroud)
这是 test2.pdf:https ://dl.dropboxusercontent.com/u/45318932/test2.pdf
我使用的是最新的 Ghostscript 9.15。那么问题是什么?
我刚刚注意到您正在使用 epswrite,您不想这样做。该设备很糟糕,已被弃用(现在已删除)。改用 eps2write 设备(您需要一个相对较新的 Ghostscript 版本)。
除了扔掉它之外,您对 epswrite 无能为力,它会生成糟糕的 EPS 文件。无论您将 -dLanguageLevel 设置为什么,它也无法制作 2 级文件
哦,不要使用 -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 个或更多)字节作为字符代码,因此无法将 type 3 字体编码为 ASCII。
从根本上说,如果输入包含 CIDFonts,您不能使用 Ghostscript 转到 PDF->PS->PDF 并且仍然能够复制/粘贴/搜索文本。
顺便说一句,设置 -dLanguageLevel 根本没有意义。eps2write仅创建 2 级输出。
| 归档时间: |
|
| 查看次数: |
5406 次 |
| 最近记录: |