IRONSOFTWAREHOME
使用IRONPDF

如何使用IronPDF建立.NET PDF API

Curtis Chau
Curtis Chau
Updated: 2026年6月28日

程式化比較PDF文件對於追蹤變更、驗證不同版本以及自動化品質保證工作流程至關重要。 無論您是需要對文件管理中的兩個PDF檔進行比較,還是想找出合約修訂中的差異,IronPDF都提供了一個精簡的方案來比較C#中的PDF檔。

本教程演示如何使用IronPDF的文字提取功能來比較兩個PDF文件,從基本比較到建立詳細的差異報告。 您將學習含程式碼範例的實用技術,這些程式碼可在Windows、Linux、macOS、Docker和雲平台上運行。

如何使用C#及IronPDF比較兩個PDF文件: 圖像1 - IronPDF

先決條件和設定

開始之前,請確保您已安裝:

  • Visual Studio 2019或以上版本
  • .NET Framework 4.6.2+ or .NET Core 3.1+
  • 基本的C#知識

安裝IronPDF .NET套件

透過NuGet套件管理器在您的.NET專案中安裝IronPDF:

PM > Install-Package IronPdf

如何使用C#及IronPDF比較兩個PDF文件: 圖像2 - 安裝

或使用.NET CLI:

dotnet add package IronPdf

在檔案中新增必要的命名空間參考:

using IronPdf;
using System;

如何使用C#及IronPDF比較兩個PDF文件: 圖像3 - 功能

基本的PDF文件比較

讓我們從範例程式碼開始,通過提取並比較其文字內容來比較PDF檔:

public class BasicPdfComparer
{
    public static bool ComparePdfFiles(string firstPdfPath, string secondPdfPath)
    {
        // Load two PDF documents
        var pdf1 = PdfDocument.FromFile(firstPdfPath);
        var pdf2 = PdfDocument.FromFile(secondPdfPath);
        // Extract all text from both PDFs
        string text1 = pdf1.ExtractAllText();
        string text2 = pdf2.ExtractAllText();
        // Compare the two documents
        bool areIdentical = text1 == text2;
        // Find differences and calculate similarity
        double similarity = CalculateSimilarity(text1, text2);
        Console.WriteLine($"Documents are {(areIdentical ? "identical" : "different")}");
        Console.WriteLine($"Similarity: {similarity:F2}%");
        return areIdentical;
    }
    private static double CalculateSimilarity(string text1, string text2)
    {
        if (text1 == text2) return 100.0;
        if (string.IsNullOrEmpty(text1) || string.IsNullOrEmpty(text2)) return 0.0;
        int matchingChars = 0;
        int minLength = Math.Min(text1.Length, text2.Length);
        for (int i = 0; i < minLength; i++)
        {
            if (text1[i] == text2[i]) matchingChars++;
        }
        return (double)matchingChars / Math.Max(text1.Length, text2.Length) * 100;
    }
}

此程式碼使用IronPDF的PdfDocument.FromFile()方法載入兩個PDF文件,提取所有文字內容,並執行直接的字串比較。 比較方法提供了指標來識別文件間的相似度。

輸入

如何使用C#及IronPDF比較兩個PDF文件: 圖像4 - 範例PDF輸入1

如何使用C#及IronPDF比較兩個PDF文件: 圖像5 - 範例PDF輸入2

輸出

如何使用C#及IronPDF比較兩個PDF文件: 圖像6 - 主控台輸出

逐頁比較方法

如需更詳細的分析,逐頁比較兩個PDF,以確定差異發生的確切位置:

public static void ComparePageByPage(string firstPdfPath, string secondPdfPath)
{
    // Load two files
    var pdf1 = PdfDocument.FromFile(firstPdfPath);
    var pdf2 = PdfDocument.FromFile(secondPdfPath);
    int maxPages = Math.Max(pdf1.PageCount, pdf2.PageCount);
    int differencesFound = 0;
    for (int i = 0; i < maxPages; i++)
    {
        // Process each page
        string page1Text = i < pdf1.PageCount ? pdf1.ExtractTextFromPage(i) : "";
        string page2Text = i < pdf2.PageCount ? pdf2.ExtractTextFromPage(i) : "";
        if (page1Text != page2Text)
        {
            differencesFound++;
            Console.WriteLine($"Page {i + 1}: Differences detected");
        }
        else
        {
            Console.WriteLine($"Page {i + 1}: Identical");
        }
    }
    Console.WriteLine($"\nSummary: {differencesFound} page(s) with changes");
}

ExtractTextFromPage()方法允許從特定頁面提取內容。 此方法幫助開發者標記不同版本PDF文件之間的差異。

使用Comparer類模式

建立一個專用的比較類,增強您的比較功能:

public class PdfComparer
{
    private PdfDocument pdf1;
    private PdfDocument pdf2;
    private bool disposed;
    public PdfComparer(string file1Path, string file2Path)
    {
        // Load the two PDFs
        pdf1 = PdfDocument.FromFile(file1Path);
        pdf2 = PdfDocument.FromFile(file2Path);
    }
    public ComparisonResult Compare()
    {
        var result = new ComparisonResult();
        // Compare PDF documents
        string text1 = pdf1?.ExtractAllText() ?? string.Empty;
        string text2 = pdf2?.ExtractAllText() ?? string.Empty;
        result.AreIdentical = string.Equals(text1, text2, StringComparison.Ordinal);
        result.SimilarityPercent = CalculateSimilarity(text1, text2);
        result.Differences = FindDifferences(text1, text2);
        return result;
    }
    private List<string> FindDifferences(string text1, string text2)
    {
        var differences = new List<string>();
        // Normalize nulls
        text1 ??= string.Empty;
        text2 ??= string.Empty;
        if (string.Equals(text1, text2, StringComparison.Ordinal))
            return differences;
        // Page-aware comparisons aren't possible here because we only have full-text;
        // produce a concise, actionable difference entry:
        int min = Math.Min(text1.Length, text2.Length);
        int firstDiff = -1;
        for (int i = 0; i < min; i++)
        {
            if (text1[i] != text2[i])
            {
                firstDiff = i;
                break;
            }
        }
        if (firstDiff == -1 && text1.Length != text2.Length)
        {
            // No differing character in the overlap, but lengths differ
            firstDiff = min;
        }
        // Create short excerpts around the first difference for context
        int excerptLength = 200;
        string excerpt1 = string.Empty;
        string excerpt2 = string.Empty;
        if (firstDiff >= 0)
        {
            int start1 = Math.Max(0, firstDiff);
            int len1 = Math.Min(excerptLength, Math.Max(0, text1.Length - start1));
            excerpt1 = start1 < text1.Length ? text1.Substring(start1, len1) : string.Empty;
            int start2 = Math.Max(0, firstDiff);
            int len2 = Math.Min(excerptLength, Math.Max(0, text2.Length - start2));
            excerpt2 = start2 < text2.Length ? text2.Substring(start2, len2) : string.Empty;
        }
        // HTML-encode excerpts if they will be embedded into HTML reports
        string safeExcerpt1 = System.Net.WebUtility.HtmlEncode(excerpt1);
        string safeExcerpt2 = System.Net.WebUtility.HtmlEncode(excerpt2);
        double similarity = CalculateSimilarity(text1, text2);
        differences.Add($"Similarity: {similarity:F2}%. Lengths: [{text1.Length}, {text2.Length}]. First difference index: {firstDiff}. Excerpt1: \"{safeExcerpt1}\" Excerpt2: \"{safeExcerpt2}\"");
        return differences;
    }
    public void Close()
    {
        Dispose();
    }
    public void Dispose()
    {
        if (disposed) return;
        disposed = true;
        pdf1?.Dispose();
        pdf2?.Dispose();
    }
}
public class ComparisonResult
{
    // True when extracted text is exactly the same
    public bool AreIdentical { get; set; }
    // Similarity expressed as percent (0..100)
    public double SimilarityPercent { get; set; }
    // Human readable difference entries
    public List<string> Differences { get; set; } = new List<string>();
}

此類結構提供了一種清晰的方法來比較PDF文件,同時正確管理文件物件和引用。

輸出

如何使用C#及IronPDF比較兩個PDF文件: 圖像7 - Comparer類模式輸出

建立視覺化的比較報告

生成一個以HTML為基礎的報告,突出顯示兩個文件之間的差異,並將其保存為PDF文件:

public static void CreateComparisonReport(string pdf1Path, string pdf2Path, string outputPath)
{
    // Load PDFs for comparison
    var pdf1 = PdfDocument.FromFile(pdf1Path);
    var pdf2 = PdfDocument.FromFile(pdf2Path);
    // Build HTML report with details
    string htmlReport = @"
        <html>
        <head>
            <style>
                body { font-family: Arial, sans-serif; margin: 20px; }
                .identical { color: green; }
                .different { color: red; }
                table { width: 100%; border-collapse: collapse; }
                th, td { border: 1px solid #ddd; padding: 8px; }
            </style>
        </head>
        <body>
            <h1>PDF Comparison Report</h1>
            <table>
                <tr><th>Page</th><th>Status</th></tr>";
    // Process each page
    for (int i = 0; i < Math.Max(pdf1.PageCount, pdf2.PageCount); i++)
    {
        string page1 = i < pdf1.PageCount ? pdf1.ExtractTextFromPage(i) : "";
        string page2 = i < pdf2.PageCount ? pdf2.ExtractTextFromPage(i) : "";
        bool identical = page1 == page2;
        string status = identical ? "Identical" : "Different";
        htmlReport += $"<tr><td>Page {i + 1}</td><td class='{status.ToLower()}'>{status}</td></tr>";
    }
    htmlReport += "</table></body></html>";
    // Create and save the report
    var renderer = new ChromePdfRenderer();
    var reportPdf = renderer.RenderHtmlAsPdf(htmlReport);
    reportPdf.SaveAs(outputPath);
    Console.WriteLine($"Report saved to: {outputPath}");
}

此程式碼展示如何建立帶有比較結果的專業PDF文件。 報告將保存到指定路徑。

比較多個PDF文件

當您需要同時比較多個PDF文件時,用此方法:

public static void CompareMultiplePdfs(params string[] pdfPaths)
{
    if (pdfPaths.Length < 2)
    {
        Console.WriteLine("Need at least two files to compare");
        return;
    }
    // Load multiple PDF documents
    var pdfs = new List<PdfDocument>();
    foreach (var path in pdfPaths)
    {
        pdfs.Add(PdfDocument.FromFile(path));
    }
    // Compare all documents
    for (int i = 0; i < pdfs.Count - 1; i++)
    {
        for (int j = i + 1; j < pdfs.Count; j++)
        {
            string text1 = pdfs[i].ExtractAllText();
            string text2 = pdfs[j].ExtractAllText();
            bool identical = text1 == text2;
            Console.WriteLine($"File {i+1} vs File {j+1}: {(identical ? "Identical" : "Different")}");
        }
    }
    // Close all documents
    pdfs.ForEach(pdf => pdf.Dispose());
}

此方法允許在一次運行中比較多個PDF文件,適合批量處理需求。

輸出

如何使用C#及IronPDF比較兩個PDF文件: 圖像8 - 多份PDF輸出

現實世界中的合約版本控制

這是一個用於追踪法律文件修訂的實用範例:

public class ContractVersionControl
{
    public static void CompareContractVersions(string originalPath, string revisedPath)
    {
        // System for comparing contract versions
        Console.WriteLine("Contract Version Comparison System");
        var original = PdfDocument.FromFile(originalPath);
        var revised = PdfDocument.FromFile(revisedPath);
        // Extract contract contents
        string originalText = original.ExtractAllText();
        string revisedText = revised.ExtractAllText();
        if (originalText == revisedText)
        {
            Console.WriteLine("No changes detected");
        }
        else
        {
            Console.WriteLine("Changes detected in revised version");
            // Create detailed report
            string reportPath = $"contract_comparison_{DateTime.Now:yyyyMMdd}.pdf";
            CreateComparisonReport(originalPath, revisedPath, reportPath);
            Console.WriteLine($"Report created: {reportPath}");
        }
        // Close documents
        original.Dispose();
        revised.Dispose();
    }
}

這演示了如何比較兩個PDF合同版本並生成報告以供審核。 系統會自動檢測變更並建立文件。

處理加密的PDF

IronPDF無縫處理加密的PDF文件,通過在調用載入方法時傳遞密碼:

public static bool CompareProtectedPdfs(string pdf1Path, string pass1,
                                        string pdf2Path, string pass2)
{
    // Load password-protected two PDFs
    var pdf1 = PdfDocument.FromFile(pdf1Path, pass1);
    var pdf2 = PdfDocument.FromFile(pdf2Path, pass2);
    // Extract and compare text
    string text1 = pdf1.ExtractAllText();
    string text2 = pdf2.ExtractAllText();
    bool result = text1 == text2;
    // Close and dispose
    pdf1.Dispose();
    pdf2.Dispose();
    return result;
}

載入受保護的PDF時只需傳遞密碼參數。 IronPDF自動處理解密。

輸入

如何使用C#及IronPDF比較兩個PDF文件: 圖像9 - 保護的PDF1

如何使用C#及IronPDF比較兩個PDF文件: 圖像10 - 保護的PDF2

輸出

逐步指導說明

按照這些步驟來在您的.NET專案中實現PDF比較:

  1. 通過NuGet安裝IronPDF for .NET套件
  2. 新增IronPDF命名空間參考
  3. 為每個檔案建立一個PdfDocument實例
  4. 使用類似ExtractAllText()的方法來獲取內容
  5. 比較提取的文字或實現自定義邏輯
  6. 保存結果或根據需要生成報告
  7. 關閉文件物件以釋放資源

如何使用C#及IronPDF比較兩個PDF文件: 圖像12 - 跨平台相容性

設定您的授權

如要使用IronPDF無水印,請設定您的授權金鑰:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

前往授權頁面了解可用選項的詳情。 下載IronPDF的免費試用並使用專業級比較功能來設置PDF文件。

最佳實踐

  1. 如果處理跟踪變更,請在比較之前接受所有修訂
  2. 為關鍵檔案操作開發錯誤處理
  3. 通過為大型文件建立頁面特定比較來提高性能
  4. 對多個PDF文件進行異步比較
  5. 定期更新您的程式庫以獲取最新功能及支援

如何使用C#及IronPDF比較兩個PDF文件: 圖像14 - 使用C#比較兩個PDF文件 - IronPDF

結論

IronPDF透過直觀的API和強大的提取功能簡化了使用C#比較兩個PDF文件的過程。 從基本比較到建立詳細報告,IronPDF提供了強大文件比較工作流所需的全部工具。

簡單安裝、全面功能及跨平台支援的結合,使IronPDF成為在.NET應用程式中實施PDF比較的開發者首選。 無論您是在開發文件管理系統還是版本控制解決方案,IronPDF的簡潔方法能讓您迅速上手。

今天就開始您的IronPDF免費試用,實現專業的PDF比較功能。 擁有完整的技術支援和豐富的文件,您能在數小時內搭建具備生產條件的功能。 參閱完整文件了解更多進階功能。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

...
閱讀更多

相關文章

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
預訂您的免費現場演示
Booking Badge

受到全球數百萬工程師的信任

Iron Software的客戶標誌
獲取您的無義務諮詢
填寫以下表格或電子郵件sales@ironsoftware.com
您的詳細資訊將始終保密
受到全球數百萬工程師的信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立