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

标签 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(test.pdf)小了一点点:

测试.pdf:

enter image description here

test2.pdf:

enter image description here

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

这是测试.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。那么问题是什么?

最佳答案

我刚刚注意到您正在使用 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(IIRC 这是在 2015 版中引入的)。由于 eps2write 仅发出基本级别 2,因此它不能将字体写为 CIDFont。因此,它会捕获字形轮廓并将它们存储在 type 3 字体中。

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

从根本上说,如果输入包含 CIDFonts,您不能使用 Ghostscript 转到 PDF->PS->PDF 并且仍然能够复制/粘贴/搜索文本。

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

关于pdf - Ghostscript:使用嵌入字体而不是轮廓曲线将 PDF 转换为 EPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28609400/

相关文章:

ios - 如何去除黄色选择突出显示?

php - FPDF - PHP While 循环只返回第一个值

r - 将 RStudio 演示文稿 (.Rpres) 转换为 rmarkdown 演示文稿 (.Rmd)

java - Spring 3.0 中的转换器

FFMPEG 将带有 alpha channel 的 .avi/.mov 编码为 .3g2(保留 alpha)

java - 如何使用 x.509 签名/证书签署 PDF

pdf - 组织模式不导出为 PDF

linux - 在 Linux 中使用 CUPS 的 GoDEX 打印机中的条码太宽

php - 使用 Ghostscript 时禁止旋转 PDF 中的页面

c++ - 如何使用 Ghostscript 自动安装 RedMon