使用IRONPDF 如何在 C# 中比較兩個 PDF 文件 Curtis Chau 發表日期:11月 13, 2025 Download IronPDF NuGet 下載 DLL 下載 Windows 安裝程式 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article Comparing PDF documents programmatically is essential for tracking changes, validating different versions, and automating quality assurance workflows. Whether you need to compare two PDF files for document management or find differences in contract revisions, IronPDF provides a streamlined solution for comparing PDF files in C#. This tutorial demonstrates how to compare two PDF documents using IronPDF's text extraction capabilities, from basic comparisons to creating detailed difference reports. You'll learn practical techniques with code examples that work across Windows, Linux, macOS, Docker, and cloud platforms. ## Prerequisites and Setup Before starting, ensure you have installed: - Visual Studio 2019 or later - .NET Framework 4.6.2+ or .NET Core 3.1+ - Basic C# knowledge ### Installing the IronPDF .NET Package Install IronPDF via NuGet Package Manager in your .NET project: ```shell :ProductInstall 或者使用 .NET CLI: dotnet add package IronPdf dotnet add package IronPdf SHELL 將必要的命名空間引用添加到您的文件中: using IronPdf; using System; using IronPdf; using System; Imports IronPdf Imports System $vbLabelText $csharpLabel 基本 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; } } 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; } } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 此代碼使用 IronPDF 的 PdfDocument.FromFile() 方法加載兩個 PDF 文件,提取所有文本內容並執行直接字符串比較。 比較方法為您提供指標,以識別文檔的匹配程度。 逐頁比較方法 為了進行更詳細的分析,逐頁比較兩個 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"); } 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"); } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 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>(); // Normalise 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>(); } 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>(); // Normalise 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>(); } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 此類結構提供了一種清晰的方法來比較 PDF 文檔,同時正確管理文檔對象和引用。 創建視覺比較報告 生成一個基於 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}"); } 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}"); } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 此代碼演示了如何創建具有比較結果的專業 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()); } 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()); } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 此方法允許在一次運行中比較多個 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(); } } 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(); } } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 這演示瞭如何比較兩份 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; } 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; } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 加載受保護的 PDF 時,只需傳遞密碼參數。 IronPDF 自動處理解密。 分步說明 按照以下步驟在您的 .NET 項目中實施 PDF 比較: 通過 NuGet 安裝 IronPDF .NET 包。 添加 IronPDF 命名空間引用。 為每個文件創建 PdfDocument 的實例。 使用 ExtractAllText() 等方法獲取內容。 比較提取的文本或實施自定義邏輯。 根據需要保存結果或生成報告。 關閉文檔對象以釋放資源。 設置您的許可證 要不帶水印地使用 IronPDF,請設置您的許可證密鑰: IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY" $vbLabelText $csharpLabel 訪問許可證頁面並使用專業級比較功能設置 PDF 文件。 最佳實踐 如果使用跟踪更改,請在比較之前接受所有修訂。 為關鍵文件操作開發錯誤處理。 通過為大型文檔創建特定頁面的比較來提高性能。 對多個 PDF 文檔進行異步比較。 定期更新您的庫以獲取最新功能和支持。 結論 IronPDF 通過其直觀的 API 和強大的提取功能簡化了使用 C# 對比兩個 PDF 文件的過程。 從基本比較到創建詳細報告,IronPDF 提供了強大的文檔比較工作流程所需的全部工具。 易於安裝、功能全面和跨平台支持的結合使 IronPDF 成為開發人員在 .NET 應用程序中實施 PDF 比較的理想選擇。 無論您是在開發文檔管理系統還是版本控制解決方案,IronPDF 的簡單方法都能讓您快速上手。 立即開始您的 免費試用 IronPDF,實施專業的 PDF 比較功能。 通過完善的技術支持和全面的文檔,您將在幾小時內具備生產就緒的功能。 請參閱完整的文檔以了解有關高級功能的更多信息。 常見問題解答 IronPDF是什麼?它如何幫助比較PDF文件? IronPDF 是一個 .NET 函式庫,它提供處理 PDF 檔案的工具,包括以程式設計方式比較兩個 PDF 文件的內容或結構差異的功能。 IronPDF 能否突顯兩個 PDF 檔案之間的差異? 是的,IronPDF 可以透過比較兩個 PDF 文件的內容來突出顯示它們之間的差異,並提供詳細的更改或差異報告。 我需要具備進階 C# 技能才能使用 IronPDF 比較 PDF 檔案嗎? 不,您無需具備高級 C# 技能。 IronPDF 提供簡單直覺的 PDF 文件比較方法,讓不同技能等級的開發人員都能輕鬆上手。 是否可以使用 IronPDF 來比較加密的 PDF 檔案? 是的,IronPDF 支援對加密的 PDF 文件進行比較,只要提供正確的密碼來存取文件內容即可。 IronPDF 可以檢測出兩個 PDF 檔案之間的哪些差異? IronPDF 可以偵測一系列差異,包括文字變更、影像修改以及結構更改,例如版面配置或格式的變更。 IronPDF 能否整合到現有的 C# 應用程式中? 是的,IronPDF 可以輕鬆整合到現有的 C# 應用程式中,使開發人員能夠在不對其程式碼庫進行重大更改的情況下添加 PDF 比較功能。 IronPDF 是否與其他 .NET 應用程式相容? IronPDF 旨在與所有 .NET 應用程式相容,為在 .NET 框架內工作的開發人員提供無縫體驗。 IronPDF是否支援大量比較多個PDF文件? 是的,IronPDF 支援批次處理,允許開發人員在一次操作中比較多個 PDF 文件,這對於處理大量文件非常有用。 IronPDF 如何確保 PDF 比對的準確性? IronPDF 使用先進的演算法來確保準確可靠的比較,分析文字和視覺元素以識別任何差異。 在 C# 中使用 IronPDF 進行 PDF 比較的第一步是什麼? 第一步是透過 NuGet 套件管理器在 C# 開發環境中安裝 IronPDF 庫,該庫提供了開始比較 PDF 所需的所有工具。 Curtis Chau 立即與工程團隊聊天 技術作家 Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。 相關文章 發表日期 11月 13, 2025 如何在 C# 中合併兩個 PDF 位元組數組 使用 IronPDF 在 C# 中合併兩個 PDF 位元組數組。學習如何透過簡單的程式碼範例,將來自位元組數組、記憶體流和資料庫的多個 PDF 文件合併在一起。 閱讀更多 發表日期 11月 13, 2025 如何在 ASP.NET MVC 中創建 PDF 檢視器 為 ASP.NET MVC 應用程式構建一個強大的 PDF 檢視器。顯示 PDF 文件,將視圖轉換為 PDF,使用 IronPDF 添加互動功能。 閱讀更多 發表日期 11月 13, 2025 如何建立 .NET HTML 轉 PDF 轉換器 學習如何在.NET中使用IronPDF將HTML轉換為PDF。 閱讀更多 如何在 .NET 中將 PDF 轉換為圖像如何在 .NET Core 中創建 PDF 文件
發表日期 11月 13, 2025 如何在 C# 中合併兩個 PDF 位元組數組 使用 IronPDF 在 C# 中合併兩個 PDF 位元組數組。學習如何透過簡單的程式碼範例,將來自位元組數組、記憶體流和資料庫的多個 PDF 文件合併在一起。 閱讀更多
發表日期 11月 13, 2025 如何在 ASP.NET MVC 中創建 PDF 檢視器 為 ASP.NET MVC 應用程式構建一個強大的 PDF 檢視器。顯示 PDF 文件,將視圖轉換為 PDF,使用 IronPDF 添加互動功能。 閱讀更多