Обзор pdfmake: генерация PDF в браузере и Node.js
pdfmake — не просмотрщик и не настольный редактор, а JavaScript-библиотека, которая собирает PDF по декларативному описанию документа. Такой подход особенно удобен там, где счета, отчёты, накладные, сертификаты или печатные формы должны создаваться автоматически из данных приложения. Актуальная ветка 0.3 существенно отличается от старых примеров для 0.1/0.2: изменены интерфейсы, поддерживаемые версии Node.js, работа с виртуальной файловой системой шрифтов и асинхронные методы. Поэтому оценивать pdfmake разумно именно как компонент разработки, а не как замену обычному PDF-ридеру.
| Параметр | Актуальное состояние |
|---|---|
| Тип продукта | Открытая JavaScript-библиотека для генерации PDF |
| Актуальная версия | 0.3.11, выпуск 12 июня 2026 года |
| Автор и проект | Bartek Pampuch; открытый проект bpampuch/pdfmake с участием сообщества |
| Среды выполнения | Браузер и Node.js |
| Основной выходной формат | |
| Лицензия | MIT, без платной редакции и пробного периода |
| Учётная запись | Для использования библиотеки не требуется |
| Облачная обработка | Не обязательна; документ создаётся в среде приложения |
Скачать pdfmake
Новейшая версия для Виндовс, macOS и Линукс. Удобный редактор PDF под российские реалии.
У pdfmake нет установщика для Windows или macOS и нет отдельного приложения, которое нужно скачивать как обычную программу. Для проекта на JavaScript безопасный стандартный путь — официальный пакет pdfmake из npm. В документации для ветки 0.3 установка на серверной стороне приводится через команду npm install pdfmake; для клиентских приложений пакет также можно подключать через npm и импортировать браузерную сборку.
Документация дополнительно перечисляет готовые браузерные сборки через крупные CDN, включая unpkg и jsDelivr. Этот вариант подходит для статической страницы или небольшого прототипа, но в рабочем проекте лучше фиксировать конкретную версию, а не ссылаться на «последнюю» автоматически: это делает сборку воспроизводимой и снижает риск неожиданного изменения поведения после обновления зависимости.
На 12 сентября 2026 года последняя опубликованная версия — 0.3.11. Она вышла 12 июня 2026 года и обновила внутреннюю зависимость PDFKit до 0.19.1, исправляя регрессию с RGB JPEG. Ветку 0.3 следует отличать от 0.2.x: миграционная документация прямо указывает на несовместимые изменения, поэтому старые фрагменты кода из блогов и архивных примеров нельзя считать гарантированно рабочими без адаптации.
Что такое pdfmake
pdfmake позиционируется авторами как библиотека генерации PDF на стороне клиента и сервера, написанная на JavaScript. В package.json текущей версии автором указан Bartek Pampuch, а README также называет его основателем проекта и упоминает liborm85 среди основных авторов. Проект распространяется как открытое ПО и развивается в публичном репозитории.
Главная идея pdfmake — декларативный document-definition object. Разработчик описывает содержание документа JavaScript-объектом: текст, таблицы, колонки, изображения, стили, поля, ориентацию страниц, колонтитулы и другие параметры. Библиотека сама рассчитывает переносы строк и размещение блоков. В отличие от низкоуровневого PDF-API здесь обычно не требуется вручную вычислять координаты каждого фрагмента текста.
Это не средство открытия и редактирования уже существующих PDF. pdfmake не заменяет Acrobat, Sumatra PDF или редактор документов. Его задача — сформировать новый файл по данным приложения. Если пользователю нужно прочитать готовый PDF, удобнее использовать просмотрщик; если требуется отредактировать исходный PDF визуально, нужна другая категория программ.
Основные функции pdfmake
Декларативная компоновка и стили
Базовый документ строится из массива или дерева элементов. Текстовые узлы поддерживают перенос строк, выравнивание влево, вправо, по центру и по ширине, отдельное оформление фрагментов, списки и переиспользуемые словари стилей. Размеры и отступы задаются в пунктах PDF/PostScript. Такой подход хорошо подходит для документов, где структура известна заранее, а значения приходят из базы данных или API.
Таблицы, колонки и многостраничная верстка
Табличный движок поддерживает фиксированные, автоматические, «звёздочные» и процентные ширины, объединение строк и столбцов, границы, заливку, вертикальное выравнивание и собственные схемы оформления. Строки заголовка могут автоматически повторяться при переносе таблицы на следующую страницу. Это делает pdfmake практичным для счетов, прайс-листов, актов и выгрузок с большим количеством строк.
Колонки могут иметь фиксированную, автоматическую, процентную или распределяемую ширину. Начиная с 0.3.5 поддерживаются snaking columns — газетный поток, при котором содержимое переходит из одной колонки в следующую. Для сложных отчётов доступны секции документа с собственным размером страницы, ориентацией, полями, колонтитулами, фоном и водяным знаком.
Страницы, колонтитулы, содержание и закладки
Можно выбирать стандартные размеры бумаги от семейств A, B и C до Letter, Legal и Tabloid, задавать произвольную ширину и высоту, переключать портретную и альбомную ориентацию и менять её внутри документа через разрыв страницы. Верхний и нижний колонтитулы бывают статическими или вычисляемыми функцией, которая получает текущий номер страницы, общее число страниц и размер листа.
pdfmake умеет создавать оглавление, а в ветке 0.3.5 появились PDF Outlines — закладки в навигационной панели просмотрщика. Для них доступны собственный текст, иерархия и начальное раскрытие веток. Это полезно в отчётах на десятки страниц, где одного печатного оглавления недостаточно.
Изображения, SVG, векторные элементы и QR-коды
Для растровых изображений официально поддерживаются JPEG и PNG. Изображение можно передать как data URL, ресурс из словаря или, в поддерживаемых сценариях, загрузить по URL. Для SVG используется отдельный узел: он принимает строку SVG, а в браузере начиная с 0.3.1 также объект SVGElement. В 0.3.2 добавлена более строгая проверка размеров SVG и возможность масштабировать изображение только по заданной высоте.
В документ можно добавлять векторную графику и QR-коды. QR-узел поддерживает размер, цвета, версию, маску, режим кодирования и уровень коррекции ошибок. Для фонового оформления есть повторяющиеся слои, водяные знаки и плиточные паттерны. Эти возможности полезны для печатных билетов, ярлыков и документов с машинно считываемыми идентификаторами.
Шрифты и языки
В браузерной сборке по умолчанию используется Roboto из виртуальной файловой системы. Собственные шрифты можно включать в VFS либо подключать по URL; на сервере документация рекомендует использовать реальные файлы шрифтов. В document definition можно выбрать шрифт глобально или для отдельных стилей. Стандартные 14 PDF-шрифтов доступны на сервере, но документация отдельно предупреждает, что они ограничены ANSI-кодировкой и подходят только для английских символов.
Метаданные, вложения, PDF/A и защита
В метаданные можно записывать заголовок, автора, тему, ключевые слова и язык. Сжатие PDF включено по умолчанию. Ветка 0.3 также поддерживает встроенные файлы и файловые вложения-аннотации.
Документация 0.3 описывает PDF/A-1, PDF/A-2, PDF/A-3 и PDF/UA через параметр subset. Для PDF/A требуется PDF 1.4 или новее; доступны tagged PDF и отображение заголовка. Итоговый архивный файл всё равно следует проверять валидатором.
Для защиты доступны пароль пользователя, пароль владельца и права на печать, копирование, изменение, аннотации, заполнение форм, доступность и сборку документа. Документация подчёркивает принципиальное ограничение: сами права PDF не способны физически запретить действие после расшифровки, их соблюдение зависит от программы-просмотрщика. Для версии PDF 1.7 ExtensionLevel 3 используется 256-битное AES-шифрование; для более старых версий применяются более старые схемы.
Интерфейс и удобство использования
У pdfmake нет собственного окна с панелью инструментов, меню «Файл» или визуальным редактором страниц. Его рабочий интерфейс — JavaScript API, структура document definition, документация и примеры. Это сразу определяет аудиторию: библиотека удобна разработчику, но почти бесполезна человеку, который хочет мышью отредактировать PDF.
Порог входа ниже, чем у полностью координатного PDF-API, потому что разработчик описывает смысловые блоки, а не рисует каждый символ. Простую страницу с несколькими абзацами и таблицей можно собрать из относительно короткого объекта. Сложность возрастает при динамических колонтитулах, вложенных таблицах, пользовательских разрывах, нескольких секциях и нестандартных шрифтах: здесь уже важно понимать модель компоновки и тестировать крайние случаи.
Поддерживаемые форматы и совместимость
Основной экспорт pdfmake — PDF. Библиотека не является универсальным конвертером документов и не открывает DOCX, ODT или существующий PDF для редактирования. Также в ядре нет общего механизма «взять произвольную HTML-страницу и напечатать её как браузер». Если исходные данные уже представлены HTML/CSS и важна максимально близкая браузерная верстка, удобнее рассмотреть движок на базе Chromium.
Из медиаформатов для узла изображения официально заявлены JPEG и PNG. SVG обрабатывается отдельным узлом и преобразуется в PDF через SVG-to-PDFKit. Вложением можно сделать и другой файл, потому что вложение — это объект внутри PDF, а не визуально отрисовываемое изображение. Для шрифтов поддерживаются пользовательские файлы через VFS, URL или серверный путь; точный результат зависит от конкретного файла и набора символов.
На клиентской стороне документация 0.3 перечисляет Edge, Firefox, Chrome, Chrome на Android, Opera и Safari на iOS. Методы автоматического открытия и печати имеют более узкую совместимость: официально они указаны для Firefox, Chrome и Opera. Браузерные расширения, особенно блокировщики, могут вмешиваться в открытие новой вкладки или печать, поэтому критический сценарий лучше строить вокруг получения Blob/буфера и явной передачи его интерфейсу приложения.
На серверной стороне ветка 0.3 требует Node.js 20 или новее; в текущем списке документации указаны ветки 20 LTS, 22 LTS и 24 LTS. При этом жизненный цикл Node 20 уже завершён в апреле 2026 года, поэтому для нового развёртывания логичнее ориентироваться на поддерживаемую LTS-ветку 22 или 24, даже если pdfmake ещё технически перечисляет 20.
Производительность и стабильность
pdfmake выполняет компоновку программно и хранит достаточно данных, чтобы рассчитать страницы, шрифты, таблицы и изображения. Для небольших и средних бизнес-документов это обычно естественная модель, но объёмные изображения, сложные таблицы и большое число страниц увеличивают расход памяти и время построения. В официальном трекере есть открытое сообщение о высоком потреблении памяти при генерации документов с большим количеством изображений; это не доказывает одинаковое поведение во всех проектах, но показывает реальный класс риска.
Таблицы — наиболее чувствительная зона сложной верстки. Релизы 0.3.8 и 0.3.9 исправляли дефекты с переносом строк, rowSpan и лишними пустыми страницами. В открытых задачах 2025–2026 годов остаются сообщения о высоте строк, границах и переносах многостраничных таблиц. Поэтому шаблон с объединёнными ячейками, вложенными таблицами и принудительными разрывами нужно фиксировать автотестом хотя бы на нескольких характерных наборах данных.
Релизы 0.3.6–0.3.11 добавили политики доступа к ресурсам и исправления рендеринга, включая JPEG. Для серверного сервиса разумно использовать актуальный патч-релиз, а не раннюю 0.3.0.
Лицензирование и версии
pdfmake распространяется по лицензии MIT. Отдельной бесплатной и платной редакции нет, ограничений по числу документов или водяного знака библиотека не вводит. Пробный период, регистрация и подписка для использования самого пакета не требуются. Расходы появляются не из лицензии pdfmake, а из инфраструктуры проекта: серверов, разработки, тестирования, хранения шрифтов, мониторинга и при необходимости коммерческой поддержки сторонних подрядчиков.
Текущая стабильная линия — 0.3.x. Переход с 0.1/0.2 не считается бесшовным: на серверной стороне изменился способ вызова библиотеки, интерфейсы клиента и сервера унифицированы, методы стали возвращать Promise вместо callback, изменилось подключение VFS и сигнатура pageBreakBefore. Кроме того, 0.3 отказалась от Internet Explorer 11 и подняла минимальную серверную версию Node.js до 20.
Системные требования
Node.js
Для pdfmake 0.3 пакет указывает node >=20. Официальная документация перечисляет Node.js 20, 22 и 24 LTS. Поскольку Node 20 завершил жизненный цикл в апреле 2026 года, новая производственная система должна отдельно учитывать политику поддержки самого Node.js и не путать «минимально запускается» с «получает обновления безопасности платформы».
Браузер
Официальный список включает Edge, Firefox, Chrome, Chrome для Android, Opera и Safari на iOS. Для браузерного режима нужны JavaScript и возможности, на которые опирается современная ветка библиотеки; старый Internet Explorer 11 с версии 0.3 больше не поддерживается. Автоматическое открытие и печать поддерживаются не во всех перечисленных браузерах, поэтому эти методы нельзя считать универсальной частью интерфейса.
Карта критических зависимостей
| Зависимость | Когда нужна | Что произойдёт при отказе |
|---|---|---|
| Node.js | Серверная генерация | Без поддерживаемой среды пакет не запускается |
| Браузерный JavaScript | Клиентская генерация | PDF не будет собран в браузере |
| Шрифты | Текст с нужным набором символов | Возможны отсутствующие глифы или неверное оформление |
| URL-ресурсы | Если изображения или шрифты загружаются по сети | Сборка может завершиться ошибкой или потерять ресурс |
| PDFKit | Внутренняя генерация PDF | Регрессии зависимости могут влиять на итоговый файл |
| Просмотрщик PDF | Контроль результата, права доступа, печать | Некоторые интерактивные функции и права могут трактоваться по-разному |
Аккаунт и облачный API не обязательны. Но сеть становится зависимостью, если шрифты, изображения или вложения загружаются по URL. На сервере доступны setUrlAccessPolicy и с 0.3.8 setLocalAccessPolicy для ограничения источников.
Политика URL появилась в 0.3.6 в связи с CVE-2026-26801, а 0.3.8 усилила проверку перенаправлений. Для серверного генератора лучше применять allowlist доменов и каталогов, а не разрешать произвольные сетевые и локальные пути.
Паспорт обратимости операций
pdfmake не редактирует исходный PDF, поэтому его обычный рабочий процесс по природе обратим на уровне данных приложения: исходные JSON-данные, шаблон и шрифты остаются отдельно, а PDF является производным артефактом. Если в счёте обнаружена ошибка, правильнее исправить исходные данные и сгенерировать файл заново, чем пытаться «откатывать» двоичный PDF.
| Операция | Что сохраняется | Что теряется или фиксируется | Как откатить |
|---|---|---|---|
| Генерация PDF | Исходный шаблон и данные, если приложение их хранит | PDF фиксирует рассчитанную верстку | Изменить источник и пересобрать |
| Встраивание шрифта | Текст остаётся текстом при корректной генерации | Размер файла увеличивается; выбор шрифта закреплён | Поменять конфигурацию шрифта и пересобрать |
| Встраивание изображения | Исходный JPEG/PNG остаётся в проекте при правильной архитектуре | Масштаб и размещение фиксируются в PDF | Изменить исходный ресурс или параметры и пересобрать |
| Шифрование | Содержимое документа | Доступ зависит от паролей и поддержки просмотрщика | Сгенерировать незашифрованную или иначе защищённую копию из источника |
| PDF/A | Архивный вариант PDF | Требования профиля могут ограничивать содержимое | Хранить исходные данные и обычный профиль генерации |
Преимущества и недостатки pdfmake
Плюсы и минусы
• Декларативная модель документа избавляет от ручного расчёта координат для большинства типовых форм.
• Работает и в браузере, и на сервере Node.js, что позволяет использовать похожую структуру шаблона в разных архитектурах.
• Развитая поддержка таблиц, колонок, колонтитулов, содержания, закладок, изображений, SVG, QR-кодов и секций.
• Есть пользовательские шрифты, метаданные, шифрование, вложения и профили PDF/A.
• MIT-лицензия не вводит платных ограничений, водяных знаков или лимитов на число создаваемых документов.
• В 2026 году проект активно обновлялся, включая исправления безопасности и рендеринга.
• Нет обязательной облачной обработки: документ можно собирать полностью внутри браузера или собственного сервера.
Минусы
• Нет визуального редактора: весь макет задаётся кодом и объектами.
• Не умеет открывать и редактировать существующий PDF как редактор.
• Не является HTML/CSS-рендерером, поэтому перенос готовой веб-страницы требует другой технологии или преобразования структуры.
• Сложные многостраничные таблицы остаются зоной, где нужны регрессионные проверки и обходные решения для отдельных случаев.
• Большие изображения и тяжёлые документы могут заметно расходовать память.
• Переход с 0.2 на 0.3 содержит несовместимые изменения и не сводится к безусловному обновлению пакета.
• Качество сложной типографики и редких письменностей нужно проверять на конкретных шрифтах и данных.
Сравнение с аналогами
| Инструмент | Модель | Сильная сторона | Когда выбрать вместо pdfmake |
|---|---|---|---|
| jsPDF | JavaScript API, браузер и Node.js | Прямое программное рисование и большая экосистема | Когда удобнее императивно размещать элементы или проект уже построен вокруг jsPDF |
| PDFKit | Низкоуровневая/среднеуровневая библиотека Node.js и браузера | Графика, шрифты, формы, потоковая модель | Когда нужен более прямой контроль над PDF-примитивами; pdfmake сама использует PDFKit внутри |
| Puppeteer | Печать HTML/CSS через Chromium | Максимально естественное использование веб-верстки | Когда источник уже HTML/CSS и важны возможности браузерного движка |
| Sumatra PDF | Настольный просмотрщик для Windows | Чтение и навигация по готовым документам | Когда задача — открыть, прочитать или быстро проверить созданный PDF, а не генерировать его из кода |
pdfmake и Sumatra PDF находятся на разных этапах жизненного цикла документа. pdfmake создаёт файл внутри веб-приложения или серверного сервиса; Sumatra PDF открывает уже готовый документ и подходит для пользовательского просмотра. Поэтому сравнивать их как прямых конкурентов неправильно. Практичная связка выглядит иначе: сервис генерирует PDF через pdfmake, а пользователь открывает результат в Sumatra PDF или другом просмотрщике.
Если нужен не SDK, а обычная программа для создания PDF из любых печатаемых приложений Windows, стоит посмотреть на doPDF. Если требуется набор готовых настольных инструментов без программирования, ближе по пользовательскому сценарию PDF24 Creator.
Для документов, которые сначала редактируются как обычный текстовый файл, а затем экспортируются в PDF, логичнее LibreOffice Writer. Если нужно визуально редактировать уже существующий PDF, управлять страницами и выполнять широкий набор профессиональных операций, это сценарий уровня Adobe Acrobat Pro, а не pdfmake.
Инструкция по установке
Установка для Node.js
1. Установите поддерживаемую версию Node.js. Для ветки pdfmake 0.3 требуется Node.js 20 или новее; для нового сервера предпочтительнее актуальная поддерживаемая LTS-ветка.
2. В каталоге проекта выполните npm install pdfmake. Пакет будет добавлен в зависимости проекта и установлен вместе с требуемыми библиотеками.
3. Подключите pdfmake в коде и зарегистрируйте используемые шрифты. На сервере документация показывает реальные пути к файлам шрифтов.
4. Создайте минимальный document definition с полем content и сгенерируйте PDF. В 0.3 методы возвращают Promise, поэтому обработайте успешное завершение и ошибку асинхронно.
5. Откройте полученный файл независимым просмотрщиком и проверьте текст, переносы, шрифты, число страниц и изображения.
Подключение в браузере
1. Добавьте pdfmake через npm в сборку фронтенда либо используйте официально перечисленный CDN с фиксированной версией.
2. Для стандартной браузерной конфигурации подключите саму библиотеку и виртуальную файловую систему шрифтов с Roboto либо подготовьте собственную VFS.
3. Если используются пользовательские шрифты по URL, зарегистрируйте их до вызова генерации и убедитесь, что браузер имеет доступ к ресурсам.
4. Сформируйте document definition и получите PDF через клиентский метод. Для приложения предпочтительно самостоятельно решить, будет результат скачан, показан в Blob URL или отправлен на сервер.
5. Проверьте сценарий в каждом поддерживаемом браузере проекта. Не полагайтесь на open() и print() как на универсальные методы: их совместимость уже основного списка браузеров.
Экспресс-аудит за четверть часа
1. Установка: зафиксируйте версию pdfmake в зависимостях и убедитесь, что среда соответствует требованиям.
2. Типовая задача: соберите одну страницу с заголовком, абзацем, таблицей и локальным шрифтом.
3. Основная операция: добавьте данные, которые реально встречаются в проекте: длинную строку, пустое значение, многострочную ячейку и изображение.
4. Экспорт: создайте PDF тем способом, который будет использоваться в продакшене — браузерным Blob или серверной записью/ответом.
5. Контроль: откройте файл минимум в двух независимых просмотрщиках, сравните число страниц, текст, изображения и печатные поля.
Такой короткий аудит не заменяет тестирование, но быстро выявляет неправильную версию, проблемы со шрифтами, ошибки импорта API после 0.2 и несовместимость метода выдачи файла с конкретным браузером.
Практические кейсы
Счёт или накладная с динамической таблицей
Цель: создать многострочный финансовый документ из массива позиций. Подготовка: заранее нормализовать суммы, валюту и обязательные реквизиты, выбрать шрифт с нужными символами. Шаги: сформировать шапку, таблицу с headerRows, ширинами колонок и итоговой строкой, затем добавить колонтитул с номером страницы. Проверка: протестировать одну строку, страницу на несколько десятков строк и случай, где длинное название товара переносится на две строки. Ограничение: сложные rowSpan/colSpan на границе страниц требуют отдельного регрессионного теста.
Сертификат или билет с QR-кодом
Цель: выпускать уникальный одностраничный PDF по записи в базе данных. Подготовка: определить размер листа, фон, шрифт и значение QR-кода. Шаги: создать секцию фиксированного формата, разместить текст, изображение и QR-узел, добавить метаданные документа. Проверка: считать QR-код телефоном и визуально убедиться, что длинное имя не выталкивает важные элементы за границы. Ограничение: pdfmake не проверяет бизнес-смысл закодированного идентификатора — уникальность должна обеспечиваться приложением.
Многораздельный отчёт с оглавлением и закладками
Цель: сформировать отчёт, в котором разные разделы имеют собственную ориентацию и удобную навигацию. Подготовка: определить структуру разделов и стабильные идентификаторы заголовков. Шаги: использовать section для смены параметров страницы, toc для печатного оглавления и outline для панели закладок. Проверка: открыть PDF в просмотрщике с поддержкой закладок, перейти по нескольким пунктам и сверить номера страниц с оглавлением. Ограничение: при изменении объёма данных номера страниц будут пересчитаны заново, поэтому нельзя хранить их отдельно как постоянные значения.
Архивный PDF/A с вложением
Цель: подготовить архивную версию документа и вложить исходный файл. Подготовка: выбрать допустимую версию PDF и профиль PDF/A, заполнить заголовок и другие метаданные. Шаги: включить нужный subset, tagged PDF при требованиях профиля, добавить файл во встроенные вложения и сгенерировать документ. Проверка: помимо открытия в обычном просмотрщике использовать отдельный валидатор PDF/A. Ограничение: наличие параметра PDF/A в pdfmake не освобождает от проверки конкретного итогового файла на соответствие требованиям архива.
Защищённый PDF на сервере
Цель: ограничить открытие или операции с документом и исключить произвольную загрузку сетевых ресурсов. Подготовка: определить парольную политику, допустимые домены и каталоги шрифтов/изображений. Шаги: настроить userPassword/ownerPassword и permissions, выбрать подходящую версию PDF для требуемого шифрования, затем задать URL и local access policy. Проверка: открыть файл с правильным и неправильным паролем, а также убедиться, что запрещённый URL отклоняется. Ограничение: разрешения на копирование и печать исполняет PDF-просмотрщик, поэтому их нельзя трактовать как криптографическую защиту содержимого после расшифровки.
Контроль перед сохранением и передачей
• Проверить, что все обязательные бизнес-поля заполнены до генерации.
• Убедиться, что используемый шрифт содержит кириллицу, символ валюты и специальные знаки из реальных данных.
• Проверить длинные строки, пустые значения, отрицательные числа и большие таблицы.
• Открыть документ в независимом просмотрщике, а не только во встроенном iframe приложения.
• Сверить размер страницы, ориентацию, поля, номера страниц, закладки и оглавление.
• Для PDF/A выполнить внешнюю валидацию профиля.
• Для защищённого файла проверить пароль и поведение разрешений в целевых просмотрщиках.
• Если ресурсы загружаются по URL, проверить allowlist и сценарий недоступного ресурса.
Реестр проверяемых утверждений
| Ключевой факт | Тип подтверждения | Дата проверки | Контекст | Практический вывод |
|---|---|---|---|---|
| Последняя версия 0.3.11 | Официальный релиз и npm | 12.09.2026 | Актуальная ветка 0.3 | Новые проекты следует сверять с веткой 0.3, а не со старыми примерами 0.2 |
| Лицензия MIT | README и package.json проекта | 12.09.2026 | Сам пакет pdfmake | Нет платы за саму библиотеку и лимита на число документов |
| Node.js минимум 20 | package.json и документация 0.3 | 12.09.2026 | Серверная генерация | Node 16/18 для актуальной ветки не подходят |
| Работа в браузере и Node.js | Официальная документация | 12.09.2026 | Клиент и сервер | Один класс шаблонов можно применять в разных архитектурах |
| JPEG и PNG поддерживаются как изображения | Документация узла images | 12.09.2026 | Визуальный image-узел | WebP/AVIF нельзя безусловно считать штатным входом image-узла |
| Есть PDF/A и PDF/UA параметры | Документация 0.3 | 12.09.2026 | Архивные и доступные PDF | Для архива всё равно нужен контроль итогового файла |
| Есть политики доступа к URL и локальным файлам | Changelog 0.3.6 и 0.3.8 | 12.09.2026 | Серверные внешние ресурсы | Следует ограничивать источники ресурсов |
| 0.3 содержит breaking changes относительно 0.2 | Официальная миграционная документация | 12.09.2026 | Обновление старого проекта | Нужна проверка API, VFS и Promise-логики |
Часто задаваемые вопросы
Можно ли редактировать существующий PDF через pdfmake?
Нет, это не PDF-редактор. Типичный сценарий — создать новый PDF из JavaScript-данных и шаблона. Для визуального редактирования существующего файла нужен редактор другой категории.
Нужен ли сервер для генерации?
Нет. pdfmake умеет генерировать документ прямо в браузере. Сервер полезен, когда документ должен формироваться централизованно, храниться без передачи исходных данных клиенту или создаваться пакетно.
Отправляются ли документы в облако pdfmake?
Сама библиотека не требует облачного сервиса и может работать локально в браузере или вашем Node.js-процессе. Сетевые запросы появятся, если приложение само загружает шрифты, изображения или вложения по URL либо отправляет готовый файл во внешний сервис.
Подходит ли pdfmake для HTML в PDF?
Не как прямой браузерный печатный движок. Ядро работает со своей декларативной моделью, а не с полноценным DOM/CSS. Если документ уже свёрстан HTML и важна его веб-верстка, обычно удобнее Chromium/Puppeteer. Преобразователи HTML в модель pdfmake существуют в экосистеме, но это отдельные зависимости и отдельная зона совместимости.
Можно ли использовать кириллицу?
Да, при использовании шрифта, в котором есть нужные кириллические глифы. В браузерной стандартной конфигурации используется Roboto. Стандартные 14 PDF-шрифтов на сервере документация рекомендует считать ограниченными ANSI и английскими символами.
Можно ли сделать пароль на открытие?
Да. userPassword включает шифрование и запрос пароля при открытии, а ownerPassword вместе с permissions управляет разрешениями. Реальное соблюдение запретов на печать или копирование зависит от PDF-просмотрщика.
Есть ли поддержка PDF/A?
Да, документация 0.3 описывает профили PDF/A-1, PDF/A-2, PDF/A-3 и PDF/UA. Для архивного процесса рекомендуется дополнительно валидировать конечный файл специализированным средством.
Почему после обновления с 0.2 код перестал работать?
Ветка 0.3 намеренно содержит несовместимые изменения: унифицирован интерфейс клиента и сервера, методы переведены на Promise, изменены VFS и pageBreakBefore, повышены требования к Node.js и удалена поддержка IE11. Нужно следовать миграционной документации, а не искать одну замену имени функции.
Что делать, если документ становится слишком тяжёлым?
Сначала уменьшить разрешение и размер исходных изображений, исключить ненужные вложения, проверить повторное использование ресурсов и измерить память на реальном наборе данных. Затем уже оценивать настройки кэширования и буферизации страниц. Без измерений отключение кэша или включение полной буферизации может ухудшить ситуацию.
Подходит ли pdfmake вместо Sumatra PDF?
Нет. pdfmake создаёт PDF программно, а Sumatra PDF предназначена прежде всего для открытия и чтения готовых документов на Windows. Они скорее дополняют друг друга, чем заменяют.
Вывод
pdfmake хорошо подходит веб-разработчикам и backend-командам, которым нужен управляемый генератор PDF без обязательного облачного API: счета, отчёты, билеты, сертификаты, печатные формы и другие документы с повторяемой структурой. Его сильная сторона — декларативная модель, развитые таблицы и страницы, шрифты, закладки, вложения, шифрование и архивные профили при свободной MIT-лицензии.
Библиотека менее удачна, если исходный документ уже существует как сложный HTML/CSS, если нужен визуальный редактор или требуется править готовый PDF. Для таких задач лучше Chromium/Puppeteer, настольный PDF-редактор или офисный пакет. При больших таблицах, изображениях и сложных шаблонах pdfmake требует дисциплины: зафиксированной версии, эталонных PDF, проверки шрифтов, тестирования переносов и контроля памяти.
Для нового проекта разумной отправной точкой является актуальная 0.3.11 на поддерживаемой LTS-версии Node.js либо современном браузере. Старые рецепты для 0.2 следует переносить осознанно. При такой архитектуре pdfmake остаётся практичным инструментом именно там, где PDF должен быть результатом кода и данных, а не ручной работы пользователя.