Java 比較 PDF 檔案 – master GroupDocs.Comparison API
在本指南中,您將學習如何使用 GroupDocs.Comparison for Java 高效地 java compare pdf files。無論您是構建合約審核平台、版本控制系統,或是學術論文檢查工具,偵測 PDF 文件中即使是最細微的變更都是必不可少的。我們將逐步說明設定、核心比較邏輯、預覽產生、密碼處理、雲端整合以及效能優化的最佳實踐,讓您能在數分鐘內交付可靠的解決方案。
快速解答
- GroupDocs Comparison Java 的功能是什麼? 它比較兩個或多個文件,突顯每一處變更,並能產生視覺化預覽以便快速審閱。
- 支援哪些檔案格式? Word、PDF、Excel、PowerPoint、圖片、HTML 等多種格式。
- 生產環境需要授權嗎? 是 – 有效的 GroupDocs 授權會移除浮水印並解鎖完整功能。
- 能處理大型文件嗎? 能 – 透過適當的記憶體管理與預覽分頁,您可以處理數百頁的 PDF。
- 在哪裡可以取得最新的 Maven 相依性? 在 GroupDocs 儲存庫 – 加入前請檢查最新版本。
什麼是 java compare pdf files?
java compare pdf files 指的是以程式方式載入兩個 PDF 版本,偵測文字、格式與圖形差異,並可選擇產生一個以視覺方式標示變更的結果文件。GroupDocs.Comparison 透過單一 API 呼叫實作此功能,免除手動差異比對的需求。
為何在 Java 專案中使用 GroupDocs.Comparison?
GroupDocs.Comparison 在超過 50 種支援格式上提供 精確的變更偵測,在標準 8 GB JVM 上可於 5 秒內處理 最多 200 頁的 PDF,且內建預覽產生功能。其 Maven 可用的套件讓整合變得毫不費力,且依照建議的記憶體管理模式時,函式庫可水平擴展。
先決條件:開始前需要的項目
在深入程式碼之前,請確認您的環境符合以下需求:
- Java Development Kit: JDK 8 或更新版本;建議使用 JDK 11 或以上以獲得更佳的垃圾回收效能。
- Build tool: 用於相依性解析的 Maven 或 Gradle。
- IDE: IntelliJ IDEA、Eclipse 或 VS Code – 任一現代 Java IDE 均可。
- Basic Java knowledge: 您應熟悉類別、方法與檔案 I/O。
- Network access: 下載 GroupDocs Maven 套件,若使用雲端儲存則需能存取您的儲存端點。
將 GroupDocs.Comparison 加入您的專案
在您的 pom.xml 中加入以下相依性(將 X.Y.Z 替換為您在 GroupDocs 網站上找到的最新版本):
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-comparison</artifactId>
<version>X.Y.Z</version>
</dependency>
專業提示: 在升級前,請檢查 GroupDocs 的發行說明,以了解特定版本的錯誤修正與新格式支援。
授權(千萬別跳過!)
試用授權可讓您評估 API,但正式上線的部署必須使用永久授權,以移除浮水印並啟用完整功能。
- 免費試用: 從 GroupDocs 下載
- 臨時授權: 取得 temporary license 以延長測試時間
- 完整授權: 從 GroupDocs Store 購買
初始設定:準備 GroupDocs.Comparison
基本初始化
Comparer 類別是所有比較操作的入口點。它負責文件載入、差異計算與結果產生。
<repositories>
<repository>
<id>repository.groupdocs.com</id>
<name>GroupDocs Repository</name>
<url>https://releases.groupdocs.com/comparison/java/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-comparison</artifactId>
<version>25.2</version>
</dependency>
</dependencies>
程式碼片段功能說明: 它建立一個 Comparer 實例,套用授權(若有),並為後續的比較呼叫做好引擎準備。
逐步實作指南
第 1 部分:設定文件比較
步驟 1:初始化 comparer
Comparer 物件是執行差異演算法的核心元件。它保存比較選項與授權資訊等設定。
import com.groupdocs.comparison.Comparer;
import com.groupdocs.comparison.examples.SampleFiles;
// Initialize the comparer with a source document
Comparer comparer = new Comparer(SampleFiles.SOURCE_WORD);
為何重要: 您提供的來源文件將作為基準;所有變更皆以此為參照。
步驟 2:加入目標文件
您可以將來源與一個或多個目標檔案進行比較。在合約管理情境中,來源是原始合約,目標則是法律團隊提供的修訂版。
// Initialize comparer with the source document
Comparer comparer = new Comparer(SampleFiles.SOURCE_WORD);
第 2 部分:產生頁面預覽
步驟 1:設定輸出串流建立
預覽委派模式讓您完全掌控預覽圖像的儲存位置——本機磁碟、雲端儲存桶或資料庫。
// Add a target document for comparison
comparer.add(SampleFiles.TARGET1_WORD);
步驟 2:設定預覽選項
僅為實際需要的頁面產生預覽;對於大型 PDF,可降低最高 60 % 的 CPU 使用率。
import com.groupdocs.comparison.common.delegates.Delegates;
import java.io.FileOutputStream;
import java.io.OutputStream;
Delegates.CreatePageStream createPageStream = new Delegates.CreatePageStream() {
@Override
public OutputStream invoke(int pageNumber) {
String pagePath = "YOUR_OUTPUT_DIRECTORY" + "/result-GetPagePreviewsForTargetDocument_" + pageNumber + ".png";
try {
return new FileOutputStream(pagePath);
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
};
步驟 3:產生預覽
API 會將每個請求的頁面渲染為 PNG(無損)或 JPEG(較小檔案)。對於像素完美度重要的法律文件,建議使用 PNG。
import com.groupdocs.comparison.options.PreviewOptions;
import com.groupdocs.comparison.options.enums.PreviewFormats;
// Set preview options
PreviewOptions previewOptions = new PreviewOptions.Builder(createPageStream)
.setPreviewFormat(PreviewFormats.PNG) // High-quality images
.setPageNumbers(new int[]{1, 2}) // Only generate what you need
.build();
支援的檔案格式
GroupDocs.Comparison 支援 超過 50 種輸入與輸出格式,包括:
- Microsoft Office: DOCX、DOC、XLSX、XLS、PPTX、PPT
- PDF: 所有 PDF‑1.x 版本、加密 PDF 與內嵌字型的 PDF
- 文字與標記: TXT、RTF、HTML、MHTML
- 影像: JPEG、PNG、BMP、GIF
- OpenDocument: ODT、ODS、ODP
這些廣泛的功能讓您能在同一次 API 呼叫中,比較以 Word 檔案儲存的合約與掃描的 PDF 版本。
常見問題與解決方案
問題 1:產生預覽時的 FileNotFoundException
如果輸出目錄不存在或應用程式缺乏寫入權限,預覽委派會拋出此例外。
// Generate page previews
comparer.getTargets().get(0).generatePreview(previewOptions);
解決方案: 檢查路徑,程式化建立缺失的資料夾,並授予 Java 程序相應的檔案系統權限。
問題 2:大型文件的記憶體問題
處理 300 頁的 PDF 可能超過預設 512 MB 堆積,導致 OutOfMemoryError。
Delegates.CreatePageStream createPageStream = new Delegates.CreatePageStream() {
@Override
public OutputStream invoke(int pageNumber) {
String outputDir = "previews";
File directory = new File(outputDir);
if (!directory.exists()) {
directory.mkdirs(); // Create directory if it doesn't exist
}
String pagePath = outputDir + "/preview_page_" + pageNumber + ".png";
try {
return new FileOutputStream(pagePath);
} catch (FileNotFoundException e) {
System.err.println("Failed to create output file: " + pagePath);
throw new RuntimeException("Cannot create preview file", e);
}
}
};
解決方案: 增加 JVM 堆積大小(例如 -Xmx2g 或更高),並使用 PreviewOptions 分頁功能將文件分成較小的頁範圍處理。
問題 3:授權問題
當授權檔案遺失或格式錯誤時,API 會在每個輸出上加上浮水印,且會停用部分進階選項。
// Process fewer pages at a time
PreviewOptions previewOptions = new PreviewOptions.Builder(createPageStream)
.setPreviewFormat(PreviewFormats.PNG)
.setPageNumbers(new int[]{1, 2, 3}) // Limit page range
.build();
// Always dispose of the comparer when done
try (Comparer comparer = new Comparer(sourceDocument)) {
comparer.add(targetDocument);
comparer.getTargets().get(0).generatePreview(previewOptions);
} // Automatic cleanup
解決方案: 將授權檔案放置於已知位置,並在任何比較呼叫之前使用 License.setLicense("path/to/license.lic") 載入。
效能提示與最佳實踐(java comparison best practices)
- 限制預覽產生 – 僅請求您需要的頁面;使用
pageNumbers跳過不相關的區段。 - 選擇適當的影像格式 – 法律文件建議使用 PNG(無損),縮圖則可使用 JPEG(檔案較小)。
- 實作快取 – 儲存比較結果(例如 source + target 的雜湊),以避免重新處理未變更的檔案。
- 管理記憶體 – 將
Comparer的使用包在 try‑with‑resources 區塊中,完成後呼叫close()。 - 釋放 comparer 物件 – 總是釋放原生資源,以降低 JVM 記憶體佔用。
生產環境就緒程式碼模式
以下是微服務中比較任務的建議生命週期。
// Apply license at the start of your application
License license = new License();
license.setLicense("path/to/your/license.lic");
實務實作範例
範例 1:合約管理系統
法律部門上傳原始合約(來源)與修訂版(目標)。服務回傳帶有標註的 PDF 以及一組頁面預覽 PNG,供快速視覺檢查。
public class DocumentComparisonService {
private static final String OUTPUT_DIR = "document-previews/";
public ComparisonResult compareDocuments(String sourcePath, String targetPath) {
try (Comparer comparer = new Comparer(sourcePath)) {
comparer.add(targetPath);
// Perform comparison
String resultPath = OUTPUT_DIR + "comparison-result.docx";
comparer.compare(resultPath);
// Generate previews if needed
generatePreviews(comparer, 3); // First 3 pages only
return new ComparisonResult(resultPath, true);
} catch (Exception e) {
log.error("Document comparison failed", e);
return new ComparisonResult(null, false);
}
}
private void generatePreviews(Comparer comparer, int maxPages) {
// Implementation details...
}
}
範例 2:學術論文審查
研究人員提交修訂稿。系統將新 PDF 與先前版本比較,標示變更的引用,並為審稿人儀表板產生預覽圖像。
public class ContractVersionManager {
public void reviewContractChanges(String originalContract, String revisedContract) {
try (Comparer comparer = new Comparer(originalContract)) {
comparer.add(revisedContract);
// Generate comparison document
String comparisonResult = "contracts/comparison-" + System.currentTimeMillis() + ".docx";
comparer.compare(comparisonResult);
// Create preview for stakeholder review
generatePreviewsForReview(comparer);
}
}
}
如何在密碼保護下 java compare pdf files
LoadOptions 是一個讓您指定載入參數(例如加密文件的密碼)的類別。要比較受保護的 PDF,請以密碼建立 LoadOptions 實例,於載入文件時傳給 Comparer,然後照常執行比較。函式庫會在記憶體中解密檔案,確保不會將明文寫入磁碟,且所有後續操作(包括預覽產生與差異計算)皆透明執行。
public class AcademicDocumentReview {
public void compareResearchDrafts(String draft1, String draft2) {
try (Comparer comparer = new Comparer(draft1)) {
comparer.add(draft2);
// Focus on specific sections (first 10 pages typically contain main content)
PreviewOptions options = new PreviewOptions.Builder(createPageStream)
.setPageNumbers(IntStream.rangeClosed(1, 10).toArray())
.setPreviewFormat(PreviewFormats.PNG)
.build();
comparer.getTargets().get(0).generatePreview(options);
}
}
}
比較雲端儲存的文件
如果您的來源與目標位於 Amazon S3、Azure Blob 或 Google Cloud Storage,只需提供從雲端 SDK 取得的 InputStream,而非本機檔案路徑。
LoadOptions loadOptions = new LoadOptions();
loadOptions.setPassword("your-password");
Comparer comparer = new Comparer("protected-document.docx", loadOptions);
常見問答
Q: 如何處理受密碼保護的文件?
A: 如上所示,建立 Comparer 實例時使用 LoadOptions 提供密碼。
Q: 能比較儲存在雲端存儲的文件嗎?
A: 可以——只需將雲端提供者的輸入串流傳給 Comparer。
Q: GroupDocs.Comparison 能處理的最大檔案大小是多少?
A: 沒有硬性上限,但對於超過 100 MB 的檔案,應增加 JVM 堆積大小或將文件分成較小的區塊處理,以避免 OutOfMemoryError。
Q: 比較演算法的準確度如何?
A: 函式庫使用先進的差異演算法,能偵測文字、格式、影像、表格與嵌入物件的變更,提供接近像素完美的視覺差異結果。
Q: 我可以自訂偵測哪些類型的變更嗎?
A: 當然。設定 CompareOptions 可啟用或停用文字、格式、影像、表格等的偵測。
Q: API 是否支援僅為選定頁面產生預覽?
A: 支援——透過設定 PreviewOptions 的特定 pageNumbers 陣列,即可限制輸出僅為所需頁面。
結論
您現在已擁有一份完整、可投入生產的 java compare pdf files 使用 GroupDocs.Comparison 的指南。遵循設定步驟、套用效能建議,並運用密碼處理與雲端整合的程式碼片段,即可將強大的文件比較功能嵌入任何 Java 應用程式——無論是合約審核平台、學術論文工作流程,或是大規模文件歸檔系統。
最後更新: 2026-11-01
測試版本: GroupDocs.Comparison 25.2
作者: GroupDocs
InputStream sourceStream = getDocumentFromCloud("source-doc-id");
InputStream targetStream = getDocumentFromCloud("target-doc-id");
Comparer comparer = new Comparer(sourceStream);
comparer.add(targetStream);