Ghostscript在pdf中渲染嵌入字体很糟糕(所有锯齿状)

时间:2010-08-16 15:00:45

标签: pdf rendering ghostscript

Ghostscript无法正确呈现pdf中的嵌入字体。 例如http://vegro.nl/cmsfiles/ConsumentenAssortiment/Brochure/10.axd 右上角('Thermrad')徽标的字符都是锯齿状的。 如果我在Adobe Reader中打开文件,完全没问题!

你也有这个问题吗?有什么解决方案吗? 我一直在寻找几天,但我找不到任何东西..

我在Windows Vista和CentOS上都尝试过Ghostscript 8.64和8.71。

非常感谢你! 戴夫

2 个答案:

答案 0 :(得分:3)

我的建议是使用Ghostscript 8.71。然后使用此命令行:

  gswin32c.exe ^
      -sDEVICE=pdfwrite ^
      -o thermrad-out.pdf ^
      -dPDFSETTINGS=/printer ^
      10.axd

应该将PDF转换为不再存在问题的PDF。因为原始的.axd文件确实存在嵌入字体的问题。 (我正在使用XPDF套件中的pdffonts.exe来检查)。问题发生在10.axd的第3页:

 for /l %i in (1,1,16) do (
       echo.   ............ Page %i ............................... ^
       & pdffonts.exe -f %i -l %i 10.axd ^
       & echo.)

输出:

  [....]
        ............ Page 3 ...............................
  name                                 type              emb sub uni object ID
  ------------------------------------ ----------------- --- --- --- ---------
  YCRHYF+HelveticaNeue-LightExt        Type 1C           yes yes yes    249  0
  XCZBKH+HelveticaNeue-Light           Type 1C           yes yes yes    250  0
  Error: Illegal entry in bfchar block in ToUnicode CMap
  YCRHYF+HelveticaNeue-LightExt        Type 1C           yes yes yes     15  0
  Error: Illegal entry in bfchar block in ToUnicode CMap
  YCRHYF+HelveticaNeue-LightExt        Type 1C           yes yes yes     19  0
  Error: Illegal entry in bfchar block in ToUnicode CMap
  YCRHYF+HelveticaNeue-LightExt        Type 1C           yes yes yes     41  0
  Error: Illegal entry in bfchar block in ToUnicode CMap
  YCRHYF+HelveticaNeue-LightExt        Type 1C           yes yes yes     45  0
  Error: Illegal entry in bfchar block in ToUnicode CMap
  YCRHYF+HelveticaNeue-LightExt        Type 1C           yes yes yes     49  0
  Error: Illegal entry in bfchar block in ToUnicode CMap
  YCRHYF+HelveticaNeue-LightExt        Type 1C           yes yes yes     53  0
  Error: Illegal entry in bfchar block in ToUnicode CMap
  YCRHYF+HelveticaNeue-LightExt        Type 1C           yes yes yes     57  0
  Error: Illegal entry in bfchar block in ToUnicode CMap
  YCRHYF+HelveticaNeue-LightExt        Type 1C           yes yes yes     61  0
  [....]

在我让Ghostscript修复之后,修复过的PDF中第3页的问题就消失了:

 c:\> pdffonts.exe -f 3 -l 3 thermrad.pdf

   name                                 type              emb sub uni object ID
   ------------------------------------ ----------------- --- --- --- ---------
   CZBBTM+HelveticaNeue-LightExt        Type 1C           yes yes no      13  0
   MXETZY+HelveticaNeue-Light           Type 1C           yes yes no      40  0

答案 1 :(得分:0)

将PDF转换为JPG时,我们为平滑字体渲染的解决方法是使用-dGraphicsAlphaBits=4 -dTextAlphaBits=4启用文本消除锯齿功能。

这是我用来转换为命令行传递的page size的Windows批处理文件。示例调用:pdf2jpg infile.pdf 11x17

gswin64c.exe ^
-dNOPAUSE -P- -dSAFER -dBATCH ^
-dGraphicsAlphaBits=4 ^
-dTextAlphaBits=4 ^
-sDEVICE=jpeg ^
-dJPEGQ=85 ^
-r300x300 ^
-sPAGESIZE=%2^
-sOutputFile=%~n1.jpg ^
%1

如果存在透明图像,则在某些gs版本中至少会有一个known issue字体抗锯齿自动关闭。 Convert a PDF to a Transparent PNG with GhostScript有一个解决方案。