我试图添加将LaTeX方程呈现给我正在进行的项目的功能。为此,我使用XeLaTeX创建一个PDF文件,然后使用Ghostscript将其渲染为(透明)96dpi-PNG。
我希望将渲染的LaTeX与文本的其余部分(使用标准的.NET GDI +方法呈现,但这是非主题)进行混合,但我可以'得到一个可靠的"好"文本呈现:输出总是看起来模糊不清,否则"坏"。
示例:
从左到右,使用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。
答案 0 :(得分:2)
您可以尝试以更高的分辨率呈现PDF。对于11磅大小的文本,96dpi是不够的。
如果您使用192dpi,然后将结果图像的显示比例缩放到50%(无论您使用PNG的哪个位置),这些部分仍应显示与原始图像相同的尺寸,但分辨率更高。曾经是4x7像素's'的现在应该是8x14像素's' ......
好的,既然我的解释似乎对OP来说已经不够了解了,这就是交易。
使用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"
从这张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
创建一个示例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}
以下是来自上述LaTeX代码中LuaLaTeX创建的PDF的截图(缩放率为400%):
带有8个“测试”字样的行仅在第一个和最后一个字中包含实际文本。中间的6个字是96,96,192,288,384,480和576 dpi的图像。
我希望您现在可以清楚地看到,如果将更高分辨率的图像包含在LaTeX代码中,如何将图像生成扩展到更高的分辨率将为最终PDF提供更好的质量...
答案 1 :(得分:1)
你正在以96 dpi的11点渲染文字,高达约14像素的高度,坦率地说,不是很多(在我的输出中,'s'是7像素高4宽)。看看你的输出,所有3看起来都很“模糊”,而Photoshop的输出在首都T中看起来过于大胆。
如果您不希望它模糊,则不要设置TextAlphaBits,或者不要将其设置为如此高的值。
我还建议使用当前版本(9.15)。