Как стать автором
Обновить

Комментарии 17

Это довольно редко затрагиваемая тема, спасибо

Большое спасибо. Была потребность организовать не кривое отображение HTML на A4. Для распечатки методических материалов... Спасибо...

Отличная и ,главное, полезная работа, спасибо

Примерно так же закостылил пару проектов несколько лет назад, правда с мои знания CSS слишком унылы, поэтому выкручивался флексбоксами и единицами измерения *vh для нормального деления страниц.

Всё потому что было не ясно, где лучше генерировать pdf - на бэке или фронте. Что там, что там интерфейс был крайне ужасным, рисовать нужно было немного специфичные таблицы (которые на обычном html+css верстаются сильно проще по опыту).

А так как в целом заказчика устраивало, что при нажатии кнопочки "pdf" ему выплелывал браузер нативное окно печати, откуда можно было сохранить в pdf, то это стало спасением.

Правда в моем случае еще пришлось немного побивать колеса этому велосипеду, делая загрузку html через iframe, а потом еще немного костылить css под firefox и chrome, т.е. у них немного отличалось поведение.

Положил в закладочки статью - это прям очень полезно.

А так как в целом заказчика устраивало, что при нажатии кнопочки "pdf" ему выплелывал браузер нативное окно печати, откуда можно было сохранить в pdf, то это стало спасением.

Не повторяйте моих ошибок - делайте на бэке.

Говорит, значит, заказчик - страничка с таблицами и графиками - супер, всем нравится - а можно нам с неё сразу pdf получать? Говорю, ок. Поковырялся в жабьем скрипте, немного поправил ещё стили и, тоже, через стандартную печать в браузере выдал им pdf по нажатию кнопки. Все счастливы.

Через день приходит и говорит - а можно чтобы по кнопке оно не на экран, а письмом отправлялось группе клиентов - я ж вижу что всё готово, вот только письмо и все?

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

Через день приходит и говорит - всё супер, всем нравится. А теперь можно чтобы это письмо не по кнопке отправлялось, а само каждый день в 2 часа ночи - у тебя ж всё почти готово?

Думаю, после моих пожеланий его мама лет на 100 дольше проживёт... Пришлось переделывать всё в рендеринг на бэке через html2pdf, ещё больше костылей и граблей, графики на matplotlib кое-как..

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

Бэк работает на golang и там большие проблемы с поиском библиотеки для pdf как бы...

В крайнем случае стал бы измываться с движком хрома в докере на который посылается html, вызывается печать - не знаю, это вопрос уже фантазии конечно :)

Я писал себе консольную утилитку на golang для расчета налогов ИП и печати КУДиР (книги учета доходов и расходов) - использовал библиотеку gopdf. Библиотека довольно низкоуровневая - пришлось добавить более высокоуровневый АПИ под мои кейсы.

Сейчас утилиту перенес в веб - вся логика расчетов и генерации PDF не поменялась и по-прежнему реализована на golang, но компилится в wasm. Бэка нет вообще.

Да, висит звездочка на этой репе... Смотрю и допиливают активно постоянно.
Так или иначе года 2 назад мне стало дурно от того, что надо будет ВОТ ТАК описывать рендеринг pdf, вместо того чтобы что-то там на HTML накрутить, CSS присолить, а дальше браузер сам разберется как это всё впихнуть на A4 :)))

Надо пощупать в общем. И про WASM действительно интересный кейс, всегда о нём забываю и удивляюсь такому простому и клевому применению.

Для моего кейса мне наоборот показалось, что страницу как в примере ниже, проще сгенерировать в pdf, чем пытаться в html/css и чтобы еще работало в разных браузерах одинаково.

Пример страницы

Да, забыл указать авторство. Спасибо, исправил.

Это нужно передать тем кто делает сайт Госуслуги ру.

Вообще в CSS есть целая отдельная спека для печати. Там помимо @page есть ещё всякие интересные элементы для создания верхних и нижних повторяющихся колонтитулов, сносок, нумерации страниц, титульной страницы. Можно даже автоматическое оглавление делать. Подробнее об этом можно посмотреть в записи доклада с wsd, все ещё актуально.

Подскажите, насколько возможно из браузера печатать чертежи? т.е. есть нарисовать например квадрат на canvas и чтобы на бумаге он точно соответствовал размеру до миллиметров?

Я с уважением отношусь к автору перевода... но, скажите, кому-то ещё было неизвестно о существовании media="print"?

Я узнал про его существование, когда работал с шаблонами интернет-магазинов. Там часто делают кнопку "Печать" для страницы с историей заказов, корзины и страницы успешного/неуспешного оформления заказа. Так вот там используют медиа-запросы @media (print) и <link> с media="print" чтобы подключить отдельные стили для печати и удалить всё лишнее (хедер, футер, баннеры, боковые колонки), перекрасить всё в чёрно-белый, адаптировать что-то.

Также media="print" можно встретить при реализации техники ленивой загрузки CSS, что как бы не совсем по назначению, но оно работает.

<link rel="stylesheet" href="non-critical.css" media="print" onload="this.onload=null;this.removeAttribute('media');">

Подскажите, а данный способ подходит для печати любых размеров документов? Ну например если нужно распечатать этикетку 58x40?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации