为什么wkhtmltopdf.exe在不同的Windows机器上产生不同的结果?

时间:2014-06-03 14:58:07

标签: wkhtmltopdf

我有一个简单的test.html文件:

<html>
<div style="width: 100%; font-size: 28pt;">
This is a test to see what happens when this kind of text gets processed by wkhtmltopdf
</div>
</html>

我通过这样的wkhtmltopdf.exe运行:

wkhtmltopdf.exe test.html test.pdf

在一台机器上,我得到以下结果:

但是在另一台机器上我得到了这个结果:

看起来字体大小不同?

为什么会这样?

感谢。

修改

我发现了导致这种情况的原因。 Windows有一个用于更改文本大小的设置:

由于某种原因,一台计算机上的默认值为100%,另一台则为125%。在webkit中有没有办法忽略它?

5 个答案:

答案 0 :(得分:15)

正如我在原帖中所写,问题的根本原因是wkhtmltopdf受到Windows中文本大小设置的影响。所以在我的情况下,两台不同的计算机有两种不同的Windows文本大小设置。希望这些信息对某人有用。

修改

已经有一段时间了,但如果有人感兴趣,这就是我最终解决问题的方法。我使用了这个论点:

--dpi 125

125不是一个神奇的数字,它刚刚结束,在我的情况下产生了最好的视觉效果。我没有太多时间来研究这个问题,但它解决了这个问题,现在每台Windows机器都会产生相同的结果。

注意--zoom参数没有解决windows机器之间的差异。

答案 1 :(得分:8)

我发现定义--page-height和--page-width以像素为单位而不是mm,cm或in help。 我修改了转换命令:

"C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe" --print-media-type --page-width 210 --page-height 160 --margin-top 0 --margin-right 0 --margin-bottom 0 --margin-left 0 --dpi 300 --zoom 1.043 --header-spacing 0 --footer-spacing 0 --javascript-delay 1000 html_file pdf_file

为:

"C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe" --print-media-type --page-width 1588px --page-height 1210px --margin-top 0 --margin-right 0 --margin-bottom 0 --margin-left 0 --dpi 150 --zoom 3 --header-spacing 0 --footer-spacing 0 --javascript-delay 1000 html_file pdf_file

该解决方案在wkhtmltopdf 0.11.0_rc1和0.12.1.1上进行了测试,两者都在Windows 7 x64上进行了测试。

现在,在具有较小文本大小和中等文本大小的计算机上,html的pdf版本看起来相同。

答案 2 :(得分:3)

设置--zoom为1.33以补偿Windows上的96dpi,因为linux为75dpi

答案 3 :(得分:3)

万一它可以帮助任何人,让我在经过多次审查后分享对我有用的设置。

我正在运行 Windows 并使用--disable-smart-shrinking来完全控制边距大小(以适应信封窗口后面的地址)。

Calibri似乎通常比Arial更好(除了更漂亮之外:-)),所以我设置了font-family: Calibri, Helvetica, Arial, sans-serif;

我使用--dpi 96得到了不错的结果。

在浏览器和PDF之间,行中的文本数量几乎 1:1。 (PDF可以容纳更多的文本,这比其他方式的危害更小。)

通过使用我们随后在DPI中进行补偿的缩放,我们可以更加准确。要使用缩放1.33而不实际获得更大的结果,我们需要将1.33倍的点塞入一英寸,因此96 * 1.33 = 128 DPI。通过实验证明,无论出于何种原因,130的结果都会稍微准确一些,所以:

--zoom 1.33 --dpi 130

答案 4 :(得分:0)

- disable-smart-shrinking似乎对我有用。这样我仍然可以使用mm,否则会出现问题,因为我必须使用不同的打印机。

如果你使用NReco,你可以使用pdfconverter.CustomWkHtmlArgs =&#34; --disable-smart-shrinking&#34 ;;