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 или проприетарными инструментами дизайна.

Previous Next

Начало работы с 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, вы можете открыть доступ к пользовательским вспомогательным функциям в шаблоне. Это позволяет шаблону выполнять вычисления, форматировать даты или манипулировать строками внутри, без необходимости предварительно обрабатывать каждый элемент данных в основной логике приложения.

 Русский