首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ghostscript:将PDF转换为带有嵌入式字体的EPS,而不是轮廓曲线

Ghostscript:将PDF转换为带有嵌入式字体的EPS,而不是轮廓曲线
EN

Stack Overflow用户
提问于 2015-02-19 14:52:28
回答 1查看 5.9K关注 0票数 3

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

代码语言:javascript
运行
复制
gswin32 -dNOCACHE -dNOPAUSE -dBATCH -dSAFER -sDEVICE=epswrite -dLanguageLevel=2 -sOutputFile=test.eps -f test.pdf

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

代码语言:javascript
运行
复制
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 (test.pdf)略小:

test.pdf:

test2.pdf:

转换后能保持图形的宽度和高度吗?

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

我尝试了KenS的建议:

代码语言:javascript
运行
复制
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有非常奇怪的字体:

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

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

代码语言:javascript
运行
复制
✕ ✖ ✗✘✙ ✚✛

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

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

EN

回答 1

Stack Overflow用户

发布于 2015-02-19 16:05:00

我刚注意到你在用epswrite,你不会想这么做的。那个装置很可怕,已经被废弃了(现在就移除了)。使用eps2write设备代替(您将需要一个相对较新版本的Ghostscript)。

除了扔掉它之外,你不能用epswrite做任何事情,它会产生可怕的EPS文件。它也不能生成级别2文件,不管您将-dLanguageLevel设置为什么

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

更新

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

如果您有一个ToUnicode CMap,则Acrobat和其他读取器可以将这些字符代码转换为Unicode代码点,而不必让读取器返回启发式,最后一个是“将其视为ASCII”。因为编码安排不是ASCII,所以你会胡说八道。mimic的PostScript输出可以包含更多的ToUnicode信息,但这不是我们试图在ps2write中模仿的东西。毕竟,想必你已经有PDF文件了.

每次您进行转换时,您都会面临这种退化的风险,您应该在工作流程中尽量减少这种风险。

更糟糕的是,在这种情况下,输入的PDF文件有一个TrueType CID。基本语言2级PostScript无法处理CIDFonts (这是在2015年版中引入的)。因为eps2write只发出基本级别2,所以它不能将字体写成CIDFont。因此,它捕获字形轮廓并将其存储在类型3的字体中。

然而,我们的EPS/PS输出并不试图将ToUnicode信息嵌入到PostScript (它的非标准,很少的应用程序可以利用它,因此它使文件更大,而没有什么好处)。此外,CIDFonts使用多个(2个或更多)字节作为字符代码,因此无法将类型3字体编码为ASCII。

基本上,如果输入包含CIDFonts,则不能使用Ghostscript进行PDF->PS->PDF,并且仍然能够复制/粘贴/搜索文本。

顺便说一句,设置-dLanguageLevel根本没有意义。eps2write只创建2级输出。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28609400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档