介紹
PDF 是合約、規格、報告與法規申報的事實標準——隨著多個版本流通,快速找出兩個檔案之間的具體變更變得相當繁瑣。將文件並排捲動並手動註記差異無法擴展,即使是像 Adobe Acrobat 的 Compare 功能這樣的專用工具,也需要對每對檔案進行手動干預。
GroupDocs.Comparison for .NET 讓您完全透過程式碼執行 PDF 比較,並自行決定結果的呈現方式。版本 26.4 引入了專屬的 PdfCompareOptions 類別,提供三種輸出顯示模式:
- Inline (default) — 單一合併的 PDF,刪除與插入的內容在同一頁上以不同顏色標示。這是傳統行為,也是最容易以獨立檔案分享的結果。
- Side‑by‑Side — 每個結果頁面將來源頁與目標頁並排放置,內容不會重疊。當文件差異很大、在同一頁混合內容會造成混亂時非常適合。
- 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 比較的步驟:
- 開啟 Acrobat Pro,選取 Tools → Compare Files。
- 選擇 Older File(來源)與 Newer File(目標)。
- 按下 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.pdf與target.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:
Inline是DisplayMode的預設值,因此上述options區塊是可選的。直接呼叫comparer.Compare("result_inline.pdf")也會產生相同的輸出。
Resulting document in Inline mode:
What happens under the hood:
- 來源文件中被刪除的內容會以一種顏色(預設為紅色)標示。
- 目標文件中新增的內容會以另一種顏色(預設為綠色)標示。
- 兩套變更同時出現在同一頁上,結果較為緊湊,但當文件差異很大時可能顯得雜亂。若文字編輯幅度大,刪除與插入的內容可能在頁面上實際重疊——例如,取代的段落會覆蓋在原始段落之上,導致難以閱讀的混亂。在此情況下,
SideBySide或Interleaved模式會是較好的選擇。
模式 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:
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):
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);
}
當 PagesSetup 為 null(或未設定)時,會比較所有頁面——行為與先前版本相同。
探索 PdfCompareOptions
PdfCompareOptions 是針對 PDF 的 CompareOptions 子類別,與版本 26.2 中推出的 WordCompareOptions 采用相同模式。它將所有僅適用於 PDF 的設定集中於一處,避免您不小心將 Word 或試算表的選項套用到 PDF 任務上。
| Property | Type | Description |
|---|---|---|
DisplayMode |
ComparisonDisplayMode |
控制結果版面:Inline(預設)、SideBySide 或 Interleaved。 |
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 的基礎屬性 — InsertedItemStyle、DeletedItemStyle、ChangedItemStyle — 亦可使用,讓您在需要時覆寫預設的高亮顏色。
程式化取得變更
不論使用哪種顯示模式,都可以透過 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 專屬設定集中於一個易於發現的類別中。
依據您的工作流程選擇最適合的模式,或同時產生三種結果,讓不同的受眾自行決定偏好的檢視方式。