Javaを使用して2つのPDFファイルをマージする方法

This article was translated from English: Does it need improvement?
Translated
View the article in English

ドキュメント管理パイプラインでは、PDFドキュメントを単一ファイルにマージすることが頻繁に要求されます。 月次報告書の統合、複数の引数からなるフォームの組み立て、請求書の束ねなどは、すべて一般的なシナリオです。 IronPDF for Java は、その操作を単一のメソッド呼び出し PdfDocument.merge() に簡略化します。 2つ以上の読み込まれたドキュメントを渡すと、すべての書式、フォント、埋め込み画像がそのまま保持された1つの結合されたPDFが返されます。

このガイドでは、動的に生成されたPDFを結合する、ディスクから既存のファイルをマージする、リストベースのアプローチで大規模なバッチを処理する、最終ドキュメントのページ順序を制御する、という4つの最も実用的なマージシナリオを説明します。

クイックスタート: Java で PDF を結合する

  1. IronPDF 依存性をあなたの Maven pom.xml に追加します。
  2. com.ironsoftware.ironpdf.PdfDocument をインポートします
  3. PdfDocument.fromFile() を使用してソースファイルを読み込みます
  4. PdfDocument.merge(pdf1, pdf2) を呼び出して、結合されたドキュメントを生成します
  5. merged.saveAs() で結果を保存します

```java {title="クイックスタート: 基本的なPDFマージ"} //:path=/static-assets/pdf/content-code-examples/how-to/how-to-merge-two-pdf-files-java-tutorial/quickstart-merge.java インポート com.ironsoftware.ironPdf.PdfDocument; インポート java.nio.file.Paths;

// ディスクから2つの既存のPDFドキュメントを読み込みます PdfDocument pdf1 = PdfDocument.fromFile(Paths.get("document1.pdf")); PdfDocument pdf2 = PdfDocument.fromFile(Paths.get("document2.pdf"));

// 単一のドキュメントにマージします; 書式設定や画像が保持されます PdfDocument merged = PdfDocument.merge(pdf1, pdf2);

// 結合されたPDFをディスクに書き込みます merged.saveAs(Paths.get("merged-output.pdf"));


<div class="hsg-featured-snippet">
<h3>最小限のワークフロー(5ステップ)</h3>

1. MavenまたはGradle依存関係としてIronPDFを追加します
2. `com.ironsoftware.ironpdf.PdfDocument` をインポートします
3. 各PDFを `PdfDocument.fromFile(Paths.get("file.pdf"))` で読み込みます
4. `PdfDocument.merge(pdf1, pdf2)` を呼び出すか、バッチ処理のために `PdfDocument[]` 配列を渡します
5. 結合した結果を `merged.saveAs(Paths.get("output.pdf"))` で保存します
</div>

## JavaでPDFをマージするための前提条件は何ですか?

コードを書く前に、次の4つの要件が揃っていることを確認してください:

1. **Java 8 またはそれ以上** がインストールされ、`JAVA_HOME` 環境変数が設定されています。 プラットフォーム固有の手順については、[Javaダウンロードおよびインストールガイド](https://www.java.com/en/download/help/download_options.html#windows)を参照してください。
2. **Java IDE** (このガイドでは[JetBrains IntelliJ IDEA](https://www.jetbrains.com/idea/download/#section=windows) を使用しますが、[Eclipse](https://www.eclipse.org/downloads/)も同様に使用できます)。
3. **MavenまたはGradle** がIDEに設定されている。Mavenに不慣れな場合、[JetBrains Maven インストールガイド](https://www.jetbrains.com/idea/guide/tutorials/marco-codes-maven/installing-maven/)がIntelliJでのセットアップをカバーしています。
4. **IronPDFライブラリ** がプロジェクト依存関係として追加されています。 [IronPDF for Java インストールガイド](https://ironpdf.com/java/docs/)は、MavenとGradleの両方のアプローチを説明しています。

ご注意IronPDF for JavaはJava 8以降をサポートしています。 新しいJDKにプロジェクトをアップデートする必要はなく、すぐに使用できます。)]}
## Java版IronPDFをインストールするには? IronPDF for Javaは[Maven Central](https://search.maven.org)から配布されているため、プロジェクトに追加するのに数行の設定だけで済みます。 手動でJARファイルをダウンロードする必要はありません。 IntelliJ IDEAを開き、**File -> New -> Project**から新しいMavenプロジェクトを作成し、ビルドシステムとしてMavenを選択します。 ![Mavenが選択されたIntelliJ IDEAの新規プロジェクトダイアログがJavaプロジェクト作成用のアーキタイプオプションを表示](/static-assets/ironpdf-java/howto/how-to-merge-two-pdf-files-java-tutorial/how-to-merge-two-pdf-files-java-tutorial-1.webp) プロジェクトに名前を付け、**Finish**をクリックします。 プロジェクト構造が生成されると IntelliJ は `pom.xml` を自動的に開きます。 ![IDEの新規プロジェクトダイアログにIronPDFプロジェクト名とデスクトップロケーションパスが設定されている](/static-assets/ironpdf-java/howto/how-to-merge-two-pdf-files-java-tutorial/how-to-merge-two-pdf-files-java-tutorial-2.webp) `<dependencies>` セクション内に次の依存性ブロックを追加してください。 [Maven Centralで最新のIronPDFリリースを常にチェック](https://central.sonatype.com/artifact/com.ironsoftware/ironpdf)して、バージョン文字列を最新のものに置き換えます。 ```xml {title="pom.xml: IronPDF Dependency"} //:path=/static-assets/pdf/content-code-examples/how-to/how-to-merge-two-pdf-files-java-tutorial/pom-dependency.xml <dependency> <groupId>com.ironsoftware</groupId> <artifactId>ironpdf</artifactId> <version>2024.9.1</version> </dependency>

IntelliJ IDEAがMavenのpom.xmlを表示し、IronPDFプロジェクトの設定とJava 10のコンパイラ設定を表示

pom.xml を保存すると、エディタの右上に小さな同期アイコンが表示されます。 それをクリックしてMaven依存関係のダウンロードを開始します。 接続速度に応じて、IronPDFと必要なすべての伝達依存関係のダウンロードには15秒から数分かかります。

Mavenのpom.xmlファイルがIronPDF Java依存性設定をgroupId、artifactId、およびバージョンタグで表示

ヒントGradle ユーザーは、implementation 'com.ironsoftware:ironpdf:2024.9.1'build.gradle 依存関係ブロックに追加することもできます。 同じMaven Centralアーティファクトは、両方のビルドシステムで機能します。)]}

新しいPDFドキュメントを作成して結合するにはどうすればよいですか?

ソースコンテンツが実行時に生成されるとき (HTMLテンプレート、データベースのレコード、またはユーザー入力から)、ワークフローは最初に個々のピースを PdfDocument としてレンダリングし、それから結合することです。

PdfDocument.renderHtmlAsPdf() は HTML 文字列をメモリ内の PDF に変換します。 各呼び出しは、独立したドキュメントオブジェクトを生成し、ディスクに中間ファイルを書き込むことなく merge() に直接渡すことができます。

マージ前にHTMLセクションをレンダリングする

以下の例では、2つの別々のHTML文字列をメモリ内でレンダリングし、それらを1つのドキュメントに結合します。 このパターンは、レポートジェネレーター、請求書ビルダー、テンプレートやデータベース行からプログラムでコンテンツを組み立てるシステムに最適です。

```java {title="動的に生成されたPDFを結合する"} //:path=/static-assets/pdf/content-code-examples/how-to/how-to-merge-two-pdf-files-java-tutorial/merge-html-pdfs.java インポート com.ironsoftware.ironPdf.PdfDocument; インポート java.io.IOException; インポート java.nio.file.Paths;

public class Main { public static void main(String[] args) throws IOException { {. // 各ドキュメントセクションのHTMLコンテンツ String htmlA = "

レポートの最初の部分。

"; String htmlB = "

レポートの2番目の部分。

";

// 各HTML文字列をメモリ内でPDFにレンダリング -- ディスクへの書き込み不要 PdfDocument pdfA = PdfDocument.renderHtmlAsPdf(htmlA); PdfDocument pdfB = PdfDocument.renderHtmlAsPdf(htmlB);

// 両方のドキュメントを1つの結合されたPDFにマージ PdfDocument merged = PdfDocument.merge(pdfA, pdfB);

// マージされた結果を保存 merged.saveAs(Paths.get("assets/merged.pdf")); } }


結合された出力は引数の順序でページを連結します:`pdfA` ページが `pdfB` ページの前に現れます。 HTMLレンダリングエンジンの完全なウォークスルーについては、[IronPDF HTML to PDF チュートリアル for Java](https://ironpdf.com/java/tutorials/html-to-pdf/) を参照してください。

![PDFビューアが、正常にマージされたドキュメントを表示 - 左に最初のPDF、右に2番目のPDFとナビゲーションコントロールを表示](/static-assets/ironpdf-java/howto/how-to-merge-two-pdf-files-java-tutorial/how-to-merge-two-pdf-files-java-tutorial-5.webp)

`renderHtmlAsPdf()` 呼び出しはChromiumベースのレンダリングエンジンを使用します。完全なCSS、Webフォント、インライン画像がすべてサポートされており、出力はブラウザに表示されるものと一致します。

## 既存のPDFファイルを結合するにはどうすればよいですか?

ディスクからPDFを読み込んで結合する場合は、同じパターンに従い、それぞれのファイルをメモリに読み込んでからオブジェクトを `merge()` に渡すために `PdfDocument.fromFile()` を使用します。

この方法は、ソースドキュメントがすでに存在する ワークフローに適しています -- スキャンされた請求書、エクスポートされたレポート、外部システムから受け取ったファイルなど。 IronPDFはPDF構造を読み込み、オリジナルのソースファイルを変更せずにページをマージします。

### ディスクからファイルを読み込んで結合する

```java {title="既存のPDFファイルをディスクからマージする"}
//:path=/static-assets/pdf/content-code-examples/how-to/how-to-merge-two-pdf-files-java-tutorial/merge-existing-files.java
インポート com.ironsoftware.ironPdf.PdfDocument;
インポート java.io.IOException;
インポート java.nio.file.Paths;

public class Main {
    public static void main(String[] args) throws IOException { {.
// ディスクから2つの既存のPDFファイルを読み込みます
PdfDocument pdfA = PdfDocument.fromFile(Paths.get("assets/invoice-january.pdf"));
PdfDocument pdfB = PdfDocument.fromFile(Paths.get("assets/invoice-february.pdf"));

// 1つのドキュメントに結合
PdfDocument merged = PdfDocument.merge(pdfA, pdfB);

// マージされた出力を書き込み -- オリジナルは変更されません
merged.saveAs(Paths.get("assets/invoices-q1.pdf"));
    }
}

merge() 呼び出しは新しい PdfDocument オブジェクトを生成します; pdfApdfB のどちらも変更されません。 操作を元に戻す -- ページを元に戻すには、Java用PDF分割例を参照してください。

PDFビューアがマージされたドキュメントを表示し、賞機能ページとWikipediaのホームページが正常なPDFマージを示す

fromFile() はどのファイル形式を受け入れますか?

PdfDocument.fromFile() は標準の .pdf ファイルを受け入れます。 マージ前に変換が必要なドキュメント (HTMLファイル、画像ファイル、その他のフォーマットなど) の場合、PdfDocument を生成するために最初に適切なレンダリングメソッド (renderHtmlAsPdf(), renderUrlAsPdf()) を使用し、そのオブジェクトを merge() に渡します。

ヒントfromFile() に渡されたパスは絶対パスでも作業ディレクトリに対する相対パスでもかまいません。 クロスプラットフォームの互換性のために Paths.get() (java.nio.file から) を使用することが推奨されています。
})}]

Icon Quote related to fromFile() はどのファイル形式を受け入れますか?

私のお気に入りのこの種のライブラリはIronPDFです。PDFファイルの迅速で効率的な操作が可能です。また、PDF/A形式へのエクスポートやPDF文書へのデジタル署名といった多くの貴重な機能も備えています。

Milan Jovanovic related to fromFile() はどのファイル形式を受け入れますか?

Milan Jovanovic

Microsoft MVP

ケーススタディを見る
Icon Quote related to fromFile() はどのファイル形式を受け入れますか?

IronOCRのおかげで私たちは年間$40,000を手作業の処理から節約し、生産性を向上させ、高影響のタスクにリソースを充てることができます。非常にお勧めします。

Brent Matzelle related to fromFile() はどのファイル形式を受け入れますか?

Brent Matzelle

最高技術責任者, OPYN

ケーススタディを見る
Icon Quote related to fromFile() はどのファイル形式を受け入れますか?

IronSuiteは私たちの業務において重要な役割を果たしています。これらは、フロアプランの作成や在庫管理の改善を含め、ビジネス全体の効率を向上させるツールです。

David Jones related to fromFile() はどのファイル形式を受け入れますか?

David Jones

リードソフトウェアエンジニア、Agorus Build

ケーススタディを見る

2つ以上の PDF ファイルをマージするにはどうすればよいですか?

PdfDocument.merge() は可変長の引数リストを受け入れるため、3つまたは4つのドキュメントを結合することは、2つを結合することと文法的に何ら変わりはありません。 実行時に PDF の数が決定される動的サイズのコレクションに対しては、PdfDocument[] 配列を渡すことがよりクリーンなアプローチです。

Varargsとリストベースのパターン

以下の2つのパターンは同一の結果を生成します。 ファイル数が固定されている場合は直接varargs呼び出しを選択し、コレクションをプログラム的に構築する場合はリストから配列へのパターンを使用します:

```java {title="4つのPDFを結合する -- Varargs と Listのアプローチ"} //:path=/static-assets/pdf/content-code-examples/how-to/how-to-merge-two-pdf-files-java-tutorial/merge-multiple-files.java インポート com.ironsoftware.ironPdf.PdfDocument; インポート java.io.IOException; インポート java.nio.file.Paths; import java.util.ArrayList; import java.util.List;

public class Main { public static void main(String[] args) throws IOException { {. // 4つの既存のPDFファイルをロード PdfDocument pdfA = PdfDocument.fromFile(Paths.get("assets/chapter-1.pdf")); PdfDocument pdfB = PdfDocument.fromFile(Paths.get("assets/chapter-2.pdf")); PdfDocument pdfC = PdfDocument.fromFile(Paths.get("assets/chapter-3.pdf")); PdfDocument pdfD = PdfDocument.fromFile(Paths.get("assets/chapter-4.pdf"));

// パターン1: 直接varargs呼び出し -- ファイル数が固定されている場合に最適 PdfDocument merged = PdfDocument.merge(pdfA, pdfB, pdfC, pdfD); merged.saveAs(Paths.get("assets/full-document.pdf"));

// パターン2: 先にリストを構築 -- ファイル数が動的な場合に推奨 List pdfList = new ArrayList<>(); pdfList.add(pdfA); pdfList.add(pdfB); pdfList.add(pdfC); pdfList.add(pdfD);

PdfDocument mergedFromList = PdfDocument.merge( pdfList.toArray(new PdfDocument[0]) ); mergedFromList.saveAs(Paths.get("assets/full-document-v2.pdf")); } }


重要出力のページ順序は引数の順序と完全に一致します。 ドキュメントの順序が重要である場合 -- 例えば、本の章や順序付けされたフォームセクションの場合 --、`merge()` を呼び出す前にリストをソートしてください。
### ディレクトリをスキャンしてすべてのPDFをマージするにはどうすればよいですか? コンパイル時には入力ファイルセットが不明な場合、ディレクトリからファイルパスを読み取るのはリストパターンの自然な拡張です。 以下のスニペットはすべての `.pdf` ファイルをフォルダーから収集し、ファイル名でソートして順番にマージします。 ```java {title="ディレクトリをスキャンしてすべてのPDFファイルをマージする"} //:path=/static-assets/pdf/content-code-examples/how-to/how-to-merge-two-pdf-files-java-tutorial/merge-directory-pdfs.java インポート com.ironsoftware.ironPdf.PdfDocument; インポート java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; インポート java.nio.file.Paths; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) throws IOException { {. Path inputDir = Paths.get("assets/monthly-reports"); // ディレクトリからすべてのPDFファイルを収集し、ファイル名でソート List<Path> pdfPaths = Files.list(inputDir) .filter(p -> p.toString().endsWith(".pdf")) .sorted(Comparator.comparing(Path::getFileName)) .collect(Collectors.toList()); // 各ファイルをPdfDocumentにロード List<PdfDocument> documents = new ArrayList<>(); for (Path path : pdfPaths) { documents.add(PdfDocument.fromFile(path)); } // すべてのドキュメントをマージして結果を保存 PdfDocument combined = PdfDocument.merge( documents.toArray(new PdfDocument[0]) ); combined.saveAs(Paths.get("assets/annual-report.pdf")); } }

このパターンはフォルダの任意のサイズに対応します。大規模なバッチ(50以上のファイル)には、すべてのファイルを同時に読み込むのではなく、メモリ使用量のピークを制限するためにチャンクごとに読み込みとマージを検討してください。

ヒント日付に基づく命名スキーム (例:2024-01.pdf, 2024-02.pdf) に従うファイルの場合、カスタム Comparator を使用して pdfPaths をソートします。 ゼロパディングされた月番号でアルファベット順ソートが自然に機能します。

マージ後、結合されたドキュメントをさらに洗練したいかもしれません。 IronPDF for Javaはカスタムヘッダーとフッターの追加透かしの適用ファイルサイズを縮小するための最終出力の圧縮をサポートしています。

JavaでのPDFマージの次のステップは何ですか?

このガイドでは、IronPDF for Javaを使用した4つのマージパターンを扱いました:HTMLコンテンツをPDFにレンダリングしてからマージする、ディスクから既存のファイルをロードして組み合わせる、リストで可変長のドキュメントバッチを処理する、自動的にPDFをマージするためにディレクトリをスキャンする。 すべての場合において、PdfDocument.merge() はソースのフォーマットを保持します -- フォント、画像、およびページレイアウトは、出力に追加の設定を必要とせずに引き継がれます。

IronPDF for Javaができることをさらに探求するには、Java マージ PDF チュートリアルで追加のパターンを確認するか、JavaでPDFにデジタル署名を追加する方法を確認して、結合された出力に署名を追加してください。 ページレベルの操作 -- 再注文、削除、個々のページの抽出 -- については、特定ページを削除する例を参照してください

自分のプロジェクトで試してみますか? 無料トライアルを開始 -- クレジットカードは必要ありません。 展開の準備ができたら、チームやエンタープライズ用途のライセンスオプションを確認してください。

よくある質問

JavaでPDFファイルをマージする最も簡単な方法は何ですか?

最も簡単な方法はIronPDF for JavaのPdfDocument.merge(pdf1, pdf2)です。PdfDocument.fromFile(Paths.get("file.pdf"))で各ファイルを読み込み、両方をmerge()に渡し、結果をmerged.saveAs()で保存します。

JavaでIronPDFを使用してPDFをマージするための前提条件は何ですか?

Java 8以上が必要で、JAVA_HOMEが設定され、IntelliJ IDEAやEclipseなど for Java IDEがあり、MavenまたはGradleが構成され、プロジェクトのpom.xmlまたはbuild.gradleファイルにIronPDF依存関係が追加されています。

Javaで一度に2つ以上のPDFファイルをマージできますか?

はい。PdfDocument.merge()は、可変長の引数リストを受け入れるので、3つ以上のPdfDocumentオブジェクトを直接渡すことができます。動的コレクションの場合、list.toArray(new PdfDocument[0])を使用してList<PdfDocument>を配列に変換し、それをmerge()に渡します。

JavaでPDFをマージする際にページ順序を制御するにはどうすればよいですか?

出力のページはmerge()に渡された引数と同じ順序で表示されます。リストを動的にビルドしている場合は、merge()を呼び出す前に、それをソートしてください。たとえば、ファイル名やドキュメントメタデータ内の日付フィールドでソートします。

JavaでHTMLから生成されたPDFをマージするにはどうすればよいですか?

PdfDocument.renderHtmlAsPdf(htmlString)を各HTMLセクションに対して呼び出して、メモリ内のPdfDocumentを生成し、これらのオブジェクトをPdfDocument.merge()に渡します。中間ファイルはディスクに書き込まれません。

Javaでマージ後に実行できる追加のPDF操作は何ですか?

マージ後、IronPDF for Javaは、ヘッダーとフッターの追加、カスタム透かしの適用、ファイルサイズを削減するための出力の圧縮、デジタル署名の追加、個々のページの抽出や削除、フォームフィールドの記入をサポートしています。

Darrius Serrant
フルスタックソフトウェアエンジニア(WebOps)

Darrius Serrantは、マイアミ大学でコンピュータサイエンスの学士号を取得し、Iron SoftwareでフルスタックWebOpsマーケティングエンジニアとして働いています。若い頃からコーディングに惹かれ、コンピューティングを神秘的かつアクセス可能なものとし、創造性と問題解決のための完璧な媒体と考えていました。

Iron Softwareでは、新しいものを創造することと、複雑なコンセプトをより理解しやすくすることを楽しんでいます。Resident Developerの一人として、次世代に専門知識を共有するために、学生を教えることにも志願しました。

Darriusにとって、その仕事は価値があり、実際の影響があるため、満足感があります。

準備はできましたか?
バージョン: 2026.6 リリースされたばかり
Still Scrolling Icon

まだスクロールしていますか?

すぐに証拠が欲しいですか?
サンプルを実行するHTML が PDF に変換されるのを確認します。