Почему wkhtmltopdf.exe производит разные результаты на разных машинах Windows?

У меня есть простой файл 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?

Ответ 1

Как я написал в исходном сообщении, основной причиной проблемы является то, что wkhtmltopdf зависит от настройки размера текста в окнах. Поэтому в моем случае два разных компьютера имеют два разных размера шрифта Windows. Надеюсь, эта информация может быть полезной для кого-то.

ИЗМЕНИТЬ

Это было какое-то время, но если кому-то интересно, так я решил решить проблему. Я использовал аргумент:

--dpi 125

125 - это не волшебное число, которое он только что закончил, создавая лучший визуальный результат в моем случае. У меня не было много времени, чтобы изучить это, но он решил проблему, и теперь каждая машина Windows производит тот же результат.

В качестве примечания аргумент --zoom не разрешил расхождение между машинами Windows.

Ответ 2

Я обнаружил, что определение -page-height и -page-width в пикселях вместо mm, cm или in помогает. Я изменил команду преобразования:

"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, как на окнах 7 x64.

Теперь версия HTML html выглядит одинаково на машинах с небольшим размером текста и средним размером текста.

Ответ 3

установить --zoom в 1.33, чтобы компенсировать 96dpi для окон, поскольку linux имеет 75dpi

Ответ 4

В случае, если это помогает кому-либо, позвольте мне поделиться настройками, которые сработали для меня, после многократного истечения срока действия.

Я использую Windows и используя --disable-smart-shrinking, чтобы иметь полный контроль над размерами полей (чтобы поместить адрес за окном конверта).

Calibri, кажется, вообще намного лучше, чем Arial (помимо того, что он намного красивее:-)), поэтому я установил font-family: Calibri, Helvetica, Arial, sans-serif;

Я получаю приличные результаты, используя --dpi 96.

Количество текста, которое вписывается в строку, составляет почти 1:1 между браузером и PDF. (PDF может поместиться немного больше текста, что менее вредно, чем наоборот).

Мы можем получить еще более точную информацию с помощью масштабирования, которое мы затем компенсируем в DPI. Чтобы использовать масштаб 1.33 без фактического получения большего результата, нам нужно в 1,33 раза увеличить число точек на дюйм, поэтому 96 * 1,33 = 128 точек на дюйм. Эксперимент доказывает, что результат немного более точен с 130 по любой причине, поэтому:

--zoom 1.33 --dpi 130

Ответ 5

- отключить умное сокращение, похоже, работает на меня. Таким образом, я все еще могу использовать mm, который в противном случае был бы проблемой, поскольку я должен использовать разные принтеры.

Если вы используете NReco, вы можете просто использовать pdfconverter.CustomWkHtmlArgs = "--disable-smart-shrinking";