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,但正式上線的部署必須使用永久授權,以移除浮水印並啟用完整功能。

  1. 免費試用: 從 GroupDocs 下載
  2. 臨時授權: 取得 temporary license 以延長測試時間
  3. 完整授權: 從 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)

  1. 限制預覽產生 – 僅請求您需要的頁面;使用 pageNumbers 跳過不相關的區段。
  2. 選擇適當的影像格式 – 法律文件建議使用 PNG(無損),縮圖則可使用 JPEG(檔案較小)。
  3. 實作快取 – 儲存比較結果(例如 source + target 的雜湊),以避免重新處理未變更的檔案。
  4. 管理記憶體 – 將 Comparer 的使用包在 try‑with‑resources 區塊中,完成後呼叫 close()。
  5. 釋放 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);

相關教學