CSS
Python
Google Chrome
HTML
PDF
Comments 28
UFO landed and left these words here
0
Wkhtmltopdf использует тот же движок хрома, только при этом его версия обновляется не так часто как хотелось бы. На момент изучения вопроса wkhtmltopdf не поддерживал все CSS свойства flexbox'ов и совсем не умел работать с grid'ами.
0

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

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

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

А где ищите?


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

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


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

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

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

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

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

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

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

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

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

Можно пруфы?
0
Несколько раз натыкался на эту информацию в разных статьях. Сейчас погуглил, нашел только одну статью на хабре habr.com/ru/post/101396 — может надо было пользоваться другим поисковиком? :) Если что еще найду, добавлю ссылки.
Only those users with full accounts are able to leave comments., please.