JavaScript API для генерации динамических документов Word
Библиотека JavaScript с открытым исходным кодом для создания динамических документов Word с использованием Node.js и браузерных приложений.
Что такое Docx-templates?
Docx-Templates — это открытая JavaScript-библиотека, позволяющая разработчикам программного обеспечения генерировать динамические документы Microsoft Word (.docx) с использованием предопределённых шаблонов. Вместо того чтобы вручную создавать Word‑документы программно, разработчики могут разрабатывать шаблоны в Microsoft Word и внедрять динамические данные с помощью встроенных команд. Эта библиотека работает как в среде Node.js, так и в браузерах, что делает её очень универсальной для современных веб‑ и серверных приложений. Она обрабатывает файлы DOCX, разбирая их внутреннюю структуру XML и заменяя команды шаблона реальными данными во время выполнения.
Библиотека Docx-Templates — мощный, открытый инструмент, разработанный как для Node.js, так и для браузерных сред. Основное преимущество библиотеки — разделение дизайна и логики. Пользователи без технических навыков могут создавать макет и стили в Word, в то время как разработчики сосредотачиваются на внедрении данных. Она поддерживает сложную логику, такую как циклы, условное форматирование и даже выполнение фрагментов JavaScript непосредственно в документе. Это делает её идеальным решением для разработчиков, которым необходимо создавать высококачественные отчёты без борьбы с XML или проприетарными инструментами дизайна.
Начало работы с Docx-templates
Рекомендуемый способ установки библиотеки Docx-templates — через npm. Пожалуйста, используйте следующую команду для беспроблемной установки
Установить Docx-Templates через NPM
$ npm install docx-templates Установить Docx-Templates через Yarn/strong>
$ yarn add docx-templates Генерация документов на основе шаблонов через JS API
Библиотека Docx-Templates с открытым исходным кодом позволяет разработчикам программного обеспечения создавать документы в Word и динамически внедрять данные с помощью простых команд. Такой подход разделяет представление и логику, делая шаблоны легкими в управлении и обновлении без изменения кода. Вы можете напрямую обращаться к свойствам вашего объекта данных или даже выполнять простые выражения. Например, чтобы вставить полное имя, ваш шаблон будет выглядеть так: {firstName} {surname}. Библиотека оценивает код и заменяет его без швов.
Как динамически создавать Word-документы внутри JavaScript-приложений?
import createReport from 'docx-templates';
import fs from 'fs';
const template = fs.readFileSync('template.docx');
const report = await createReport({
template,
data: { name: 'John', surname: 'Doe' },
});
fs.writeFileSync('output.docx', report);
Динамическое внедрение изображений через JavaScript
Помимо текста, библиотека Docx-Templates с открытым исходным кодом может внедрять изображения «на лету». Это включает локальные файлы, изображения по URL или даже программно генерируемые QR‑коды. Вы можете контролировать размер изображения и его расположение. Эта функция меняет правила игры при создании удостоверений личности, каталогов продукции или отчетов, требующих динамических диаграмм и визуальных доказательств. Ниже приведён простой пример, демонстрирующий, как вставить изображение в документ Word через JavaScript API.
Как вставить изображение «на лету» в Word-документы через JavaScript API?
const buffer = await createReport({
template,
data: {
userAvatar: async () => {
const resp = await fetch('https://example.com/photo.png');
return { width: 3, height: 3, data: await resp.arrayBuffer(), extension: '.png' };
}
},
});
// In Word: {IMAGE userAvatar()}
Мощные циклы (FOR/END-FOR)
Обработка списков данных становится простой с командой FOR. Эта функция позволяет перебрать массивы для создания строк таблицы, списков или даже целых разделов документа. Библиотека Docx-Templates включает поддержку вложенных циклов, что позволяет представлять сложные иерархические структуры данных, такие как список отделов с их сотрудниками, при этом сохраняется оригинальное оформление Word. Ниже приведён пример кода, показывающий, как этого достичь.
Как применить продвинутый цикл внутри JavaScript-приложений?
const buffer = await createReport({
template,
data: {
projects: [
{ name: 'SEO Optimization', status: 'Completed' },
{ name: 'API Integration', status: 'In Progress' }
]
},
});
/* In Word:
{FOR project IN projects}
Project: {project.name} - Status: {project.status}
{END-FOR}
*/
Пользовательский контекст JavaScript (EXEC)
Одна из самых продвинутых возможностей библиотеки Docx-Templates — способность выполнять произвольные фрагменты JavaScript с помощью команды EXEC (или !). Предоставляя additionalJsContext, вы можете открыть доступ к пользовательским вспомогательным функциям в шаблоне. Это позволяет шаблону выполнять вычисления, форматировать даты или манипулировать строками внутри, без необходимости предварительно обрабатывать каждый элемент данных в основной логике приложения.