Pull to refresh

Comments 28

UFO just landed and posted this here
Wkhtmltopdf использует тот же движок хрома, только при этом его версия обновляется не так часто как хотелось бы. На момент изучения вопроса wkhtmltopdf не поддерживал все CSS свойства flexbox'ов и совсем не умел работать с grid'ами.

А с JS он работает? Предлагаемых способом можно хоть SPA страницы печатать.

Да, Javascript, который должен запуститься во время загрузки страницы отработает. А в SPA перед печатью в PDF Selenium может ещё различные формы заполнить и на нужные кнопочки нажать.
Использованный в этой библиотеке движок имеет кучу багов с отображением страниц, которые не чинятся годами. Всё особенно плохо при печати многостраничных таблиц. Зато, в отличие от хрома, работает в ограниченных окружениях, например внутри Azure App Service.
chrome --headless --disable-gpu --print-to-pdf google.com

по моему ничего не происходит…
по крайней мере обнаружить output.pdf не удалось… (

А где ищите?


~/$cd tett/

~/tett$google-chrome --headless --disable-gpu --print-to-pdf google.com

[0814/092158.306472:INFO:headless_shell.cc(572)] Written to file output.pdf.
[0814/092158.313610:ERROR:browser_process_sub_thread.cc(203)] Waited 3 ms for network service

:~/tett$ ls

output.pdf

После --print-to-pdf надо добавить =имя файла и все.
--print-to-pdf=out.pdf

Да! Добавление имени файла помогает!
Благодарю!
(Windows, такой виндовс)
))
Файл output.pdf должен появиться в той директории, в которой был запущен chrome.
Покажите вывод командной строки, код возврата вызова Chrome (в линуксе сразу после вызова chrome запустите эту команду `echo $?`) и содержимое директории в которой запускался Chrome.
chrome --headless --disable-gpu --print-to-pdf google.com
echo $?
ls -l

Главный недостаток при рендеринге браузерами пдф: они не поддерживают CSS свойства для хедеров, футеров и т. п. При работе с хромом по chrome devtools protocol (наиболее известная имплементация -puppeteer) есть ограниченная возможность управлять ими, в частности нумерация страниц, какие-то статические (или из title документа) повторяющиеся (для хедера первой страницы можно хак сделать, чтобы убрать или сделать специфичный) хедеры/футеры в том числе с логотипами (получилось только c base64 url). Чем-то напоминает вёрстку писем попытка их сверстать.


Кстати, page { size: A4;} нормально в хроме работает только как глобальный стиль, селекторы типа left/right сводят его с ума :)

Неожиданное применение… другая сфера ИТ, но точно где нибудь рассмотрю как вариант, спасибо!
Соглашусь, использовать Puppeteer для этих целей удобнее — и тем интереснее разобрать пример с селениумом. :) В моем случае проект уже был написан на питоне, и тянуть ради одной функции второй язык программирования было бы с моей точки зрения накладно. В примере из статьи используется как раз тот вызов, ссылку на который Вы дали. И да, настройки печати можно задать в нем без CSS, только тогда их будет контролировать не веб-дизайнер, а бекенд-программист, что с моей точки зрения нарушает принципы разделения ответственности.

Настройки CSS и этого вызова не конфликтуют друг с другом, а дополняют.

Есть ли возможность вызвать преобразование из UI и отправить результат через XHR?
www.npmjs.com/package/xml2js по определённым причинам не подходит.
Так и не смог безголового хрома сохранять с цветом — только монохром. Ну и вообще, с бэкграундами проблемы.
Сообщите подробности: какие версии OC и Chrome, как запускали, какие были дополнительные настройки?
пардон, проблема была не с хромом.
Прелестно!

Напечатал себе Вашу статью в PDF описанным методом. В качестве теста, ну и чтобы копия была. Спасибо!
Мне кажется (хоть мой английский и не настолько хорош, чтобы утверждать это наверняка), что лицензия Chrome не разрешает использование его как части собственного программного продукта (п. 9.2. EULA www.google.com/intl/en_sg/chrome/privacy/eula_text.html, а также в п.3 дополнительной части, касающейся прав Adobe в этом же документе).

Использование бесплатного пользовательского продукта могут привести и к неудобствам, например, в виде внезапных изменений после обновления браузера, из-за которых немного изменится рендеринг или что-то ещё. Браузер для тестирования в проекте вы обновляете до последней версии и это нормально, а вот инструмент для генерации pdf нет нужды трогать без необходимости, пока pdf нормально генерируется.

В общем, есть пара принципиальных проблем.
Спасибо за уточнение по поводу лицензии. Взамен Chrome можно взять Chromium, его разные компоненты распространяются под лицензиями BSD, MIT, *LGPL, MS-PL, MPL+GPL+LGPL, tri-licensed. Изучение этого вопроса потянет на отдельную статью :)
create a derivative work

Про это? Тут вопрос, является ли подобная либа/сервис производным или составным продуктом или не является. Имхо, скорее нет, чем да.

Использование Chromium с открытыми исходниками не решает проблемы — в нем уже находили жучки от Google.

Можно пруфы?
Несколько раз натыкался на эту информацию в разных статьях. Сейчас погуглил, нашел только одну статью на хабре habr.com/ru/post/101396 — может надо было пользоваться другим поисковиком? :) Если что еще найду, добавлю ссылки.
Sign up to leave a comment.

Articles