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 からダウンロードし、手動でプロジェクトのクラスパスに追加します。
ライセンス取得手順
- Free trial – クレジットカードなしでコア機能を試せます。
- Temporary license – temporary license page(temporary license page)で短期キーをリクエストします。
- 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 は以下のような実務タスクに最適です:
- Batch report generation – 毎日の Excel エクスポート(XLSX)と Word サマリー(DOCX)を単一の PDF に結合してアーカイブします。
- Dynamic invoice creation – PDF 請求書テンプレートと DOCX の利用規約ドキュメントを結合し、最終的な PDF をクライアントに配信します。
- 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 を使用してください。
リソース
- ドキュメント: GroupDocs Documentation
- API リファレンス: API Reference Guide
- ライブラリのダウンロード: GroupDocs Downloads
- ライセンス購入: Buy GroupDocs License
- 無料トライアル & 一時ライセンス: Try Out GroupDocs と Request a Temporary License
- サポート: GroupDocs Support Forum
最終更新日: 2026-10-11
テスト環境: GroupDocs.Merger latest version (as of 2026)
作者: GroupDocs