Как объединить PDF и DOCX и конвертировать DOCX в PDF на Java

В этом руководстве вы узнаете, как объединять PDF и DOCX файлы и также конвертировать DOCX в PDF с помощью GroupDocs.Merger для Java. Вы увидите, как загружать документы из потоков, обрабатывать многогигабайтные нагрузки и создавать единый вывод, который можно сохранить на диск, отправить клиенту или сохранить в облачном хранилище. В конце у вас будет готовый фрагмент кода, подходящий для любого веб‑сервиса, пакетного задания или микросервисной архитектуры.

Быстрые ответы

  • Какой основной способ сохранить объединённый документ в Java? Вызовите Merger.save(OutputStream) после добавления всех исходных файлов.
  • Может ли GroupDocs.Merger объединять разные форматы файлов? Да — он поддерживает более 30 входных и выходных форматов, включая DOCX, PDF, PPTX, XLSX и многие типы изображений.
  • Как загрузить документ из InputStream? Создайте экземпляр Merger с потоком: new Merger(stream).
  • Что делать с большими документами? Используйте буферизованные потоки, обрабатывайте файлы пакетами и закрывайте каждый поток как можно скорее, чтобы снизить использование памяти.
  • Требуется ли лицензия для использования в продакшене? Да — действующая лицензия GroupDocs открывает полный функционал и удаляет водяные знаки оценки.

Что такое объединение PDF и DOCX?

Объединение PDF и DOCX означает комбинирование одного или нескольких PDF‑ и Word‑документов в один файл при сохранении порядка страниц, метаданных и визуального качества каждого источника. С помощью GroupDocs.Merger вы также можете рассматривать операцию объединения как быстрый способ конвертировать DOCX в PDF, добавив содержимое DOCX в контейнер PDF и затем сохранив результат как PDF.

Почему стоит использовать GroupDocs.Merger для объединения разных форматов файлов?

GroupDocs.Merger абстрагирует низкоуровневые детали каждого формата, позволяя сосредоточиться на бизнес‑правилах. Библиотека может обрабатывать 30+ форматов, работать с файлами до 500 МБ без загрузки всего документа в память и гарантирует, что нумерация страниц, заголовки и колонтитулы останутся неизменными в объединённом выводе.

Предварительные требования

  • GroupDocs.Merger для Java
  • Java 8+ (JDK 8 или выше)
  • Maven или Gradle для управления зависимостями
  • IDE, например IntelliJ IDEA или Eclipse
  • Действующая лицензия GroupDocs для продакшена (доступна бесплатная пробная версия)

Настройка GroupDocs.Merger для Java

Maven

Добавьте следующую зависимость в ваш файл pom.xml:

<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-merger</artifactId>
    <version>latest-version</version>
</dependency>

Gradle

В вашем build.gradle включите:

implementation 'com.groupdocs:groupdocs-merger:latest-version'

Прямое скачивание

Либо скачайте последнюю версию с GroupDocs.Merger for Java releases и вручную добавьте её в classpath вашего проекта.

Шаги получения лицензии

  1. Бесплатная пробная версия — изучите основные функции без кредитной карты.
  2. Временная лицензия — запросите краткосрочный ключ на странице временной лицензии (temporary license page).
  3. Полная покупка — получите неограниченную производственную лицензию для коммерческих развертываний. Полную лицензию можно приобрести напрямую у GroupDocs (GroupDocs).

Базовая инициализация

Класс Merger является точкой входа для всех операций; он представляет одну сессию объединения. После добавления библиотеки создайте экземпляр Merger:

import com.groupdocs.merger.Merger;

// Initialize GroupDocs Merger
erMerger = new Merger("YOUR_DOCUMENT_DIRECTORY/SAMPLE_DOCX");

Как загрузить документ из потока?

Загрузка документа из InputStream позволяет работать с файлами, поступающими из HTTP‑загрузок, облачных бакетов или генерации в памяти. InputStream — это абстракция Java, читающая байты из источника, такого как файл, сетевой сокет или буфер памяти, позволяя библиотеке обрабатывать данные без создания временных файлов на диске. Такой подход снижает нагрузку ввода‑вывода и повышает производительность в сервисах с высоким пропускным способностью.

Шаг 1 — создать входной поток

import java.io.FileInputStream;
import java.io.InputStream;

InputStream stream = new FileInputStream("YOUR_DOCUMENT_DIRECTORY/SAMPLE_DOCX");

Почему? Поток преобразует физический файл в последовательность байтов, которую Merger может читать без сохранения на диск.

Шаг 2 — инициализировать Merger с потоком

Merger merger = new Merger(stream);

Почему? Предоставление потока позволяет обработку в памяти, что идеально подходит для безсерверных функций или API с высокой пропускной способностью.

Как сохранить объединённый документ в Java?

После объединения необходимо сохранить объединённое содержимое в выбранное вами место назначения. OutputStream — это абстракция Java, записывающая байты в цель, такую как файл, сетевой сокет или буфер в памяти, предоставляя гибкость в доставке объединённого документа. Передача OutputStream в Merger.save гарантирует, что итоговый PDF или DOCX будет записан эффективно и безопасно.

Шаг 1 — определить выходной поток

import java.io.FileOutputStream;
import java.io.OutputStream;

OutputStream outputStream = new FileOutputStream("YOUR_OUTPUT_DIRECTORY/merged_output.docx");

Почему? OutputStream указывает Java, куда следует записать объединённый файл — на диск, в тело ответа или в облачное хранилище.

Шаг 2 — сохранить документ

merger.save(outputStream);

Почему? save() завершает объединение, сбрасывает буферы и гарантирует, что вывод соответствует спецификациям выбранного формата.

Шаг 3 — закрыть поток

outputStream.close();

Почему? Закрытие освобождает дескрипторы ОС и гарантирует, что все буферизованные байты будут записаны, предотвращая повреждение файла.

Как работать с большими документами в Java?

Большие PDF‑файлы или многогигабайтные Word‑файлы могут исчерпать кучу JVM при наивной загрузке. Чтобы контролировать использование памяти, оберните сырой поток в BufferedInputStream и BufferedOutputStream, обрабатывайте файлы небольшими партиями и вызывайте Merger.close() после каждой операции для освобождения нативных ресурсов. Мониторинг использования кучи и установка соответствующего флага -Xmx (цель — ≤70 % доступной памяти) дополнительно защищают от ошибок out‑of‑memory.

Практические применения

GroupDocs.Merger идеально подходит для реальных задач, таких как:

  1. Пакетная генерация отчетов — объединять ежедневные экспорты Excel (XLSX) и резюме Word (DOCX) в один PDF для архивирования.
  2. Динамическое создание счетов — объединять шаблон счета в PDF с документом условий DOCX, затем доставлять итоговый PDF клиенту.
  3. Кроссплатформенные сервисы — предоставить REST‑endpoint, принимающий загрузки разных форматов, объединять их и передавать результат в поток без сохранения временных файлов.

Соображения по производительности

  • Управление памятью — всегда закрывайте потоки; библиотека использует нативные буферы, которые необходимо освобождать.
  • Пакетные операции — группировка файлов уменьшает количество обращений к диску и повышает пропускную способность до 30 %.
  • Эффективный ввод‑вывод — для файлов более 10 МБ буферизованный ввод‑вывод может сократить время обработки примерно вдвое.

Распространённые проблемы и решения

ПроблемаПричинаРешение
FileNotFoundExceptionНеправильный путь или недостаточные праваПроверьте абсолютные/относительные пути и убедитесь, что приложение имеет права чтения/записи
IOException при сохраненииПоток не закрыт или диск заполненИспользуйте try‑with‑resources, закрывайте потоки и проверьте доступное место на диске
Всплески памяти при работе с большими PDFВесь файл загружается в памятьПерейдите на буферизованные потоки и обрабатывайте файлы небольшими партиями

Часто задаваемые вопросы

В: Могу ли я объединять разные форматы файлов с помощью GroupDocs.Merger?
О: Да, библиотека поддерживает более 30 форматов — включая DOCX, PDF, PPTX, XLSX и распространённые типы изображений — позволяя выполнять бесшовные кросс‑форматные объединения.

В: Как эффективно работать с большими документами?
О: Оберните файловые потоки в BufferedInputStream/BufferedOutputStream, объединяйте файлы пакетами и сразу после использования закрывайте каждый поток.

В: Поддерживаются ли файлы, защищённые паролем?
О: Абсолютно. Укажите пароль при создании экземпляра Merger, чтобы открыть зашифрованные PDF или DOCX файлы.

В: Можно ли использовать эту библиотеку в коммерческом продукте?
О: Да, действующая лицензия GroupDocs открывает полный набор возможностей для продакшена без водяных знаков оценки.

В: Что делать, если возникнет IOException?
О: Дважды проверьте пути к файлам, убедитесь, что процесс имеет достаточные права, проверьте свободное место на диске и оберните вызовы ввода‑вывода в блоки try‑catch или используйте try‑with‑resources.

Ресурсы


Последнее обновление: 2026-10-11
Тестировано с: GroupDocs.Merger последняя версия (по состоянию на 2026)
Автор: GroupDocs


Связанные руководства