Как объединять файлы Word с помощью NodeJS
Слияние файлов Word необходимо, когда несколько отчетов, предложений или форм должны быть объединены в один документ. Это может понадобиться в приложениях для автоматизации документооборота. Запись Как объединять файлы Word с помощью NodeJS впервые появилась techrocks.ru.
![Как объединять файлы Word с помощью NodeJS](https://techrocks.ru/wp-content/uploads/2025/01/merging-word-docs-with-nodejs.jpg)
Слияние файлов Word необходимо, когда несколько отчетов, предложений или форм должны быть объединены в один документ. Это может понадобиться в приложениях для автоматизации документооборота.
Системы управления контентом также полагаются на эту функциональность, чтобы объединять документы для совместного редактирования или архивирования.
Node.js — хороший выбор для решения подобных задач, поскольку он поддерживает как серверные, так и клиентские операции, позволяя эффективно работать с документами в различных средах.
От редакции Techrocks: читайте также статью «Как объединять документы Word с помощью Python».
Необходимые предварительные условия
- Node.js и npm для управления зависимостями — убедитесь, что они установлены
- Библиотеки:
docx-merger
для слияния файлов Word на стороне сервераmammoth
для преобразования .docx в HTML (полезно для объединения на стороне клиента)html-docx-js
(или аналогичная библиотека) для преобразования HTML обратно в .docx
Метод 1. Объединение файлов на стороне сервера с помощью docx-merger
docx-merger — это специализированная библиотека Node.js, предназначенная для слияния нескольких файлов .docx путем непосредственного объединения их содержимого, включая текст, таблицы и другие общие элементы, в единый целостный документ. Она особенно полезна, когда вам нужно сохранить оригинальную структуру и форматирование в объединенных документах.
Вот как работает docx-merger и почему она эффективна для слияния на стороне сервера:
- Прямое слияние элементов .docx. docx-merger считывает базовые XML-структуры всех файлов .docx и объединяет их на уровне документа. При этом сохраняются макет, стили, заголовки, нижние колонтитулы и даже сложные структуры, такие как таблицы и изображения, так что выходной файл сохраняет внешний вид исходных.
- Настраиваемые параметры слияния. Библиотека обеспечивает гибкость при объединении. Вы можете указать, объединять ли документы целиком или выборочно (определенные разделы). Это особенно полезно в тех случаях, когда требуется объединить только части документов, например при добавлении резюме, титульных страниц или при объединении разделов нескольких отчетов.
- Работа со встроенными объектами. docx-merger поддерживает встроенные элементы, такие как изображения, фигуры и другие медиафайлы. При слиянии она сохраняет эти объекты, гарантируя, что визуальные элементы не будут потеряны или искажены при выводе. Это очень важно для отчетов, презентаций и других документов, в которых графика играет важную роль.
- Упрощенный API для интеграции. API для docx-merger прост, что позволяет легко внедрять его в приложения Node.js. Вы инициализируете библиотеку документами, которые хотите объединить, настраиваете параметры объединения, а затем выводите результат в виде файла .docx. Такая простота использования позволяет легко добавить объединение документов в существующие рабочие процессы, как в виде отдельного сценария, так и в составе более крупного конвейера обработки документов.
Используя docx-merger, вы можете эффективно объединять большие объемы документов с уверенностью, что их оригинальное форматирование и содержание будут сохранены. Это делает docx-merger идеальным выбором для обработки документов на стороне сервера в Node.js.
Установка docx-merger
Для начала установите docx-merger через npm:
npm install docx-merger
Эта библиотека не требует дополнительных настроек. После установки вы можете импортировать ее и инициализировать новый экземпляр для начала слияния файлов.
docx-merger работает, считывая каждый файл .docx как буфер, а затем объединяя их в один выходной файл.
Объединение файлов с помощью docx-merger
Выполните следующие шаги, чтобы объединить файлы .docx с помощью docx-merge:
- Импортируйте
fs
для чтения файлов иdocx-merger
для слияния. - Инициализируйте
docx-merger
пустым объектом конфигурации и массивом буферов файлов для слияния. - Используйте метод
.save()
для слияния и сохранения результирующего файла в виде буфера, а затем запишите файл на диск с помощьюfs.writeFileSync()
.
Пример:
const fs = require('fs'); const DocxMerger = require('docx-merger'); const files = [fs.readFileSync('file1.docx'), fs.readFileSync('file2.docx')]; const docxMerger = new DocxMerger({}, files); docxMerger.save('nodebuffer', (data) => { fs.writeFileSync('merged.docx', data); });
Этот код считывает файлы file1.docx
и file2.docx
как буферы, объединяет их и сохраняет объединенный документ под именем merged.docx
.
Когда стоит выполнять объединение файлов на стороне сервера?
Слияние на стороне сервера с помощью docx-merger идеально подходит для сценариев, требующих больших объемов обработки или автоматизации. Например:
- Пакетная обработка документов. Автоматизация слияния счетов, отчетов или записей для больших наборов данных.
- Автоматизация рабочих процессов. Консолидация различных разделов документа из разных источников для таких рабочих процессов, как создание отчетов или архивирование.
- Сервисы бэкенда. Такие сервисы запускаются в серверных средах, с которыми пользователь взаимодействует косвенно. Пример — объединение документов через API или запланированную задачу бэкэнда.
Метод 2. Объединение документов на стороне клиента с помощью mammoth и преобразования HTML
mammoth — это библиотека Node.js, которая конвертирует текстовые файлы в HTML. Это делает ее идеальным решением для клиентских приложений, требующих работы с документами в режиме реального времени. Такой подход особенно полезен в сценариях, когда пользователям нужно редактировать или объединять документы прямо в браузере перед их экспортом.
Вот что делает mammoth мощным инструментом для работы с документами на стороне клиента:
- Высокое качество. mammoth переводит содержимое .docx в чистый, семантический HTML, сохраняя основные элементы форматирования, такие как заголовки, абзацы и списки. Это гарантирует, что преобразованные документы сохранят свою первоначальную структуру и будут удобны для работы в веб-среде.
- Обработка встроенных изображений с помощью Base64. Когда mammoth встречает встроенные изображения в файле .docx, он кодирует их в формате Base64 и включает в теги
в HTML-выводе. Это позволяет легко отображать, объединять или манипулировать изображениями вместе с текстом, делая конечный документ более целостным и визуально точным при реэкспорте в .docx. - Динамическое редактирование документов. Поскольку mammoth выводит HTML, содержимое документа легко добавлять или корректировать на стороне клиента с помощью JavaScript или клиентских фреймворков. Пользователи могут комбинировать несколько HTML-сниппетов из разных файлов .docx, переставлять разделы или даже динамически вводить новое содержимое, что очень важно для приложений, требующих настройки содержимого в режиме реального времени.
- Преобразование обратно в .docx с помощью html-docx-js. После создания или редактирования документа в HTML вы можете преобразовать его обратно в формат .docx с помощью таких библиотек, как html-docx-js. Эта библиотека берет объединенный HTML-контент и генерирует загружаемый файл .docx, что позволяет легко вернуть пользователю конечный документ в исходном формате.
Использование mammoth для объединения документов на стороне клиента предлагает гибкий интерактивный способ управления содержимым документов в браузере с функциями, поддерживающими как текст, так и изображения. В сочетании с html-docx-js или аналогичным инструментом вы можете создавать мощные приложения, позволяющие пользователям настраивать и объединять документы на лету, а затем экспортировать свою работу в файлы .docx.
Преобразование .docx в HTML с помощью mammoth
Сначала установите mammoth:
npm install mammoth
mammoth можно использовать для преобразования файлов .docx в HTMLсразу после установки.
Пример кода для преобразования файлов .docx в HTML:
import mammoth from 'mammoth'; import fs from 'fs'; async function convertDocxToHtml(filePath) { const result = await mammoth.convertToHtml({ path: filePath }); return result.value; } async function mergeHtmlFiles() { const html1 = await convertDocxToHtml('file1.docx'); const html2 = await convertDocxToHtml('file2.docx'); const mergedHtml = html1 + html2; return mergedHtml; } const mergedHtmlContent = await mergeHtmlFiles();
В этом примере convertDocxToHtml
считывает файл .docx и преобразует его в формат HTML. mammoth автоматически преобразует все изображения в документе в URL-адреса данных, закодированные в Base64, чтобы их можно было объединить и отобразить вместе с текстом.
Объединение HTML с изображениями и преобразование обратно в .docx
После объединения HTML-содержимого, включая любые закодированные в Base64 изображения, вы можете использовать html-docx-js для преобразования его обратно в формат .docx. Этот процесс гарантирует, что и текст, и изображения будут сохранены в конечном результате.
Установите html-docx-js:
npm install html-docx-js
Затем используйте эту библиотеку, чтобы обернуть объединенный HTML и преобразовать его обратно в .docx:
import htmlDocx from 'html-docx-js'; import fs from 'fs'; const wrappedHtmlContent = ${mergedHtmlContent}; const docxBuffer = htmlDocx.asBlob(wrappedHtmlContent); fs.writeFileSync('merged_with_images.docx', docxBuffer);
В этом коде объединенный HTML-контент, содержащий текст и изображения, оборачивается в базовую HTML-структуру и передается в htmlDocx.asBlob()
. Эта функция генерирует буфер .docx, сохраняющий текст и изображения, который затем сохраняется на диске в виде файла .docx.
Когда выполнять объединение файлов на стороне клиента
Слияние на стороне клиента с помощью mammoth и html-docx-js полезно в следующих случаях:
- Редактирование документов в реальном времени. Интерактивные приложения, в которых пользователи могут загружать, объединять и скачивать .docx-файлы прямо в браузере, со встроенными изображениями.
- Платформы для совместной работы. Инструменты для совместного создания документов, где пользователям необходимо объединять файлы .docx и сохранять изображения.
- Пользовательские генераторы документов. Приложения, генерирующие документы с текстом и изображениями из нескольких файлов .docx (например специализированные отчеты), гарантирующие сохранение всех элементов в конечном результате.
Этот метод представляет собой комплексное решение для объединения документов на стороне клиента, позволяющее гибко работать с богатым содержимым.
Обработка ошибок и наилучшие практики
При слиянии файлов Word может возникнуть ряд проблем, в частности с форматированием и обработкой ошибок.
Распространенные проблемы и обработка ошибок
- Несоответствие макета. Преобразование в HTML может привести к неожиданным различиям в форматировании при обратном преобразовании в .docx.
- Различия в стилях. Пользовательские стили в .docx могут некорректно переводиться в HTML, что приводит к расхождениям в шрифтах и полях. Всегда проверяйте правильность преобразования каждого файла и применяйте согласованную таблицу стилей, чтобы свести к минимуму несоответствия.
- Форматирование изображений. Изображения в кодировке Base64 могут некорректно отображаться в конечном файле .docx, что аналогично проблемам при объединении файлов PDF. Убедитесь, что все изображения правильно отформатированы перед объединением, и отслеживайте проблемы во время преобразования.
Наилучшие подходы
- Последовательное форматирование. Нормализуйте стили в документах с помощью предопределенной таблицы стилей, чтобы свести к минимуму несоответствия.
- Целостность данных. Следите за правильностью считывания и преобразования файлов, проверяя результаты каждого преобразования.
- Проверка кодировки и формата. Для обеспечения успешного преобразования следите за тем, чтобы все файлы имели ожидаемый формат .docx и чтобы Base64- изображения были правильно отформатированы.
Заключение
Два метода объединения файлов Word с помощью Node.js — использование docx-merger для объединения на стороне сервера и mammoth с преобразованием HTML для объединения на стороне клиента — обеспечивают гибкость для различных случаев использования.
Слияние на стороне сервера (docx-merger):
- Идеально подходит для пакетной обработки и автоматизированных рабочих процессов
- Подходит для слияния большого количества документов без участия пользователя
- Эффективно работает с такими фреймворками, как Express.js и NestJS, позволяя легко интегрироваться в бэкэнд-сервисы для обработки множества файлов
Слияние на стороне клиента (mammoth и преобразование в HTML):
- Лучше всего подходит для интерактивных приложений, работающих в режиме реального времени, где пользователи работают с документами напрямую
- Поддерживает динамическое редактирование и объединение документов в браузере
- Хорошо работает с такими фреймворками, как Astro.js, React или Vue.js, обеспечивая плавную интеграцию в современные веб-приложения
Эту функциональность можно расширить:
- Интегрируйте эти методы в более крупное приложение или веб-сервис, где пользователи смогут загружать и объединять документы напрямую
- Оптимизируйте производительность для сред с высоким уровнем использования, изучив:
- Кэширование файлов для уменьшения избыточной обработки
- Оптимизацию процесса преобразования для повышения скорости и эффективности
- Балансировку нагрузки для обработки множества запросов в реализациях на стороне сервера.
Применяя самые лучшие подходы и обеспечивая надежную обработку ошибок, вы сможете создать надежное и масштабируемое решение для слияния файлов .docx с помощью Node.js.
Перевод статьи “How to Merge Word Files Using NodeJS”.
Запись Как объединять файлы Word с помощью NodeJS впервые появилась techrocks.ru.