如何使Ghostscript的`ps2pdf14`停止对字体进行子集化

时间:2009-09-13 16:16:48

标签: pdf fonts embedding ghostscript

我正在使用Ghostscript附带的ps2pdf14实用程序,我遇到了字体问题。

我传递给命令的指令似乎并不重要,它坚持对在源文档中找到的任何字体进行子集化。

e.g

-dPDFSETTINGS#/prepress 
-dEmbedAllFonts#true 
-dSubsetFonts#false 
-dMaxSubsetPct#0

请注意,#是因为该命令在Windows上运行,它与=。

相同

如果有人知道如何告诉ps2pdf不要使用子集字体,我将非常感激。

-------------------------- Notes -------------------- ----------------------

源文件是包含嵌入字体的PDF,因此它是已经嵌入源文件中的字体,我需要防止它成为目标文件中的子集。

目前所有源文件嵌入字体都是子集,在某些情况下,这从字体名称来看并不明显,即它不包含散列,并且乍一看似乎是完整字体,但宽度数组已经是所有字体的子集例。

2 个答案:

答案 0 :(得分:5)

我不确定你到底想要达到什么目标。可能根本没有嵌入字体(甚至不作为子集)?或者它是“我不想要子集,但是完整的字体”?

注1:

  • ps2pdf14实用程序是一个批处理文件,它使用预先设置的命令行参数数组调用实际gswin32c.exe。如果您完全自己构建gswin32c命令行,则可以更灵活地进行实验。

注2:

  • Ghostscript无法从源PDF(至少AFAIK)中取消嵌入字体。

我一直使用以下命令行成功控制字体嵌入策略:

  gswin32c.exe ^
    -dBATCH ^
    -dNOPAUSE ^
    -sOutputFile=c:/path/to/my/output.pdf ^
    -sDEVICE=pdfwrite ^
    -dPDFSETTINGS=/prepress ^
    -dCompressFonts=false ^
    -dSubsetFonts=false ^
    -dEmbedAllFonts=true ^
    -c ".setpdfwrite <</NeverEmbed [ ]>> setdistillerparams" ^
    -f c:/path/to/my/postscript.ps

前一个完全嵌入所有字体(甚至是“Base 14”字体)(无子集)。下一个没有嵌入任何字体:

  gswin32c.exe ^
    -dBATCH ^
    -dNOPAUSE ^
    -sOutputFile=c:/path/to/my/output.pdf ^
    -sDEVICE=pdfwrite ^
    -dPDFSETTINGS=/default ^
    -dEmbedAllFonts=false ^
    -c ".setpdfwrite <</AlwaysEmbed [ ]>> setdistillerparams" ^
    -f c:/path/to/my/postscript.ps

注3:

  • .setpdfwrite部分调用被认为对PDF创建有益的默认值。如果它出现在命令行的最后,它可能会覆盖您之前设置的内容。因此,/NeverEmbed [ ]和/或/AlwaysEmbed [ ] p部分在调用输入文件之前添加 之后

答案 1 :(得分:0)

尝试创建包含以下内容的设置文件:

&LT;&LT;    / SubsetFonts false &GT;&GT; setdistillerparams