Комментарии 15
https://gotenberg.dev/ - A containerized API for seamless PDF conversion
А нет ли там фатального недостатка?
Именно его и использую под капотом в онлайн-сервисе. В расширении используется Devtools Protocol.
А что не так со встроенными средствами браузера конвертации страниц в PDF?
Ради теста решил запустить скачку вашей же статьи с вашего сайта и стандартными средствами браузера.
Итог: С вашего сайта в PDF не конвертируется часть картинок.
Стандартные возможности браузера в том же виде как у вас сохраняют вёрстку, но при этом загружают все картинки.
А что не так со встроенными средствами браузера конвертации страниц в PDF?
Нельзя сохранить страницу без разрывов, внешний вид будет сильно отличаться от исходной страницы. До недавних пор текст нельзя было выделять, сейчас завезли OCR, но ссылки всё равно остаются не кликабельными.
С вашего сайта в PDF не конвертируется часть картинок.
Только что попробовал сделать то же самое - действительно, в некоторых случаях картинки не прогружаются. Это как раз то, о чём я писал. Я так и не нашёл нормального способа прогружать все картинки.
Если у кого есть идеи как прогрузить все lazy-loading картинки, буду рад если поделитесь в комментариях.
Может быть пройтись по всему DOM и принудительно эмулировать клик, или что то подобное для такого рода картинок?
Клик может триггернуть непредсказуемое поведение.
Сейчас я прохожусь в DOM по всем картинкам: прокручиваю страницу к каждой картинке, жду ~100мс и перехожу к следующей картинке.
Я не крут во фронтэнде, потому и вопрос может глупый, для lazy-loading используется какой то типизированный подход типа аттрибутов или за счет js кода?
Есть атрибут loading="lazy", но он используется не всегда. Иногда хитро реализуют с помощью JS. Поэтому, я игнорирую эти атрибуты и прохожусь по всем img, чтобы наверняка.
Понимаю! Ну, тогда я пас. Я как то в таком случае затрудняюсь даже предположить что можно делать. Разве что влазить внутрь таких элементов и искать есть ли у них подписаные события, которые должны срабатывать на появление элемента в поле видимости пользователя, и тогда на них делать либо дополнительную задержку, либо принудительно вызывать такие события.
До недавних пор текст нельзя было выделять, сейчас завезли OCR, но ссылки всё равно остаются не кликабельными.
О каком браузере речь?
Только что проверил Firefox и Chrome — оба рендерят сайт в PDF, т.е. сохраняется текстовая информация (нет никаких картинок, чтобы на них делать OCR — сохраняется обычный классический PDF с текстовым слоем, и т.п.).
И все ссылки кликаются, естественно, текст выделяется. Всегда так было, сколько пользовался этой функцией (лет 10).
внешний вид будет сильно отличаться от исходной страницы
Это фича веба, а не баг: CSS @media print. Сами создатели сайтов управляют тем, как он выглядит при печати.
Нельзя сохранить страницу без разрывов
Достаточно сделать условно-бесконечный размер страницы, как делают для кассовых чеков и этикеток. Но да, стандартными средствами нельзя.
оба рендерят сайт в PDF, т.е. сохраняется текстовая информация
Вы правы, я напутал. В картинку сохраняли другие расширениях. Встроенное средство печати действительно сохраняет текст и ссылки.
Это фича веба, а не баг: CSS @media print. Сами создатели сайтов управляют тем, как он выглядит при печати.
Это фича только если "создатели сайтов управляют тем, как он выглядит при печати". Многие этого не делают.
этот длинный pdf еще надо в чем то прочесть. под windows есть удачный просмотрщик - без проблем. Под linux, android просмотр длинного pdf вызывает как минимум тормоза, а то и вообще не отражается.
экспорт аддоном SingleFile в html дает куда как более смотрибельный результат
этот длинный pdf еще надо в чем то прочесть.
Для просмотра PDF не нашёл ничего быстрее, чем встроенный просмотрщик Chrome, даже на очень длинных и тяжелых PDF (>200 мб) он работает вполне сносно.
экспорт аддоном SingleFile в html дает куда как более смотрибельный результат
SingleFile - это оно? Интересное расширение, я посмотрю как у него внутри сделана прогрузка картинок, может подчерпну что для себя. Спасибо!
Кстати, для подобных целей есть CTRL+S и там можно выбрать не html, а mhtml и то же самое будет - одностраничная копия html страницы. Попробуйте, когда не нужен PDF, это довольно удобно.
можно выбрать не html, а mhtml
уж я наигрался в сохранение .mht в opera а потом внезапно их стало нечем открыть кроме внезапно мелгомякого браузера. сохранки SingleFile пока что открываю скажем на телефоне без вопросов, картинки в себя он интегрирует как data:image/png;base64
Но тут тоже прикол: на opera этот аддон похоже прикрыли не помню как и зачем в opera добавлял, наверное из chrome магазина. есть ссылка https://www.getsinglefile.com/ из cli конечно интересно но в браузере можно добавить ublock с большим набором косметических фильтров

Как написать конвертер веб-страниц в PDF и не сойти с ума