JavaでPDFとDOCXを結合し、DOCXをPDFに変換する方法

このチュートリアルでは、GroupDocs.Merger for Java を使用して PDF と DOCX ファイルを結合 し、さらに DOCX を PDF に変換 する方法を紹介します。ストリームからドキュメントを読み込む方法、マルチギガバイトのペイロードを処理する方法、ディスクに保存したりクライアントに送信したり、クラウドストレージに保存したりできる単一の出力を生成する方法を確認できます。最後まで読むと、Web サービス、バッチジョブ、マイクロサービスアーキテクチャのいずれにも組み込める、すぐに使えるコードスニペットが手に入ります。

クイック回答

  • Javaで結合されたドキュメントを保存する主な方法は何ですか? すべてのソースファイルを追加した後、Merger.save(OutputStream) を呼び出します。
  • GroupDocs.Merger は異なるファイル形式を結合できますか? はい – DOCX、PDF、PPTX、XLSX、その他多数の画像形式を含む、30 以上の入力および出力形式をサポートしています。
  • InputStream からドキュメントを読み込むにはどうすればよいですか? ストリームで Merger をインスタンス化します: new Merger(stream)。
  • 大きなドキュメントはどう扱うべきですか? バッファ付きストリームを使用し、ファイルをバッチ処理し、メモリ使用量を低く抑えるために各ストリームはできるだけ早く閉じます。
  • 本番環境での使用にライセンスは必要ですか? はい – 有効な GroupDocs ライセンスはすべての機能を解放し、評価用の透かしを削除します。

PDF と DOCX の結合とは?

PDF と DOCX を結合するとは、1 つまたは複数の PDF および Word ドキュメントを単一のファイルにまとめ、各ソースのページ順序、メタデータ、視覚的忠実度を保持することを意味します。GroupDocs.Merger を使用すると、結合操作を DOCX を PDF に変換 する高速な方法としても利用でき、DOCX の内容を PDF コンテナに追加して結果を PDF として保存できます。

なぜ異なるファイル形式を結合するのに GroupDocs.Merger を使用するのか?

GroupDocs.Merger は各形式の低レベルな詳細を抽象化し、ビジネスロジックに集中できるようにします。このライブラリは 30 以上の形式 を処理でき、500 MB までのファイルをメモリに全体を読み込まずに扱い、結合された出力全体でページ番号、ヘッダー、フッターが保持されることを保証します。

前提条件

  • GroupDocs.Merger for Java ライブラリ
  • Java 8+(JDK 8 以上)
  • 依存関係管理のための Maven または Gradle
  • IntelliJ IDEA や Eclipse などの IDE
  • 本番環境用の有効な GroupDocs ライセンス(無料トライアルあり)

Java 用 GroupDocs.Merger の設定

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 からダウンロードし、手動でプロジェクトのクラスパスに追加します。

ライセンス取得手順

  1. Free trial – クレジットカードなしでコア機能を試せます。
  2. Temporary license – temporary license page(temporary license page)で短期キーをリクエストします。
  3. Full purchase – 商用展開向けの無制限本番ライセンスを取得します。GroupDocs(GroupDocs)から直接フルライセンスを購入できます。

基本的な初期化

Merger クラスはすべての操作のエントリーポイントで、単一のマージセッションを表します。ライブラリを追加したら、Merger インスタンスを作成します:

import com.groupdocs.merger.Merger;

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

ストリームからドキュメントを読み込む方法は?

InputStream からドキュメントを読み込むことで、HTTP アップロード、クラウドバケット、またはメモリ生成されたファイルを扱えます。InputStream はファイル、ネットワークソケット、メモリバッファなどのソースからバイトを読み取る Java の抽象化で、ライブラリがディスク上に一時ファイルを作成せずにデータを処理できます。このアプローチは I/O のオーバーヘッドを削減し、高スループットサービスでのパフォーマンスを向上させます。

手順 1 – 入力ストリームを作成

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

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

Why? ストリームは物理ファイルをバイト列に変換し、Merger がディスクに保存せずに読み取れるようにします。

手順 2 – ストリームで Merger を初期化

Merger merger = new Merger(stream);

Why? ストリームを提供することでインメモリ処理が可能になり、サーバーレス関数や高スループット API に最適です。

結合されたドキュメントを保存する方法(Java)

結合後、結合されたコンテンツを任意の宛先に永続化する必要があります。OutputStream はファイル、ネットワークソケット、またはインメモリバッファなどのターゲットにバイトを書き込む Java の抽象化で、結合ドキュメントの配信方法に柔軟性を提供します。Merger.save に OutputStream を渡すことで、最終的な PDF または DOCX が効率的かつ安全に書き込まれます。

手順 1 – 出力ストリームを定義

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

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

Why? OutputStream は、結合ファイルを書き込む場所(ディスク、レスポンスボディ、クラウドストレージなど)を Java に指示します。

手順 2 – ドキュメントを保存

merger.save(outputStream);

Why? save() は結合を完了し、バッファをフラッシュし、出力が選択された形式の仕様に準拠していることを保証します。

手順 3 – ストリームを閉じる

outputStream.close();

Why? ストリームを閉じることで OS のハンドルが解放され、すべてのバッファ済みバイトが永続化され、ファイル破損を防止します。

大きなドキュメントを扱う方法(Java)

大きな PDF や数ギガバイトの Word ファイルを安易に読み込むと JVM ヒープが枯渇する可能性があります。メモリ使用量を抑えるために、生ストリームを BufferedInputStream と BufferedOutputStream でラップし、ファイルを適切なバッチで処理し、各操作後に Merger.close() を呼び出してネイティブリソースを解放します。ヒープ使用量を監視し、適切な -Xmx フラグ(利用可能メモリの ≤70 % を目安)を設定することで、メモリ不足エラーからさらに保護できます。

実用的な活用例

GroupDocs.Merger は以下のような実務タスクに最適です:

  1. Batch report generation – 毎日の Excel エクスポート(XLSX)と Word サマリー(DOCX)を単一の PDF に結合してアーカイブします。
  2. Dynamic invoice creation – PDF 請求書テンプレートと DOCX の利用規約ドキュメントを結合し、最終的な PDF をクライアントに配信します。
  3. Cross‑platform services – 混合形式のアップロードを受け付ける REST エンドポイントを公開し、結合後に結果をストリームで返却し、一時ファイルを保存しません。

パフォーマンス上の考慮点

  • Memory management – 常にストリームを閉じます;ライブラリは解放が必要なネイティブバッファを使用します。
  • Batch operations – ファイルをグループ化することでディスクシーク回数が減り、スループットが最大 30 % 向上します。
  • Efficient I/O – 10 MB を超えるファイルでは、バッファ付き I/O により処理時間を約半分に短縮できます。

よくある問題と解決策

問題原因対策
FileNotFoundExceptionパスが間違っているか、権限が不足しています絶対/相対パスを確認し、アプリに読み書き権限があることを確認してください
IOException during saveストリームが閉じられていない、またはディスクがいっぱいtry‑with‑resources を使用し、ストリームを閉じ、ディスク容量を確認してください
Memory spikes with large PDFsファイル全体がメモリに読み込まれるバッファ付きストリームに切り替え、より小さなバッチで処理してください

よくある質問

Q: GroupDocs.Merger を使用して異なるファイル形式を結合できますか?
A: はい、ライブラリは 30 以上の形式(DOCX、PDF、PPTX、XLSX、一般的な画像形式)をサポートし、シームレスなクロスフォーマット結合が可能です。

Q: 大きなドキュメントを効率的に扱うには?
A: ファイルストリームを BufferedInputStream/BufferedOutputStream でラップし、バッチで結合し、使用後すぐに各ストリームを閉じます。

Q: パスワード保護されたファイルに対応していますか?
A: もちろんです。Merger インスタンスを作成する際にパスワードを指定すれば、暗号化された PDF や DOCX ファイルを開くことができます。

Q: 商用製品でこのライブラリを使用できますか?
A: はい、有効な GroupDocs ライセンスは評価用透かしなしでフルの本番機能を解放します。

Q: IOException が発生した場合はどうすればよいですか?
A: ファイルパスを再確認し、プロセスに十分な権限があること、ディスク容量を確認し、I/O 呼び出しを try‑catch ブロックでラップするか、try‑with‑resources を使用してください。

リソース


最終更新日: 2026-10-11
テスト環境: GroupDocs.Merger latest version (as of 2026)
作者: GroupDocs

関連チュートリアル