如何使用 Java 合併兩個 PDF 檔案

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

將 PDF 文件合併為單一檔案,是文件管理流程中常見的需求。 彙整月報、組裝多頁表單以及捆綁發票,皆為常見的應用情境。 IronPDF for Java 將該操作簡化為單一方法呼叫:PdfDocument.merge()。 向其傳入兩個或更多已載入的文件,您將獲得一個合併後的 PDF 檔案,其中所有格式、字型及嵌入的圖片皆會完全保留原樣。

本指南將逐步說明四種最實用的合併情境:結合動態生成的 PDF、合併磁碟中的現有檔案、透過基於清單的方法處理較大的批次,以及控制最終文件的頁面順序。

快速入門:在 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 import com.ironsoftware.IronPdf.PdfDocument; import java.nio.file.Paths;

// 從磁碟載入兩個現有的 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. 將 IronPDF 加入為 Maven 或 Gradle 依賴項
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 檔案有哪些先決條件?

在編寫任何程式碼之前,請確認以下四項要求已就緒:

1. 已安裝 **Java 8 或更高版本**,並設定 `JAVA_HOME` 環境變數。 請參閱 [Java 下載與安裝指南](https://www.java.com/en/download/help/download_options.html#windows),以獲取特定平台的操作說明。
2. **一款 Java 整合開發環境**(本指南使用 [JetBrains IntelliJ IDEA](https://www.jetbrains.com/idea/download/#section=windows),但 [Eclipse](https://www.eclipse.org/downloads/) 同樣適用)。
3. 在您的 IDE 中設定 **Maven 或 Gradle**。如果您是 Maven 的新手,[JetBrains](https://www.jetbrains.com/idea/guide/tutorials/marco-codes-maven/installing-maven/) 的 [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 即可開始使用。)}]
## 如何安裝 IronPDF for Java? IronPDF for Java 透過 [Maven Central](https://search.maven.org) 發行,因此只需幾行設定即可將其加入您的專案中。 無需手動下載 JAR 檔案。 開啟 IntelliJ IDEA,並透過**"檔案"&gt;"新增"&gt;"專案"**建立新的 Maven 專案,並選擇 Maven 作為建置系統。 ![選取 Maven 後的 IntelliJ IDEA](/static-assets/ironpdf-java/howto/how-to-merge-two-pdf-files-java-tutorial/how-to-merge-two-pdf-files-java-tutorial-1.webp) 為專案命名,然後按一下"**完成**"。 IntelliJ 會在生成專案結構後自動開啟 `pom.xml`。 ![IDE 中的](/static-assets/ironpdf-java/howto/how-to-merge-two-pdf-files-java-tutorial/how-to-merge-two-pdf-files-java-tutorial-2.webp) 請在 `pom.xml` 的 `<dependencies>` 區段內加入以下依賴項區塊。 請務必隨時查閱 [Maven Central 以確認 IronPDF 的最新版本](https://central.sonatype.com/artifact/com.ironsoftware/ironpdf),並將版本字串替換為當前版本。 ```xml {title=&quot;pom.xml: IronPDF 依賴項&quot;} //: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 顯示包含 IronPDF 專案配置與 Java 10 編譯器設定的 Maven pom.xml 檔案

儲存 pom.xml 後,編輯器右上角會出現一個小型同步圖示。 點擊此處以觸發 Maven 依賴項的下載。 根據您的連線速度,此過程需時 15 秒至數分鐘,並會下載 IronPDF 以及所有必要的間接依賴項。

Maven pom.xml 檔案,顯示 IronPDF Java 依賴項的 groupId、artifactId 和 version 標籤設定

提示Gradle 使用者可改為在 implementation 'com.ironsoftware:ironpdf:2024.9.1' 依賴項區塊中加入 build.gradle。 (同一個 Maven Central 套件可適用於兩種建置系統。

如何建立和合併新的 PDF 文件?

當原始內容於執行階段生成(源自 HTML 範本、資料庫記錄或使用者輸入)時,工作流程是先將每段內容渲染為 PdfDocument,然後再將它們合併。

PdfDocument.renderHtmlAsPdf() 能在記憶體中將 HTML 字串轉換為 PDF。 每次呼叫都會產生一個獨立的文件物件,該物件可直接傳遞給 merge(),無需將任何中間檔案寫入磁碟。

在合併前渲染 HTML 區段

以下範例將兩個獨立的 HTML 字串載入記憶體,並將其合併為單一文件。 此模式非常適用於報表生成器、發票Builder工具,以及任何透過程式碼從範本或資料庫資料列組裝內容的系統。

```java {title="合併動態生成的 PDF"} //:path=/static-assets/pdf/content-code-examples/how-to/how-to-merge-two-pdf-files-java-tutorial/merge-html-pdfs.java import com.ironsoftware.IronPdf.PdfDocument; import java.io.IOException; import java.nio.file.Paths;

public class Main { public static void main(String[] args) throws IOException { // 各文件區段的 HTML 內容 String htmlA = "

First part of the report.

"; String htmlB = "

Second part of the report.

";

    // 將每個 HTML 字串在記憶體中渲染為 PDF —— 無需寫入磁碟
    PdfDocument pdfA = PdfDocument.renderHtmlAsPdf(htmlA);
    PdfDocument pdfB = PdfDocument.renderHtmlAsPdf(htmlB);

    // 將兩份文件合併為單一的整合 PDF 檔案
    PdfDocument merged = PdfDocument.merge(pdfA, pdfB);

    // 儲存合併後的結果
    merged.saveAs(Paths.get(&quot;assets/merged.pdf&quot;));
}

}


合併後的輸出會依照參數順序串接頁面:`pdfA` 頁面會出現在 `pdfB` 頁面之前。 如需 HTML 渲染引擎的完整操作指南,請參閱 [IronPDF for Java](https://ironpdf.com/java/tutorials/html-to-pdf/) 的 [HTML 轉 PDF 教學](https://ironpdf.com/java/tutorials/html-to-pdf/)。

![顯示已成功合併文件的 PDF 檢視器 - 左側為第一個 PDF,右側為帶有導覽控制項的第二個 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、網頁字型及內嵌圖片——輸出效果與瀏覽器顯示完全一致。
## 如何合併現有的 PDF 檔案? 從磁碟載入 PDF 並將其合併的流程遵循相同模式,使用 `PdfDocument.fromFile()` 將每個檔案讀入記憶體,然後將物件傳遞給 `merge()`。 此方法適用於任何已存在原始文件的工作流程——例如掃描的發票、匯出的報告,或從外部系統接收的檔案。 IronPDF 會讀取 PDF 結構並合併頁面,同時不更改原始來源檔案。 ### 從磁碟載入與合併檔案 ```java {title=&quot;合併磁碟中的現有 PDF 檔案&quot;} //:path=/static-assets/pdf/content-code-examples/how-to/how-to-merge-two-pdf-files-java-tutorial/merge-existing-files.java import com.ironsoftware.IronPdf.PdfDocument; import java.io.IOException; import java.nio.file.Paths; public class Main { public static void main(String[] args) throws IOException { // 從磁碟載入兩個現有的 PDF 檔案 PdfDocument pdfA = PdfDocument.fromFile(Paths.get(&quot;assets/invoice-january.pdf&quot;)); PdfDocument pdfB = PdfDocument.fromFile(Paths.get(&quot;assets/invoice-february.pdf&quot;)); // 合併為單一文件 PdfDocument merged = PdfDocument.merge(pdfA, pdfB); // 寫入合併後的輸出內容 -- 原始內容保持不變 merged.saveAs(Paths.get(&quot;assets/invoices-q1.PDF&quot;)); } }

merge() 呼叫會產生一個新的 PdfDocument 物件; 既不修改 pdfA,也不修改 pdfB。 若要執行反向操作(將頁面重新匯出),請參閱 Java 的分割 PDF 範例

顯示已合併文件的 PDF 檢視器,其中包含獎項特色頁面與維基百科首頁,展示成功的 PDF 合併結果

fromFile() 支援哪些檔案格式?

PdfDocument.fromFile() 支援標準的 .pdf 檔案格式。 對於需要先轉換再合併的文件(例如 HTML 檔案、圖像檔案或其他格式),請先使用適當的渲染方法 (renderHtmlAsPdf(), renderUrlAsPdf()) 產生 PdfDocument,再將該物件傳遞給 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

查看案例研究

如何合併兩個以上的 PDF 檔案?

PdfDocument.merge() 接受可變長度的參數清單,因此語法上合併三或四個文件與合併兩個文件並無差異。 對於動態大小的集合(即 PDF 數量在執行時才確定),傳遞 PdfDocument[] 陣列是更簡潔的做法。

可變參數與基於清單的模式

以下兩種寫法會產生相同結果。 當檔案數量固定時,請選擇直接使用 varargs 調用;若需透過程式碼建立集合,則採用"清單轉陣列"模式:

```java {title="合併四個 PDF 檔案 -- 可變參數與清單方法"} //:path=/static-assets/pdf/content-code-examples/how-to/how-to-merge-two-pdf-files-java-tutorial/merge-multiple-files.java import com.ironsoftware.IronPdf.PdfDocument; import java.io.IOException; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List;

public class Main { public static void main(String[] args) throws IOException { // 載入四個現有的 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:直接使用可變參數呼叫 -- 適用於檔案數量固定的情況
    PdfDocument merged = PdfDocument.merge(pdfA, pdfB, pdfC, pdfD);
    merged.saveAs(Paths.get(&quot;assets/full-document.pdf&quot;));

    // 模式 2:先建立清單 -- 適用於檔案數量動態變動的情況
    List<pdfdocument> pdfList = new ArrayList&lt;&gt;();</pdfdocument>
    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(&quot;assets/full-document-v2.pdf&quot;));
}

}


重要輸出頁面的順序須與參數順序完全一致。 若文件順序至關重要(例如書籍的章節或表單的順序區塊),請在呼叫 `merge()`.
之前先對清單進行排序。)}] ### 如何掃描目錄並合併所有 PDF 檔案? 當在編譯時無法預知輸入檔案集時,從目錄中讀取檔案路徑是列表模式的自然延伸。 以下程式碼片段會從資料夾中收集所有 `.pdf` 檔案,依檔案名稱排序,並按順序合併這些檔案。 ```java {title=&quot;掃描目錄並合併所有 PDF 檔案&quot;} //:path=/static-assets/pdf/content-code-examples/how-to/how-to-merge-two-pdf-files-java-tutorial/merge-directory-pdfs.java import com.ironsoftware.IronPdf.PdfDocument; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import 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(&quot;assets/monthly-reports&quot;); // 從目錄中收集所有 PDF 檔案,並按檔案名稱排序 List<path> pdfPaths = Files.list(inputDir)</path> .filter(p -&gt; p.toString().endsWith(&quot;.pdf&quot;)) .sorted(Comparator.comparing(Path::getFileName)) .collect(Collectors.toList()); // 將每個檔案載入至 PdfDocument List<pdfdocument> documents = new ArrayList&lt;&gt;();</pdfdocument> for (Path path : pdfPaths) { documents.add(PdfDocument.fromFile(path)); } // 合併所有文件並儲存結果 PdfDocument combined = PdfDocument.merge( documents.toArray(new PdfDocument[0]) ); combined.saveAs(Paths.get(&quot;assets/annual-report.PDF&quot;)); } }

此模式可處理任何資料夾大小。對於大型批次(50 個以上檔案),建議分批載入並合併,以限制記憶體使用高峰,而非同時載入所有檔案。

提示若您的檔案採用日期命名規則(例如 2024-02.pdf),請使用自訂 Comparator 來排序 pdfPaths。 (對以零墊的月份數字而言,按字母順序排序是自然的做法。

合併後,您可能需要進一步潤飾整合後的文件。 IronPDF for Java 支援新增自訂頁首與頁尾套用浮水印,以及壓縮最終輸出檔案,以在交付前縮小檔案大小。

Java 中的 PDF 合併下一步該怎麼做?

本指南涵蓋了使用 IronPDF for Java 的四種合併模式:在合併前將 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,使用Java IDE如IntelliJ IDEA或Eclipse,配置Maven或Gradle,並將IronPDF依賴新增至專案的pom.xmlbuild.gradle文件中。

在Java中可以一次合併超過兩個PDF文件嗎?

可以。PdfDocument.merge()接受可變長度的引數清單,因此您可以直接傳遞三個或更多個PdfDocument物件。對於動態集合,使用list.toArray(new PdfDocument[0])List<PdfDocument>轉換為陣列,然後將之傳給merge()

如何在Java中控制合併PDF時的頁面順序?

頁面在輸出中的順序與傳給merge()方法的引數順序相同。如果您是動態構建清單,在呼叫merge()前對它進行排序——例如,按檔名或文件中元資料裡的日期欄位進行排序。

如何合併從HTML生成的PDF在Java中?

為每個HTML區段呼叫PdfDocument.renderHtmlAsPdf(htmlString)以在記憶體中生成PdfDocument,然後將這些物件傳給PdfDocument.merge()。無需將中間文件寫入磁碟。

合併後在Java中可以進行哪些其他PDF操作?

合併後,IronPDF for Java支持新增標題和頁腳、自定義浮水印、壓縮輸出以減少文件大小、新增數位簽名、提取或刪除個別頁面,以及填寫表單欄位。

Darrius Serrant
全端軟體工程師(WebOps)

Darrius Serrant擁有邁阿密大學的電腦科學學士學位,並在Iron Software擔任全端WebOps行銷工程師。從小就對程式設計有興趣,他認為計算既神秘又易於理解,成為創意和問題解決的完美媒介。

在Iron Software,Darrius喜歡創造新事物並簡化複雜的概念,使其更易於理解。作為我們的常駐開發人員之一,他還志願教學,將他的專業知識傳授給下一代。

對Darrius來說,他的工作是有意義的,因為它有價值且對社會有真正的影響。

準備好開始了嗎?
版本: 2026.6 剛剛發布
Still Scrolling Icon

還在滾動嗎?

想要快速證明嗎?
運行範例 觀看您的HTML變成PDF。