Что делает инструмент
Kонвертация Word .docx в PDF — частая задача: договоры, отчёты, заявления нужно отправить в PDF (стандарт для электронной подписи и архивирования). Этот инструмент делает её через два шага: mammoth парсит DOCX в HTML, нативный диалог печати браузера сохраняет в PDF.
Никаких загрузок на сервер. Никаких 1.5 МБ библиотек jsPDF + html2canvas. Только браузерные стандарты. Файл не покидает ваше устройство.
Почему через печать
Альтернативные подходы и их минусы:
- jsPDF + html2canvas. ~1.5 МБ JS-библиотек. Текст рендерится как canvas pixels — теряется selectable. PDF получается «как картинка». Размер файла раздут.
- pdf-lib + ручной рендеринг HTML. pdf-lib не парсит HTML; нужно вручную обходить узлы и рисовать через PDFPage.drawText. Сложно поддерживать форматирование и таблицы. Часто ломается.
- Сервер с LibreOffice headless. Идеальное качество, но требует серверной инфраструктуры — файлы загружаются, ждёте обработки, размер ограничен. Также проблема с 152-ФЗ для российских юрлиц.
- Native browser print. Бесплатно. Без зависимостей. Selectable text. Стандартный диалог Save as PDF в Chrome/Edge/Firefox/Safari. Качество — приличное document-style. Это и есть наш выбор.
The window.print() method opens the Print Dialog Box for the current document. Modern browsers include "Save as PDF" as a built-in printer option.— MDN Web Docs
Что не сохраняется
- Точное pixel-форматирование Word. Шрифты, размеры, отступы передаются приблизительно. Цель — читаемый, профессиональный документ, не точный клон Word.
- Колонтитулы (header/footer). Mammoth их пропускает.
- Сноски, поля, отслеживаемые изменения. Извлекаются как обычный текст или пропускаются.
- Сложные таблицы с merged cells. Объединённые ячейки уплощаются — может выглядеть некорректно.
- OLE-объекты (Equation Editor, Chart, Embed). Пропускаются. В warnings будет упоминание.
- Стилизация под брендбук. Если в Word у вас кастомные стили с конкретными цветами / шрифтами / отступами — они будут заменены на дефолтные CSS-стили нашего print-template.
- mammoth.js — DOCX to HTML converter. Mike Williamson. github.com/mwilliamson/mammoth.js. 2024.
- window.print() — MDN Web Docs. Mozilla. developer.mozilla.org/en-US/docs/Web/API/Window/print. 2024.
- CSS Paged Media Module Level 3. W3C. w3.org/TR/css-page-3. 2023.
