介紹

PDF 是合約、規格、報告與法規申報的事實標準——隨著多個版本流通,快速找出兩個檔案之間的具體變更變得相當繁瑣。將文件並排捲動並手動註記差異無法擴展,即使是像 Adobe Acrobat 的 Compare 功能這樣的專用工具,也需要對每對檔案進行手動干預。

GroupDocs.Comparison for .NET 讓您完全透過程式碼執行 PDF 比較,並自行決定結果的呈現方式。版本 26.4 引入了專屬的 PdfCompareOptions 類別,提供三種輸出顯示模式:

  1. Inline (default) — 單一合併的 PDF,刪除與插入的內容在同一頁上以不同顏色標示。這是傳統行為,也是最容易以獨立檔案分享的結果。
  2. Side‑by‑Side — 每個結果頁面將來源頁與目標頁並排放置,內容不會重疊。當文件差異很大、在同一頁混合內容會造成混亂時非常適合。
  3. Interleaved — 結果包含交錯的頁面:奇數頁來自來源(刪除標示),偶數頁來自目標(插入標示)。變更以原生 PDF 註解的形式呈現——這是一種內建的 PDF 物件類型,會攜帶變更類型與作者名稱等中繼資料。大多數 PDF 檢視器(Adobe Acrobat Reader、Foxit 等)都允許使用者開啟註解面板,接受或刪除個別註解,從而在不需額外軟體的情況下完成輕量化審閱流程。將此檔案以「雙頁檢視」的 PDF 閱讀器開啟,即可自然呈現左右對照。

在本文中,我們將以可執行的 C# 範例逐一說明這三種模式,探討 PdfCompareOptions 及其屬性,並簡要說明如何在 Adobe Acrobat 手動完成相同任務。


在 Adobe Acrobat 中比較 PDF

在深入程式化方法之前,先了解 Adobe Acrobat Pro 內建的功能。Acrobat 的 Compare Files 工具(位於 Tools → Compare Files)會產生一個並排報告,突顯文字變更、影像差異與格式變動。

執行 Acrobat Pro 比較的步驟:

  1. 開啟 Acrobat Pro,選取 Tools → Compare Files
  2. 選擇 Older File(來源)與 Newer File(目標)。
  3. 按下 Compare。Acrobat 會產生包含摘要頁與內嵌變更標記的互動式比較報告。

此方式適合偶爾的手動審閱。然而,當比較必須成為自動化流程的一部份時,Acrobat 的比較工具會有顯著限制。

當比較必須在伺服器上、CI/CD 管線中,或作為自訂審閱工作流程的一環執行時,程式碼優先的函式庫才是正確的選擇。


前置條件

開始之前:

  • .NET 6.0 或更新版本。
  • GroupDocs.Comparison for .NET 26.4 或更新版本 — 透過 NuGet 安裝:
dotnet add package GroupDocs.Comparison
  • 一個 license file (GroupDocs.Comparison.lic)。若未提供授權,函式庫會以評估模式執行,並加上浮水印與頁數限制。您可以申請一個 temporary license 以進行測試。
  • 兩個要比較的 PDF 檔案 — 我們稱之為 source.pdftarget.pdf。範例內容如下:
source.pdf target.pdf

模式 1:Inline 比較(預設)

When to use: 您希望得到一個單一、可自行開啟的 PDF 檔案,讓任何人立即看見變更——不需要特殊檢視器或雙頁版面。典型情境是與對方共享帶有紅線的合約草稿。

using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;

using (var comparer = new Comparer("source.pdf"))
{
    comparer.Add("target.pdf");

    var options = new PdfCompareOptions
    {
        DisplayMode = PdfCompareOptions.ComparisonDisplayMode.Inline
    };

    comparer.Compare("result_inline.pdf", options);
}

Note: InlineDisplayMode 的預設值,因此上述 options 區塊是可選的。直接呼叫 comparer.Compare("result_inline.pdf") 也會產生相同的輸出。

Resulting document in Inline mode:

PDF comparison result in Inline mode

What happens under the hood:

  • 來源文件中被刪除的內容會以一種顏色(預設為紅色)標示。
  • 目標文件中新增的內容會以另一種顏色(預設為綠色)標示。
  • 兩套變更同時出現在同一頁上,結果較為緊湊,但當文件差異很大時可能顯得雜亂。若文字編輯幅度大,刪除與插入的內容可能在頁面上實際重疊——例如,取代的段落會覆蓋在原始段落之上,導致難以閱讀的混亂。在此情況下,SideBySideInterleaved 模式會是較好的選擇。

模式 2:Side‑by‑Side 比較

When to use: 兩份文件差異極大,若將刪除與插入放在同一頁會使結果難以閱讀。Side‑by‑Side 會將來源與目標內容嚴格分開,讓您一眼即可掃描每頁。

using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;

using (var comparer = new Comparer("source.pdf"))
{
    comparer.Add("target.pdf");

    var options = new PdfCompareOptions
    {
        DisplayMode = PdfCompareOptions.ComparisonDisplayMode.SideBySide
    };

    comparer.Compare("result_side_by_side.pdf", options);
}

Resulting document in Side‑by‑Side mode:

PDF comparison result in Side-by-Side mode

What happens under the hood:

  • 每個結果頁實際上是一個寬畫布,分為左右兩半。
  • 左半部顯示對應的來源頁,並以刪除顏色標示。
  • 右半部顯示目標頁,並以插入顏色標示。
  • 兩份文件的內容永不重疊,即使是大量編輯的頁面也能保持可讀性。

模式 3:Interleaved 比較

When to use: 您希望在標準 PDF 閱讀器的 Two Page View(或「Facing Pages」)模式下逐頁審閱變更。每個來源頁位於左側,對應的目標頁位於右側——實體頁面版面與 Side‑by‑Side 在單一畫布上的呈現相同,但每頁都保留完整大小。

using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;

using (var comparer = new Comparer("source.pdf"))
{
    comparer.Add("target.pdf");

    var options = new PdfCompareOptions
    {
        DisplayMode = PdfCompareOptions.ComparisonDisplayMode.Interleaved,
        AnnotationAuthorName = "GroupDocs"
    };

    comparer.Compare("result_interleaved.pdf", options);
}

Resulting document in Interleaved mode (shown in Two Page View):

PDF comparison result in Interleaved mode viewed in Two Page View

What happens under the hood:

  • 結果文件為 2 × N 頁(N 為來源/目標頁數)。
  • 奇數頁(1、3、5 …)為來源頁,刪除處以紅色標示。
  • 偶數頁(2、4、6 …)為目標頁,插入處以綠色標示。
  • AnnotationAuthorName 會在比較產生的 PDF 註解上蓋上作者名稱——在多作者審閱工作流程中,可用來區分不同的評論者。

Tip: 在 Adobe Acrobat Reader 或任何支援 View → Page Display → Two Page View 的檢視器中開啟結果,即可自動取得左/右對照的版面配置。


限制比較的頁面範圍

所有三種模式皆支援透過 PagesSetup 屬性進行頁面範圍過濾。當只有大型文件的特定章節或段落發生變更,且您想跳過其餘部分時,此功能相當有用。

using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;

using (var comparer = new Comparer("source.pdf"))
{
    comparer.Add("target.pdf");

    var options = new PdfCompareOptions
    {
        DisplayMode = PdfCompareOptions.ComparisonDisplayMode.SideBySide,
        PagesSetup = new PagesSetup
        {
            StartPage = 3,
            EndPage = 10
        }
    };

    comparer.Compare("result_pages_3_to_10.pdf", options);
}

PagesSetupnull(或未設定)時,會比較所有頁面——行為與先前版本相同。


探索 PdfCompareOptions

PdfCompareOptions 是針對 PDF 的 CompareOptions 子類別,與版本 26.2 中推出的 WordCompareOptions 采用相同模式。它將所有僅適用於 PDF 的設定集中於一處,避免您不小心將 Word 或試算表的選項套用到 PDF 任務上。

Property Type Description
DisplayMode ComparisonDisplayMode 控制結果版面:Inline(預設)、SideBySideInterleaved
PagesSetup PagesSetup 要比較的頁面範圍。若為 null,則處理所有頁面。
CompareImagesPdf bool 是否在比較中包含嵌入的影像。
AnnotationAuthorName string 在 PDF 註解上蓋上的作者名稱(用於 Interleaved 模式)。
ImagesInheritanceMode enum 當停用影像比較時,決定哪個文件提供影像的模式。

完整設定範例:

var options = new PdfCompareOptions
{
    DisplayMode = PdfCompareOptions.ComparisonDisplayMode.Interleaved,
    CompareImagesPdf = true,
    AnnotationAuthorName = "Review Bot",
    PagesSetup = new PagesSetup { StartPage = 1, EndPage = 5 }
};

繼承自 CompareOptions 的基礎屬性 — InsertedItemStyleDeletedItemStyleChangedItemStyle — 亦可使用,讓您在需要時覆寫預設的高亮顏色。


程式化取得變更

不論使用哪種顯示模式,都可以透過 Comparer.GetChanges() 取得所有偵測到的差異的結構化清單。此功能適合建立自訂報告、將結果輸入審閱系統,或統計編輯範圍。

using (var comparer = new Comparer("source.pdf"))
{
    comparer.Add("target.pdf");

    comparer.Compare("result.pdf");

    var changes = comparer.GetChanges(); // returns ChangeInfo[]
    Console.WriteLine($"Total changes detected: {changes.Length}");
}

請參考官方 API 參考文件以取得更多細節:Comparer.GetChanges


處理受密碼保護的 PDF

受密碼保護的 PDF 完全受支援。建立 Comparer 時,透過 LoadOptions 傳入密碼:

using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;

using (var comparer = new Comparer("source_protected.pdf",
    new LoadOptions { Password = "secret" }))
{
    comparer.Add("target_protected.pdf", new LoadOptions { Password = "secret" });

    var options = new PdfCompareOptions
    {
        DisplayMode = PdfCompareOptions.ComparisonDisplayMode.SideBySide
    };

    comparer.Compare("result_protected.pdf", options);
}

取得免費試用

您可以從 official releases page 下載 GroupDocs.Comparison for .NET。若需無限制測試,請申請一個 temporary license —— 無需信用卡。


常見問題

Q: 我需要在伺服器上安裝 Adobe Acrobat 或其他 PDF 軟體嗎?
A: 不需要。GroupDocs.Comparison 是獨立的 .NET 函式庫,能在不依賴任何第三方套件的情況下讀寫 PDF 檔案。

Q: 預設應該使用哪種顯示模式?
A: 建議先使用 Inline —— 它產生最緊湊的結果,且最易於分享。當大量編輯使 Inline 版面難以閱讀時,可切換至 SideBySide;若審閱者會在「Two Page View」的 PDF 閱讀器中開啟結果,則使用 Interleaved

Q: 我可以比較非 PDF 格式的文件嗎?
A: 可以 —— 函式庫支援 Word 文件、Excel 試算表、PowerPoint 簡報、純文字檔等多種格式。完整支援清單請參閱 documentation

Q: 若未設定授權會發生什麼事?
A: 函式庫會以評估模式執行。輸出文件會帶有浮水印,且僅處理前幾頁。申請 temporary license 可在測試期間移除這些限制。

Q: 我能只比較 PDF 內的影像而忽略文字變更嗎?
A: 在 PdfCompareOptions 上設定 CompareImagesPdf = true 即可加入影像比較。若只想專注於影像,可結合 ImagesInheritanceMode 屬性使用;詳細說明請參考 API 參考文件。


結論

GroupDocs.Comparison for .NET 26.4 為您提供精確、以程式碼驅動的 PDF 比較結果呈現控制。Inline 模式涵蓋最常見的使用情境——單一、可共享的紅線 PDF。SideBySide 能在大量變更時保持內容清晰可讀。Interleaved 則自然配合任何 PDF 檢視器的 Two Page View,提供全尺寸的逐頁走查。除此之外,頁面範圍過濾讓您精準鎖定關鍵章節,而 PdfCompareOptions 則將所有 PDF 專屬設定集中於一個易於發現的類別中。

依據您的工作流程選擇最適合的模式,或同時產生三種結果,讓不同的受眾自行決定偏好的檢視方式。

其他資源