Ghostscript渲染丑陋的文字

时间:2014-10-09 13:47:09

标签: pdf ghostscript text-rendering

我试图添加将LaTeX方程呈现给我正在进行的项目的功能。为此,我使用XeLaTeX创建一个PDF文件,然后使用Ghostscript将其渲染为(透明)96dpi-PNG。

我希望将渲染的LaTeX与文本的其余部分(使用标准的.NET GDI +方法呈现,但这是非主题)进行混合,但我可以'得到一个可靠的"好"文本呈现:输出总是看起来模糊不清,否则"坏"。

示例:

Comparison

从左到右,使用Ghostscript,Photoshop和TexWorks(我明白在内部使用Ghostscript)以96dpi渲染的相同(小)PDF。

我用来运行Ghostscript的命令如下:

"C:/Program Files (x86)/gs/gs9.09/bin/gswin32c.exe" \
      -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT \
      -dMaxBitmap=500000000 -dAlignToPixels=1 -dGridFitTT=2 \
       "-sDEVICE=pngalpha" -dTextAlphaBits=4 \
      -dGraphicsAlphaBits=4 "-r96" -dFirstPage=1 -dLastPage=1 \
      -sOutputFile="output.png" "input.pdf"

(我实际上几乎从转换PDF文件时ImageMagick调用的命令中复制了,但这是另一个故事)。我尝试更改任何相关选项(dAlignToPixels = 0,dGridFitTT = 0/1/2,dTextAlphaBits = 2/4 [或完全没有此参数]),我甚至尝试将PDF渲染为分辨率的4倍然后缩小它,没有任何明显的改善。

然而,我确信必须有一些方法可以使用Ghostscript正确地渲染PDF(自TexWorks以来),尽管我找不到它。

任何提示? PDF格式为this one

2 个答案:

答案 0 :(得分:2)

您可以尝试以更高的分辨率呈现PDF。对于11磅大小的文本,96dpi是不够的。

如果您使用192dpi,然后将结果图像的显示比例缩放到50%(无论您使用PNG的哪个位置),这些部分仍应显示与原始图像相同的尺寸,但分辨率更高。曾经是4x7像素's'的现在应该是8x14像素's' ......


更新

好的,既然我的解释似乎对OP来说已经不够了解了,这就是交易。

  1. 使用Ghostscript生成包含单词“Test”的PDF文件。就我而言,它是Ghostscript v9.10:

    gs                       \
     -o test.pdf             \
     -sDEVICE=pdfwrite       \
     -g230x100               \
     -c "/Helvetica findfont \
         11 scalefont        \
         setfont             \
         1 1 moveto          \
         (Test) show         \
         showpage"
    
  2. 从这张PDF中,使用6种不同的分辨率生成描绘“测试”一词的6个不同图像。 gs仍为Ghostscript v9.10(需与gs -version核对):

    for i in 1 2 3 4 5 6; do      \
        gs                        \
         -o t$(( ${i} * 96 )).png \
         -r$(( ${i} * 96 ))       \
         -sDEVICE=pngalpha        \
         -dAlignToPixels=1        \
         -dGridFitTT=2            \
         -dTextAlphaBits=4        \
         -dGraphicsAlphaBits=4    \
          t.pdf ;                 \
    done
    

    这将创建以下PNG,由ImageMagick的identify命令确认:

    identify -format "%f :   %Wx%H pixels  --  %b filesize\n" t[1-9]*.png
      t96.png :   31x13 pixels  --     475B filesize
     t192.png :   61x27 pixels  --     774B filesize
     t288.png :   92x40 pixels  --    1.1KB filesize
     t384.png :  123x53 pixels  --   1.43KB filesize
     t480.png :  153x67 pixels  --   1.76KB filesize
     t576.png :  184x80 pixels  --   2.01KB filesize
    
  3. 创建一个示例LaTeX文档并将并排和/或逐行嵌入不同的图像。这是我的示例代码:

    \begin{document}
    Test
    \includegraphics[height=7.5pt]{t96.png}
    \includegraphics[height=7.5pt]{t96.png}
    \includegraphics[height=7.5pt]{t192.png}
    \includegraphics[height=7.5pt]{t288.png}
    \includegraphics[height=7.5pt]{t384.png}
    \includegraphics[height=7.5pt]{t480.png}
    \includegraphics[height=7.5pt]{t576.png}
    Test\\
    
    {}
    
    Test <== real text
    
    \includegraphics[height=7.5pt]{t96.png}  <-- 96 dpi figure
    
    \includegraphics[height=7.5pt]{t192.png} <-- 192 dpi figure
    
    \includegraphics[height=7.5pt]{t288.png} <-- 288 dpi figure
    
    \includegraphics[height=7.5pt]{t384.png} <-- 384 dpi figure
    
    \includegraphics[height=7.5pt]{t480.png} <-- 480 dpi figure
    
    \includegraphics[height=7.5pt]{t576.png} <-- 576 dpi figure
    
    Test <== real text
    \end{document}
    
  4. 以下是来自上述LaTeX代码中LuaLaTeX创建的PDF的截图(缩放率为400%):

    Screenshot from resulting PDF page

    带有8个“测试”字样的行仅在第一个和最后一个字中包含实际文本。中间的6个字是96,96,192,288,384,480和576 dpi的图像。

  5. 我希望您现在可以清楚地看到,如果将更高分辨率的图像包含在LaTeX代码中,如何将图像生成扩展到更高的分辨率将为最终PDF提供更好的质量...

答案 1 :(得分:1)

你正在以96 dpi的11点渲染文字,高达约14像素的高度,坦率地说,不是很多(在我的输出中,'s'是7像素高4宽)。看看你的输出,所有3看起来都很“模糊”,而Photoshop的输出在首都T中看起来过于大胆。

如果您不希望它模糊,则不要设置TextAlphaBits,或者不要将其设置为如此高的值。

我还建议使用当前版本(9.15)。