Инструменты
Как перевести Word в PDF без потери форматирования
Экспорт прямо из Word, онлайн-конвертеры, Google Документы, LibreOffice, на телефоне и пакетно — все рабочие способы.
Веб-страницу, счёт из личного кабинета или сгенерированный CMS отчёт иногда нужно не просто посмотреть, а сохранить так, чтобы вид не «разъехался» на другом устройстве и его можно было распечатать или отправить как документ. Задача похожа на перевод Word в PDF, но устроена иначе: HTML — это не фиксированная страница, а вёрстка, которая зависит от CSS, экрана и браузера, поэтому «превратить в PDF» здесь значит ещё и сохранить разметку без потерь. Разберём пять рабочих способов — от одного клика в браузере до программной генерации PDF-документов прямо из кода.
Коротко: для разовой задачи — сохранить страницу через браузер (Ctrl+P → «Сохранить как PDF») или онлайн-конвертер. Для регулярной и программной конвертации — командная строка (Chrome headless, LibreOffice) или код: Python-библиотека pdfkit либо Puppeteer/Playwright. Учтите: классическая связка wkhtmltopdf + pdfkit официально помечена устаревшей — для новых проектов надёжнее Chrome DevTools Protocol.

Чаще всего HTML переводят в PDF в трёх ситуациях: нужно сохранить веб-страницу для архива или офлайн-чтения, экспортировать счёт, акт или сертификат, который формирует веб-приложение в виде HTML-шаблона, либо автоматически выгружать отчёты из CMS или админ-панели в виде готовых документов. Во всех трёх случаях важен один и тот же результат — вёрстка должна перенестись в PDF без искажений, а не превратиться в обрезанный текст без картинок.
Именно с этим чаще всего и возникают проблемы. HTML-страница — это не статичный лист, а разметка, которая «подстраивается» под размер окна браузера и подгружает стили и шрифты отдельными файлами. Если при конвертации что-то из этого не подхватилось — например, изображения указаны относительными путями, которые не разрешаются в контексте конвертера, — результат визуально ломается: пропадают картинки, съезжают колонки таблиц, появляются лишние пустые страницы. Ниже — пять способов конвертации и отдельный блок про типичные проблемы вёрстки и как их избежать.
Самый быстрый способ для разовой задачи — ничего не устанавливать, а воспользоваться встроенной функцией печати браузера. Так Adobe в собственной инструкции описывает базовый сценарий сохранения веб-страницы: открыть её в браузере и воспользоваться печатью в PDF — три шага без дополнительного ПО.
По умолчанию браузер иногда обрезает широкие таблицы и боковые панели сайта. Перед сохранением откройте дополнительные параметры диалога печати и проверьте три вещи:
Браузер по умолчанию добавляет в PDF служебные колонтитулы с адресом страницы и датой печати. В Chrome их можно отключить в том же диалоге печати галочкой «Верхние и нижние колонтитулы» — удобно, когда документ должен выглядеть «чисто», без технических пометок браузера.
Если под рукой нет нужного браузера или страница уже сохранена как отдельный HTML-файл, его можно загрузить на специализированный онлайн-сервис. Логика у большинства одинаковая: загрузить файл или вставить ссылку → дождаться обработки → скачать PDF. Для примера на сервисе PDF Candy этот процесс сопровождается собственным FAQ о сохранении макета и поддержке разных языков, включая RTL (письмо справа налево).
| Сервис | Загрузка по URL | Загрузка файла .html | Регистрация |
|---|---|---|---|
| PDF Candy | Да | Да | Не нужна |
| Smallpdf | Нет | Да | Не нужна для разовой задачи |
| html2pdf.com | Да | Ограниченно | Не нужна |
| Adobe Acrobat online | Нет | Да | Для сохранения результата |
Если HTML-файл или страница содержит персональные данные — выписку, внутренний отчёт, данные клиента — не отправляйте их на чужой онлайн-сервис: файл какое-то время обрабатывается и хранится на стороннем сервере. Для таких документов используйте офлайн-способы ниже: командную строку или печать из браузера. Готовый PDF с чувствительными данными имеет смысл дополнительно закрыть паролем — как это сделать, разобрано в статье пароль на PDF, Word и Excel.
Если задачу нужно воспроизводить одинаково на сервере или в скрипте, браузерный интерфейс не подходит — а вот сам движок Chrome можно вызвать из командной строки без окна. Согласно официальной документации Chrome for Developers, headless-режим поддерживает флаг --print-to-pdf, который сохраняет страницу в PDF одной командой.
| Команда | Что делает |
|---|---|
chrome --headless --print-to-pdf https://example.com | Базовый вызов: открывает URL и сохраняет текущую страницу в output.pdf |
--no-pdf-header-footer | Убирает служебные колонтитулы с датой и URL |
--timeout=мс | Ограничивает время ожидания загрузки страницы перед печатью |
Документация Chrome for Developers прямо отмечает: сам CLI-интерфейс расширять дальше не планируют — он остаётся простым инструментом «для быстрой задачи». Если нужна тонкая настройка (конкретные поля, формат бумаги, печать только части страницы), официальная рекомендация — использовать Chrome DevTools Protocol, то есть метод Page.printToPDF через Puppeteer или Playwright (см. способ 5 ниже).
Для серверной автоматизации на Linux, где браузер Chrome может быть избыточен, часто используют уже установленный LibreOffice — он умеет конвертировать документы без графического интерфейса одной командой.
| Команда | Что делает |
|---|---|
soffice --headless --convert-to pdf --outdir /путь/к/папке input.html | Конвертирует один HTML-файл в PDF и кладёт результат в указанную папку |
libreoffice --headless --convert-to pdf *.html | Пакетная конвертация: обрабатывает сразу все HTML-файлы в текущей папке |
Способ хорош тем, что LibreOffice обычно уже стоит на серверах с Linux или ставится одним пакетом — отдельный браузерный движок разворачивать не нужно. Из минусов: LibreOffice рендерит HTML/CSS иначе, чем настоящий браузер, поэтому сложная современная вёрстка (гибкие сетки, часть CSS-эффектов) может отличаться от того, что видно в Chrome.
Когда PDF нужно генерировать программно — например, выгружать счёт сразу после оформления заказа в веб-приложении, — конвертацию делают прямо из кода, без ручного запуска команд.
Python-библиотека pdfkit — обёртка над инструментом wkhtmltopdf с тремя основными методами: pdfkit.from_url() (конвертировать по ссылке), pdfkit.from_file() (конвертировать локальный HTML-файл) и pdfkit.from_string() (конвертировать HTML-строку, например, собранный шаблон письма или счёта). По данным README проекта на GitHub, версия wkhtmltopdf, которая ставится из стандартных репозиториев Debian и Ubuntu, имеет урезанный функционал без поддержки патчей Qt WebKit — для корректной работы со сложной вёрсткой нужен статический бинарник с официального сайта проекта.
Похожая задача на уровне готового веб-приложения — не разовый скрипт, а встроенная в продукт генерация документов (счетов, актов, сертификатов) прямо из кода на бэкенде. Такие интеграции генерации документов в веб-приложениях на заказ делает команда YuSMP Group — от шаблонов HTML до автоматической выгрузки готового PDF клиенту.
Репозиторий JazzCore/python-pdfkit на GitHub сам помечен как устаревший вслед за статусом движка wkhtmltopdf, на который он опирается. Для новых проектов надёжнее использовать Puppeteer (Node.js) или Playwright: метод page.pdf() в обеих библиотеках работает через Chrome DevTools Protocol — тот же движок, что печатает страницы в способе 3, но с программным доступом из кода и без устаревших зависимостей.
Если проект уже на Python и переписывать его на Node.js ради генерации PDF нецелесообразно, у Playwright есть и Python-обвязка, которая даёт доступ к тому же page.pdf() без необходимости в wkhtmltopdf. Для существующих скриптов на pdfkit это означает одно: новые интеграции лучше закладывать сразу на связке Puppeteer/Playwright, а не на устаревшем пакете.
| Способ | Нужен интернет | Годится для автоматизации | Конфиденциальность | Цена |
|---|---|---|---|---|
| Браузер (Ctrl+P) | Нет | Нет | Файл не уходит на сервер | Бесплатно |
| Онлайн-конвертер | Да | Частично | Файл уходит на сторонний сервер | Обычно бесплатно |
| Chrome headless (CLI) | Нет | Да | Локально | Бесплатно |
| LibreOffice headless | Нет | Да | Локально | Бесплатно |
| Python / Puppeteer | Нет | Да, встраивается в продукт | Локально | Бесплатно (кроме времени разработки) |
Правило простое: разовая задача на своём компьютере — браузер; нет под рукой нужного ПО и страница не секретная — онлайн-сервис; нужна повторяемая серверная конвертация — Chrome headless или LibreOffice; PDF должен генерироваться автоматически внутри веб-приложения — код на Puppeteer/Playwright (или, для уже существующих Python-скриптов, pdfkit с пониманием его статуса).
| Проблема | Причина | Решение |
|---|---|---|
| Обрезаются широкие таблицы и блоки | Контент шире листа A4, масштаб печати не подогнан | Включить «Подогнать по размеру страницы», уменьшить масштаб или сузить поля |
| Не загрузились шрифты | Нестандартные шрифты из CSS недоступны в среде конвертации (особенно в LibreOffice и wkhtmltopdf) | Использовать веб-безопасные шрифты или встраивать шрифты через @font-face с абсолютными путями |
| Пропали изображения | В HTML указаны относительные пути к картинкам, которые не разрешаются вне исходной страницы | Перед конвертацией заменить относительные пути на абсолютные URL или base64-инлайн |
| Лишние колонтитулы с датой и URL | Браузер или wkhtmltopdf по умолчанию печатают служебную шапку/подвал | В браузере отключить «Верхние и нижние колонтитулы», в Chrome CLI — флаг --no-pdf-header-footer |
| Пустые дополнительные страницы в конце | Высота контента чуть превышает размер листа из-за отступов | Уменьшить нижние отступы последнего блока или задать явный размер страницы в CSS (@page) |
PDF с картинками в высоком разрешении или встроенными шрифтами легко весит десятки мегабайт и не проходит по лимиту почты. Если итоговый документ слишком тяжёлый для пересылки, сначала посмотрите, можно ли его сжать — разбор способов есть в статье как уменьшить размер PDF-файла. Когда сжатие не помогает или файлов несколько, проще передать их через облачную ссылку, а не вложением: все рабочие варианты собраны в гайде как передать большой файл через интернет.
Да. Печать через браузер, Chrome headless из командной строки, LibreOffice headless и генерация из кода (pdfkit, Puppeteer, Playwright) работают полностью офлайн — интернет нужен только онлайн-конвертерам и при конвертации страницы по внешней ссылке.
Как правило да — и браузерная печать, и Chrome headless, и Puppeteer/Playwright сохраняют гиперссылки активными внутри PDF. У LibreOffice и устаревшего wkhtmltopdf сохранение ссылок может работать менее стабильно на сложной вёрстке — проверяйте результат перед отправкой.
Чаще всего из-за относительных путей к картинкам (например, images/photo.jpg), которые корректно разрешаются только в контексте исходной страницы в браузере. При конвертации файла отдельно от сайта такие пути ведут в никуда. Решение — использовать абсолютные URL или встраивать изображения в HTML через base64.
Нет, если в файле есть персональные или коммерческие данные — документ какое-то время обрабатывается и хранится на стороннем сервере. Для таких файлов используйте офлайн-способы: печать из браузера, Chrome headless или LibreOffice на своём компьютере.
«Печать в PDF» в браузере использует движок самого браузера и доступна в одно действие, но даёт меньше контроля над параметрами. Специализированные инструменты (Chrome headless с флагами, Puppeteer/Playwright) дают точную настройку полей, формата листа и колонтитулов — это важно при автоматической генерации документов.
Да — команды Chrome headless или LibreOffice headless легко запускать по расписанию через планировщик задач (cron на Linux, Планировщик заданий на Windows), а программная генерация через pdfkit или Puppeteer/Playwright естественно встраивается в код бэкенда или в скрипт, который выполняется по таймеру.
Чаще всего вес PDF раздувают неоптимизированные изображения внутри документа и встроенные шрифты. Подробный разбор инструментов сжатия без потери читаемости — в статье как уменьшить размер PDF-файла.