如何在 Java 中合併 PDF 與 DOCX 並將 DOCX 轉換為 PDF
在本教學中,您將學習如何使用 GroupDocs.Merger for Java 合併 PDF 與 DOCX 檔案,以及 將 DOCX 轉換為 PDF。您將看到如何從串流載入文件、處理多吉位元組的資料負載,並產生可儲存至磁碟、傳送給客戶端或存放於雲端儲存的單一輸出。完成後,您將擁有一段可直接使用的程式碼片段,適用於任何 Web 服務、批次作業或微服務架構。
快速解答
- 在 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 MB 的檔案而無需將整個文件載入記憶體,並保證頁碼、頁首與頁尾在合併輸出中保持完整。
前置條件
- GroupDocs.Merger for Java 函式庫
- Java 8+(JDK 8 或更高)
- Maven 或 Gradle 用於相依管理
- IntelliJ IDEA 或 Eclipse 等 IDE
- 有效的 GroupDocs 授權(供生產使用),提供免費試用版
設定 GroupDocs.Merger for 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。
取得授權步驟
- 免費試用 – 無需信用卡即可探索核心功能。
- 臨時授權 – 在 臨時授權頁面(temporary license page)申請短期金鑰。
- 完整購買 – 取得無限制的生產授權以用於商業部署。您可直接從 GroupDocs(GroupDocs)購買完整授權。
基本初始化
Merger 類別是所有操作的入口點,代表一次合併會話。加入函式庫後,建立 Merger 實例:
import com.groupdocs.merger.Merger;
// Initialize GroupDocs Merger
erMerger = new Merger("YOUR_DOCUMENT_DIRECTORY/SAMPLE_DOCX");
如何從串流載入文件?
從 InputStream 載入文件可讓您處理來自 HTTP 上傳、雲端儲存桶或記憶體產生的檔案。InputStream 是 Java 的抽象,用於從檔案、網路 socket 或記憶體緩衝區等來源讀取位元組,使函式庫能在不產生暫存檔的情況下處理資料。此方式可減少 I/O 開銷,提升高吞吐量服務的效能。
步驟 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 的抽象,用於將位元組寫入檔案、網路 socket 或記憶體緩衝區等目標,讓您靈活決定合併文件的傳遞方式。將 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 % 可用記憶體)可進一步防止記憶體不足錯誤。
實務應用
GroupDocs.Merger 非常適合以下實務任務:
- 批次報表產生 – 將每日的 Excel 匯出 (XLSX) 與 Word 摘要 (DOCX) 合併成單一 PDF 以供存檔。
- 動態發票產生 – 合併 PDF 發票範本與 DOCX 條款文件,然後將最終 PDF 傳送給客戶。
- 跨平台服務 – 提供接受混合格式上傳的 REST 端點,合併後即串流回傳結果,無需儲存暫存檔。
效能考量
- 記憶體管理 – 必須始終關閉串流;函式庫使用的原生緩衝區需釋放。
- 批次操作 – 將檔案分組可減少磁碟尋址次數,提升吞吐量最高可達 30 %。
- 高效 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