java compare pdf files – GroupDocs.Comparison API 主版本

在您的 Java 應用程式中為文件版本控制而苦惱嗎? 您並不孤單。若沒有合適的工具,管理多個文件版本、追蹤變更以及產生視覺預覽很快就會變成噩夢。

這時 GroupDocs.Comparison for Java 就派上用場了。這個功能強大的 API 只需幾行程式碼即可比較文件、標示差異,並產生頁面預覽。無論您是在構建內容管理系統、需要 java compare pdf files,或是想要 java compare word files,本教學都能讓您快速上手。

快速解答

  • groupdocs comparison java 有什麼功能? 它可以比較兩個或多個文件,標示變更,並能產生視覺預覽。
  • 支援哪些檔案格式? Word、PDF、Excel、PowerPoint、圖片、HTML 等等。
  • 生產環境需要授權嗎? 需要 – 有效的 GroupDocs 授權會移除浮水印並解鎖全部功能。
  • 能處理大型文件嗎? 能,透過適當的記憶體管理與預覽分頁。
  • 在哪裡可以找到最新的 Maven 依賴? 在 GroupDocs 儲存庫 – 加入前請檢查最新版本。

什麼是 java compare pdf files?

GroupDocs.Comparison for Java 是一個程式化比較文件的函式庫,能辨識文字、格式與圖片的差異,並可選擇產生可視化變更的結果文件。當您需要可靠的 java compare pdf files 時,它是首選解決方案。

為什麼在 Java 專案中使用 GroupDocs.Comparison?

  • 精確的變更偵測,支援多種檔案類型,包括 PDF。
  • 輕鬆整合 Maven 或 Gradle。
  • 內建預覽產生,快速視覺審查。
  • 具可擴充的效能,只要遵循處理大型文件的最佳實踐。

前置條件:開始前您需要的項目

基本需求

在我們開始編寫程式碼之前,請確保已具備以下基礎:

Development Environment:

  • Java Development Kit (JDK) 8 或更新版本(建議使用 JDK 11+ 以獲得更佳效能)
  • 用於相依管理的 Maven 或 Gradle
  • 您喜愛的 IDE(IntelliJ IDEA、Eclipse 或 VS Code 都很不錯)

Knowledge Prerequisites:

  • 基本的 Java 程式設計技能(需熟悉類別與方法)
  • 了解 Java 的檔案 I/O 操作
  • 熟悉 Maven 相依(別擔心,我們會一步步說明)

將 GroupDocs.Comparison 加入您的專案

開始非常簡單。將以下相依加入您的 pom.xml

<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>

專業提示: 請務必在 GroupDocs 官方網站上檢查最新版本,以確保取得最新功能與錯誤修正。

授權(千萬別跳過!)

雖然您可以先使用免費試用版,但在正式環境中仍需設定正確的授權:

  1. 免費試用:從 GroupDocs 下載
  2. 臨時授權:在 此處 取得,以延長測試時間
  3. 正式授權:於 GroupDocs Store 購買

初始設定:準備 GroupDocs.Comparison

基本初始化

以下示範如何使用第一個比較:

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);

這段程式碼在做什麼? 我們正在建立一個 Comparer 物件,負責所有文件比較操作。可將其視為您的文件比較工作區。

步驟式實作指南

第 1 部分:設定文件比較

步驟 1:初始化 Comparer

// Initialize comparer with the source document
Comparer comparer = new Comparer(SampleFiles.SOURCE_WORD);

為什麼重要: 原始文件作為基準,所有比較都會顯示相對於此文件的變更。

步驟 2:加入目標文件

// Add a target document for comparison
comparer.add(SampleFiles.TARGET1_WORD);

實務情境: 在合約管理系統中,原始文件可能是最初的合約,而目標文件則是法律團隊的修訂版。

第 2 部分:產生頁面預覽

步驟 1:設定輸出串流建立

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);
        }
    }
};

關鍵觀念: 這個委派模式讓您完全掌控預覽圖像的儲存位置與方式。您可以輕鬆修改為儲存至雲端或資料庫。

步驟 2:設定預覽選項

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();

效能提示: 僅為實際需要的頁面產生預覽,可節省處理時間與儲存空間。

步驟 3:產生預覽

// Generate page previews
comparer.getTargets().get(0).generatePreview(previewOptions);

這段程式碼在做什麼: 它會從目標文件的指定頁面產生 PNG 圖像,適合用於縮圖或快速視覺審查。

支援的檔案格式

GroupDocs.Comparison 支援多種文件格式,適用於各種使用情境:

常見格式:

  • Microsoft Office:Word(.docx、.doc)、Excel(.xlsx、.xls)、PowerPoint(.pptx、.ppt)
  • PDF Documents:所有版本的 PDF 檔案
  • Text Files:純文字(.txt)、富文字(.rtf)
  • Images:JPEG、PNG、BMP、GIF
  • Web Formats:HTML、MHTML
  • Other:ODT、ODS、ODP(OpenDocument 格式)

常見問題與解決方案

問題 1:產生預覽時的 FileNotFoundException

徵兆: 程式碼在嘗試建立輸出串流時拋出例外。

解決方案:

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);
        }
    }
};

問題 2:大型文件的記憶體問題

徵兆: 處理大型檔案或大量頁面時出現 OutOfMemoryError

解決方案: 將文件分塊處理,並正確釋放物件:

// 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

問題 3:授權問題

徵兆: 輸出帶有浮水印或功能受限。

解決方案: 確認已正確套用授權:

// Apply license at the start of your application
License license = new License();
license.setLicense("path/to/your/license.lic");

效能提示與最佳實踐(java comparison best practices)

  • 限制預覽產生 – 僅為實際需要的頁面建立預覽。
  • 選擇適當的影像格式 – PNG 提供無損品質,JPEG 可減少檔案大小。
  • 實作快取 – 儲存比較結果,以避免重新處理相同文件。
  • 管理記憶體 – 使用 try‑with‑resources,並將大型檔案分批處理。
  • 釋放 Comparer 物件 – 完成後務必關閉 Comparer

可投入生產的程式碼範本

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...
    }
}

真實案例實作範例

範例 1:合約管理系統

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);
        }
    }
}

範例 2:學術論文審查

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);
        }
    }
}

如何在有密碼保護的情況下 java compare pdf files

處理 java password protected documents 時,仍可透過 LoadOptions 提供密碼來執行比較:

LoadOptions loadOptions = new LoadOptions();
loadOptions.setPassword("your-password");
Comparer comparer = new Comparer("protected-document.docx", loadOptions);

比較雲端儲存的文件

若您的來源與目標文件位於雲端儲存,請傳入輸入串流而非檔案路徑:

InputStream sourceStream = getDocumentFromCloud("source-doc-id");
InputStream targetStream = getDocumentFromCloud("target-doc-id");
Comparer comparer = new Comparer(sourceStream);
comparer.add(targetStream);

常見問答

Q:如何處理受密碼保護的文件?
A:在建立 Comparer 實例時使用 LoadOptions 提供密碼,如上所示。

Q:能比較儲存在雲端的文件嗎?
A:可以,只需將雲端提供者的輸入串流傳給 Comparer 即可。

Q:GroupDocs.Comparison 能處理的最大檔案大小是多少?
A:雖無硬性上限,但若檔案超過 100 MB,建議增加 JVM 堆積大小或將文件分成較小的區塊處理。

Q:比較演算法的準確度如何?
A:此函式庫採用先進的 diff 演算法,能偵測文字、格式、圖片與嵌入物件的變更,非常適合法務或合規情境。

Q:我可以自訂偵測的變更類型嗎?
A:當然可以。使用 CompareOptions 來啟用或停用文字、格式、圖片、表格等的偵測。

Q:API 是否支援僅為選取的頁面產生預覽?
A:是的,只要在 PreviewOptions 中設定特定的 pageNumbers 陣列,即可限制輸出至您需要的頁面。

結論

您現在已擁有完整、可投入生產的 java compare pdf files 使用 GroupDocs.Comparison 的指南。依循上述步驟、最佳實踐與範例模式,即可將強大的文件比較與預覽功能整合至任何 Java 應用程式,無論是合約修訂、學術草稿或大型 PDF 檔案庫。


最後更新: 2026-03-27
測試環境: GroupDocs.Comparison 25.2
作者: GroupDocs

{< /blocks/products/pf/tutorial-page-section >} {< /blocks/products/pf/main-container >} {< /blocks/products/pf/main-wrap-class >} {< blocks/products/products-backtop-button >}