產品比較 IronPDF vs ExpertPDF:資深 .NET 開發人員應該選擇哪個 C# PDF 程式庫? Curtis Chau 更新:2026年1月25日 下載 IronPDF NuGet 下載 DLL 下載 Windows Installer 開始免費試用 LLM副本 LLM副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 IronPDF憑藉著 Chrome V8 引擎的精確度和直覺的 API,在 HTML 到 PDF 的轉換方面表現出色;而 ExpertPDF 提供基本的 PDF 功能,但對.NET生產系統有更複雜的配置要求。 C# 開發人員在處理 PDF 檔案時經常面臨挑戰,無論是讀取、寫入、建立或在格式之間轉換。 為了滿足這些需求,湧現了許多函式庫,為 C# 應用程式提供了流暢的整合。 在開發C# PDF 報表時,選擇合適的函式庫會對開發時間和輸出品質產生重大影響。 要使用 C# 產生完整的 PDF 文件,了解庫的功能至關重要。 本文比較了兩個針對.NET開發人員的 PDF 函式庫: IronPDF ExpertPDF 這兩個函式庫都提供了在.NET環境中產生、轉換和編輯 PDF 的方法。 關鍵在於確定哪個庫最符合特定項目的需求。 此分析突顯了為決策提供資訊的關鍵特徵。 無論是實現HTML 到 PDF 的轉換、 PDF 編輯功能或文件組織功能,選擇合適的庫都至關重要。 什麼是IronPDF庫? IronPDF提供完整的.NET PDF 解決方案,對 C# 開發人員尤其有利。 該庫使得在 C# 應用程式中實現所有必要的PDF 功能成為可能。 該程式庫支援Azure 部署和AWS Lambda ,適用於雲端原生架構。 開發者可受益於出色的Windows 支援、 Linux 部署和macOS 相容性。 安裝概述提供了完整的安裝指導。 IronPDF整合了.NET Chromium 引擎,可將 HTML 內容渲染為 PDF,無需複雜的 API 即可簡化文件設計。這款HTML 轉 PDF 轉換器使用 HTML5、CSS、 JavaScript和圖像建立文件。 此外,開發人員還可以編輯 PDF 、新增頁首和頁尾以及擷取影像。 該庫透過可靠的文本提取功能簡化了文本閱讀。 對於生產環境, Chrome 渲染引擎可確保精確渲染。 IronPDF的主要功能有哪些? 如何從HTML建立PDF檔案? 使用HTML、CSS 和JavaScript建立 PDF 根據網站 URL產生文檔 載入包含憑證和HTTP標頭的URL 支援響應式 CSS 和媒體類型 完整的JavaScript執行,帶有渲染延遲 如何在不使用 Adobe Acrobat Reader 的情況下編輯 PDF 文件? 填寫並閱讀PDF表格 -提取文字和圖像並進行解析 在現有頁面上新增 HTML 內容 新增HTML 頁首/頁尾或文字為主的頁眉 新增註解和數位簽名 如何操作PDF文件? 從記憶體流載入和解析 合併和拆分文檔內容 新增浮水印、背景、文字和素材 -管理具有頁面旋轉功能的 PDF 頁面 應用轉換並操作 DOM 對象 我可以將哪些文件格式轉換為PDF? 用最少的程式碼轉換ASPX WebForms 轉換HTML 檔案和HTML ZIP 壓縮文件 -圖片轉PDF (PNG、JPG、GIF、TIFF) 支援格式的Markdown 轉 PDF DOCX 轉 PDF和XML 轉 PDF 如何儲存並列印PDF文件? 儲存為二進位資料或 MemoryStream 格式 -列印 CSS 媒體類型 將 PDF 轉換為列印文件對象 支援PDF/A 合規性和PDF/UA 可訪問性 匯出不同版本的PDF和線性化PDF ExpertPDF是什麼? 造訪 ExpertPDF 官方網站,探索其提供 HTML 轉 PDF 功能的.NET庫。 該庫無需複雜的報表軟體即可產生 PDF 報表。 對於尋求完整文件和API 參考的開發人員,建議使用IronPDF而不是 ExpertPDF,以獲得更豐富的資源。 ExpertPDF 提供簡單易用的 PDF 編輯功能。 HTML 轉 PDF 轉換器可以快速整合到.NET應用程式中。 雖然不支援Linux 部署和macOS ,但與.NET Framework、 .NET Core、 .NET 5 和.NET 6 相容。 對於容器化部署, IronPDF提供Docker 支持,而 ExpertPDF 不支援。 IronPDF也支援遠端容器部署以及原生引擎與遠端引擎選項。 該程式庫可以根據.NET應用程式中的網頁 URL 或原始 HTML 標記建立 PDF。 對於渲染 WebGL 網站或JavaScript 密集型應用程式等進階場景, IronPDF提供卓越的渲染能力。 快速入門指南可協助開發人員快速上手。 ExpertPDF的主要功能有哪些? 顯著特點包括: 將 URL 網頁轉換為 PDF 將 HTML 字串轉換為 PDF 多種輸出檔案選項 設定頁面邊距和尺寸 設定頁首和頁尾 新增自動和自訂分頁符 將網頁的特定部分轉換為 PDF 轉換過程中隱藏元素 將多個網頁合併成一個PDF文件 將已驗證的網頁轉換為 PDF 選擇要渲染的 CSS 媒體類型 書籤支持 數位簽名支持 取得 PDF 中的 HTML 元素位置 支援 HTML5/CSS3 支援網頁字體 文件類型轉換: PDF 轉文字轉換器 HTML 轉 PDF 轉換器 HTML 轉圖像轉換器 PDF 轉圖像轉換器 RTF 轉 PDF 轉換器 以下各節涵蓋以下內容: 建立一個控制台項目 IronPDF安裝 ExpertPDF 安裝 從 URL 建立 PDF 從 HTML 輸入字串建立 PDF 將多個 PDF 文件合併成一個 PDF 文件 將影像轉換為 PDF 許可和定價 結論 如何建立控制台專案? 請依照下列步驟使用 Visual Studio 2022 建立控制台應用程式: 開啟 Visual Studio 2022,然後按一下"建立新專案" Visual Studio 2022 歡迎介面(深色主題),顯示四個主要開發選項:複製儲存庫以進行協作專案、開啟專案或解決方案以進行現有工作、開啟本機資料夾以瀏覽文件,以及建立新專案以開始全新開發。 選擇"C# 控制台應用程式",然後按一下"下一步"。 Visual Studio 的"建立新專案"對話方塊展示了各種.NET專案模板,並附帶跨平台支援指示器,支援 Windows、Linux 和 macOS,包括控制台應用程式、類別庫和 MSTest 測試專案選項,以及語言和專案類型篩選器。 輸入項目名稱,然後按一下"下一步"。  選擇.NET Framework版本(使用最新的 6.0 版本) 控制台專案已建立完成,可以進行庫測試了。 這兩個庫都需要在使用前安裝。 更多詳情請參閱快速入門指南。 概述文件提供了完整的資訊。 如何安裝IronPDF? 有多種安裝方法可供選擇: 使用 Visual Studio 直接下載NuGet包 下載IronPDF .DLL 函式庫 更多詳情請參閱安裝概述。 此庫支援Windows 安裝程序,可進行系統級部署。 進階選項包括NuGet安裝和使用許可證金鑰。 如何使用 Visual Studio 安裝? Visual Studio 提供了NuGet套件管理器,用於安裝套件: 透過項目選單工具訪問,或 在解決方案資源管理器中以滑鼠右鍵按一下專案。 瀏覽並安裝IronPDF NuGet套件。 更多詳情請參閱NuGet安裝指南。 平台特定指南包括Android 整合、 F# 開發和.NET使用。 有關部署故障排除,請參閱NuGet套件部署失敗指南。 如何直接下載NuGet套件? 從NuGet網站下載IronPDF : 訪問NuGet IronPDF包 選擇"下載軟體包" 按兩下下載的軟體包 該軟體包自動安裝 重新載入 Visual Studio 如何下載並安裝IronPDF DLL? 直接從IronPDF網站下載IronPDF .DLL 檔案。 點選下載IronPDF DLL 。 項目參考IronPDF : 在解決方案資源管理器中以滑鼠右鍵按一下解決方案。 選擇"新增參考文獻" 瀏覽IronPDF庫 按一下"確定" IronPDF安裝完成。 如需Docker 部署和遠端引擎設定等其他選項,請參閱安裝概述。 如需進行故障排除,請參閱快速故障排除指南或探索初始渲染效能和GPU 處理最佳化。 運行時資料夾指南有助於依賴項管理。 如何安裝ExpertPDF? 有兩種安裝方法: 使用 Visual Studio NuGet套件管理器 下載組件(舊版.NET ) 使用適用於現代.NET框架的NuGet套件管理器安裝 ExpertPDF。 考慮使用IronPDF代替 ExpertPDF,以獲得更大的靈活性,它具有高級安裝方法和軟體包大小優化功能。 如何使用 Visual Studio NuGet套件管理器進行安裝? 存取NuGet套件管理器: 專案選單工具 在解決方案資源管理器中以滑鼠右鍵按一下項目 Visual Studio 解決方案資源管理器上下文選單,其中"新增"子選單中的"管理NuGet套件"選項已高亮顯示,可快速存取套件管理和相依性安裝功能。 瀏覽並安裝 ExpertPDF NuGet套件。 為了改進設置,請參考IronPDF 的使用聲明指南。 注意: ExpertPDF 僅支援 Windows,而IronPDF支援Windows 、 Linux和macOS 。 對於雲端部署, IronPDF提供Azure 整合和AWS Lambda 支援。 IronPDF提供完整的效能最佳化和記憶體管理指導。 有關具體平台,請參閱Red Hat Enterprise Linux 支援和Amazon Linux 2 上的 AWS Lambda 。 如何根據URL建立PDF? 這兩個庫都能將HTML轉換為PDF。 更多詳情請參閱連結指向的 PDF 指南。 複雜的網站可能需要自訂渲染延遲或JavaScript執行處理。 已認證的網站,請參閱TLS 網站和系統登入指南。 IronPDF使用Chrome 渲染技術,能夠實現像素級完美的 HTML 到 PDF 轉換。 IronPDF如何將 URL 轉換為 PDF? IronPDF能有效率地將 URL 中的 HTML 程式碼渲染成 PDF 檔案。 該程式庫為CSS 、 JavaScript 、圖像和表單提供進階支援。 使用Chrome 渲染引擎可確保HTML 到 PDF 的像素級完美轉換。 渲染問題,請參閱像素級完美 HTML 格式指南。 進階渲染選項包括自訂紙張尺寸和視窗配置。 JavaScript訊息監聽器支援動態內容處理。 此程式碼範例展示了IronPDF如何允許開發人員從網站 URL 建立 PDF 檔案: // Import the IronPdf library using IronPdf; // Initialize a new renderer ChromePdfRenderer renderer = new ChromePdfRenderer(); // Render the specified URL as a PDF var pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_190___"); // Save the rendered PDF to a file pdf.SaveAs("url.pdf"); // Import the IronPdf library using IronPdf; // Initialize a new renderer ChromePdfRenderer renderer = new ChromePdfRenderer(); // Render the specified URL as a PDF var pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_190___"); // Save the rendered PDF to a file pdf.SaveAs("url.pdf"); $vbLabelText $csharpLabel 有關已驗證的 URL,請參閱TLS 網站和系統登入指南。 為已認證的請求設定cookie和自訂 HTTP 標頭。 安全網站可能需要Kerberos身份驗證。 如需調試,請使用Chrome 調試指南。 其他範例則展示如何將 URL 轉換為 PDF 。 ExpertPDF 如何將 URL 轉換為 PDF? ExpertPDF 使用 savePdfFromUrlToFile 方法轉換 URL,並保留頁面格式: // Import the ExpertPdf.HtmlToPdf namespace using ExpertPdf.HtmlToPdf; // Initialize a new PdfConverter PdfConverter pdfConverter = new PdfConverter(); // Use PdfConverter to save a webpage URL directly to a PDF file pdfConverter.SavePdfFromUrlToFile("___PROTECTED_URL_191___", "output.pdf"); // Import the ExpertPdf.HtmlToPdf namespace using ExpertPdf.HtmlToPdf; // Initialize a new PdfConverter PdfConverter pdfConverter = new PdfConverter(); // Use PdfConverter to save a webpage URL directly to a PDF file pdfConverter.SavePdfFromUrlToFile("___PROTECTED_URL_191___", "output.pdf"); $vbLabelText $csharpLabel 在幕後, IronPDF使用其Chrome 渲染引擎來提供更好的HTML5 和 CSS3 支援。 如何根據HTML輸入字串建立PDF? 這兩個函式庫都能根據 HTML 字串建立 PDF 檔案。 更多詳情請參閱HTML 字串轉 PDF 指南。 使用CSS 實現螢幕和列印效果,並融入網頁字體和圖示字體。 IronPDF提供出色的Bootstrap 和 Flexbox CSS支援。 使用 HTML 建立 PDF 的範例展示了實際應用。 IronPDF如何將 HTML 字串轉換為 PDF? 此程式碼範例展示了IronPDF如何允許開發人員從 HTML 字串產生 PDF 文件: // Import the IronPdf library using IronPdf; // Initialize a new renderer ChromePdfRenderer renderer = new ChromePdfRenderer(); // Render a PDF from HTML string and save it var pdfDoc1 = renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>"); pdfDoc1.SaveAs("pixel-perfect.pdf"); // Render HTML with external assets and save it var pdfDoc2 = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\"); pdfDoc2.SaveAs("html-with-assets.pdf"); // Import the IronPdf library using IronPdf; // Initialize a new renderer ChromePdfRenderer renderer = new ChromePdfRenderer(); // Render a PDF from HTML string and save it var pdfDoc1 = renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>"); pdfDoc1.SaveAs("pixel-perfect.pdf"); // Render HTML with external assets and save it var pdfDoc2 = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\"); pdfDoc2.SaveAs("html-with-assets.pdf"); $vbLabelText $csharpLabel IronPDF支援相對路徑的基本 URL和用於嵌入圖像的資料 URI 。 有關複雜的 HTML 程式碼,請參閱HTML 檔案轉 PDF 指南。 有關特定視口設置,請參閱視口和縮放設定指南。該庫可無縫處理國際語言和 UTF-8 編碼。 進階功能包括HTML 渲染設定和響應式 HTML 到 PDF 轉換。 ExpertPDF 如何將 HTML 字串轉換為 PDF? ExpertPDF HTML 轉 PDF 轉換器支援 HTML 字串轉換: // Import the ExpertPdf.HtmlToPdf namespace using ExpertPdf.HtmlToPdf; // Initialize a new PdfConverter PdfConverter pdfConverter = new PdfConverter(); // Use PdfConverter to save an HTML string to a PDF file pdfConverter.SavePdfFromHtmlStringToFile("<h1>PDF using Expert PDF</h1>", "html-to-pdf.pdf"); // Import the ExpertPdf.HtmlToPdf namespace using ExpertPdf.HtmlToPdf; // Initialize a new PdfConverter PdfConverter pdfConverter = new PdfConverter(); // Use PdfConverter to save an HTML string to a PDF file pdfConverter.SavePdfFromHtmlStringToFile("<h1>PDF using Expert PDF</h1>", "html-to-pdf.pdf"); $vbLabelText $csharpLabel 第一個參數指定 HTML 字串,第二個參數指定輸出檔名。 為了獲得更強大的國際語言支持,請考慮使用 IronPDF 的Unicode 和 UTF-8 支援來取代基本的 HTML 渲染。 如何產生技術文件PDF? 技術文件可以從包含程式碼範例的結構化佈局中受益。 此 Bootstrap 5 示範展示了 IronPDF 渲染帶有語法高亮和警告功能的文件的能力。 有關更多詳細信息,請參閱Bootstrap 和 Flexbox CSS 支援指南。 IronPDF支援字型管理和字距調整,滿足專業排版需求。 為了獲得更好的效果,請查看字體故障排除指南和國際語言支援。 using IronPdf; var renderer = new ChromePdfRenderer(); string technicalDocs = @" <!DOCTYPE html> <html> <head> <meta charset='utf-8'> <link href='___PROTECTED_URL_192___ rel='stylesheet'> <style> .code-block { background: #f8f9fa; border-left: 3px solid #0d6efd; padding: 15px; border-radius: 4px; } .api-method { font-family: 'Courier New', monospace; color: #0d6efd; } @media print { .card, .alert { page-break-inside: avoid; } } </style> </head> <body class='bg-light'> <div class='container py-4'> <div class='card shadow-sm mb-4'> <div class='card-header bg-dark text-white'> <h2 class='mb-0'>API Reference - HTML to PDF Conversion</h2> </div> <div class='card-body'> <h4>RenderHtmlAsPdf() Method</h4> <p class='lead'>Converts HTML content to PDF with full CSS3 and JavaScript support.</p> <div class='code-block mb-3'> <code class='api-method'>PdfDocument RenderHtmlAsPdf(string htmlContent)</code> </div> <div class='row mt-4'> <div class='col-md-6'> <h5 class='text-primary'>Parameters</h5> <table class='table table-sm table-bordered'> <tr> <td><code>htmlContent</code></td> <td>String containing HTML to convert</td> </tr> </table> </div> <div class='col-md-6'> <h5 class='text-success'>Returns</h5> <table class='table table-sm table-bordered'> <tr> <td><code>PdfDocument</code></td> <td>Generated PDF document object</td> </tr> </table> </div> </div> </div> </div> <div class='row g-3 mb-4'> <div class='col-md-4'> <div class='alert alert-success mb-0'> <h6 class='alert-heading'>✓ Supported Features</h6> <ul class='mb-0 small'> <li>HTML5 semantic tags</li> <li>CSS3 with Flexbox/Grid</li> <li>JavaScript execution</li> <li>External stylesheets</li> </ul> </div> </div> <div class='col-md-4'> <div class='alert alert-info mb-0'> <h6 class='alert-heading'>ⓘ Rendering Engine</h6> <ul class='mb-0 small'> <li>Chrome V8 Engine</li> <li>98% browser fidelity</li> <li>Sub-second rendering</li> <li>Async/await support</li> </ul> </div> </div> <div class='col-md-4'> <div class='alert alert-warning mb-0'> <h6 class='alert-heading'>⚠ ExpertPDF Notes</h6> <ul class='mb-0 small'> <li>Complex API structure</li> <li>Limited CSS3 support</li> <li>No native JavaScript</li> <li>Requires configuration</li> </ul> </div> </div> </div> <div class='card shadow-sm'> <div class='card-header bg-primary text-white'> <h5 class='mb-0'>Code Example Comparison</h5> </div> <div class='card-body'> <div class='row'> <div class='col-md-6'> <h6 class='text-primary'>IronPDF (Simple)</h6> <div class='code-block'> <pre class='mb-0'><code>var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf");</code></pre> </div> <div class='badge bg-success mt-2'>3 Lines</div> </div> <div class='col-md-6'> <h6 class='text-warning'>ExpertPDF (Complex)</h6> <div class='code-block'> <pre class='mb-0'><code>var converter = new HtmlToPdfConverter(); converter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4; converter.NavigationTimeout = 60; byte[] result = converter.GetPdfBytesFromHtmlString(html); File.WriteAllBytes("output.pdf", result);</code></pre> </div> <div class='badge bg-warning text-dark mt-2'>5+ Lines</div> </div> </div> </div> <div class='card-footer text-muted'> <small><strong>Comparison:</strong> IronPDF provides a more intuitive API with less configuration overhead for common use cases.</small> </div> </div> </div> </body> </html>"; var pdf = renderer.RenderHtmlAsPdf(technicalDocs); pdf.SaveAs("technical-documentation.pdf"); using IronPdf; var renderer = new ChromePdfRenderer(); string technicalDocs = @" <!DOCTYPE html> <html> <head> <meta charset='utf-8'> <link href='___PROTECTED_URL_192___ rel='stylesheet'> <style> .code-block { background: #f8f9fa; border-left: 3px solid #0d6efd; padding: 15px; border-radius: 4px; } .api-method { font-family: 'Courier New', monospace; color: #0d6efd; } @media print { .card, .alert { page-break-inside: avoid; } } </style> </head> <body class='bg-light'> <div class='container py-4'> <div class='card shadow-sm mb-4'> <div class='card-header bg-dark text-white'> <h2 class='mb-0'>API Reference - HTML to PDF Conversion</h2> </div> <div class='card-body'> <h4>RenderHtmlAsPdf() Method</h4> <p class='lead'>Converts HTML content to PDF with full CSS3 and JavaScript support.</p> <div class='code-block mb-3'> <code class='api-method'>PdfDocument RenderHtmlAsPdf(string htmlContent)</code> </div> <div class='row mt-4'> <div class='col-md-6'> <h5 class='text-primary'>Parameters</h5> <table class='table table-sm table-bordered'> <tr> <td><code>htmlContent</code></td> <td>String containing HTML to convert</td> </tr> </table> </div> <div class='col-md-6'> <h5 class='text-success'>Returns</h5> <table class='table table-sm table-bordered'> <tr> <td><code>PdfDocument</code></td> <td>Generated PDF document object</td> </tr> </table> </div> </div> </div> </div> <div class='row g-3 mb-4'> <div class='col-md-4'> <div class='alert alert-success mb-0'> <h6 class='alert-heading'>✓ Supported Features</h6> <ul class='mb-0 small'> <li>HTML5 semantic tags</li> <li>CSS3 with Flexbox/Grid</li> <li>JavaScript execution</li> <li>External stylesheets</li> </ul> </div> </div> <div class='col-md-4'> <div class='alert alert-info mb-0'> <h6 class='alert-heading'>ⓘ Rendering Engine</h6> <ul class='mb-0 small'> <li>Chrome V8 Engine</li> <li>98% browser fidelity</li> <li>Sub-second rendering</li> <li>Async/await support</li> </ul> </div> </div> <div class='col-md-4'> <div class='alert alert-warning mb-0'> <h6 class='alert-heading'>⚠ ExpertPDF Notes</h6> <ul class='mb-0 small'> <li>Complex API structure</li> <li>Limited CSS3 support</li> <li>No native JavaScript</li> <li>Requires configuration</li> </ul> </div> </div> </div> <div class='card shadow-sm'> <div class='card-header bg-primary text-white'> <h5 class='mb-0'>Code Example Comparison</h5> </div> <div class='card-body'> <div class='row'> <div class='col-md-6'> <h6 class='text-primary'>IronPDF (Simple)</h6> <div class='code-block'> <pre class='mb-0'><code>var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf");</code></pre> </div> <div class='badge bg-success mt-2'>3 Lines</div> </div> <div class='col-md-6'> <h6 class='text-warning'>ExpertPDF (Complex)</h6> <div class='code-block'> <pre class='mb-0'><code>var converter = new HtmlToPdfConverter(); converter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4; converter.NavigationTimeout = 60; byte[] result = converter.GetPdfBytesFromHtmlString(html); File.WriteAllBytes("output.pdf", result);</code></pre> </div> <div class='badge bg-warning text-dark mt-2'>5+ Lines</div> </div> </div> </div> <div class='card-footer text-muted'> <small><strong>Comparison:</strong> IronPDF provides a more intuitive API with less configuration overhead for common use cases.</small> </div> </div> </div> </body> </html>"; var pdf = renderer.RenderHtmlAsPdf(technicalDocs); pdf.SaveAs("technical-documentation.pdf"); $vbLabelText $csharpLabel 輸出:包含 Bootstrap 5 卡片、警報、表格和程式碼區塊的專業技術文件 PDF。 IronPDF能夠精確渲染所有排版、間距工具和網格佈局,展現出卓越的文件產生能力。 如何建立佈局複雜的財務報表? 財務報告需要精確的表格格式和計算。 此範例示範了 IronPDF 使用 CSS Grid 和動態JavaScript進行複雜的財務佈局渲染。 有關更多詳細信息,請參閱PDF 中的JavaScript指南,包括自訂JavaScript執行。 為了優化文件品質和進行元資料管理以符合法規要求,財務文件可能需要進行PDF壓縮。 PDF 中的圖表渲染指南有助於資料視覺化。 using IronPdf; var renderer = new ChromePdfRenderer(); // Enable JavaScript for dynamic calculations renderer.RenderingOptions.EnableJavaScript = true; renderer.RenderingOptions.RenderDelay = 500; // Allow JS to execute string financialReport = @" <!DOCTYPE html> <html> <head> <meta charset='utf-8'> <style> @page { size: A4; margin: 20mm; } body { font-family: Arial, sans-serif; line-height: 1.6; } .header { text-align: center; margin-bottom: 30px; } .financial-grid { display: grid; grid-template-columns: 2fr 1fr 1fr; gap: 10px; margin-bottom: 20px; } .grid-header { background: #2c3e50; color: white; padding: 10px; font-weight: bold; } .grid-row { padding: 10px; border-bottom: 1px solid #ddd; } .grid-row:hover { background: #f9f9f9; } .amount { text-align: right; font-family: 'Courier New', monospace; } .positive { color: #27ae60; } .negative { color: #e74c3c; } .total-row { background: #ecf0f1; font-weight: bold; margin-top: 10px; } .footer-note { font-size: 0.8em; color: #666; margin-top: 30px; text-align: center; } @media print { .grid-row:hover { background: transparent; } .financial-grid { page-break-inside: avoid; } } </style> </head> <body> <div class='header'> <h1>Quarterly Financial Report</h1> <p>Q4 2023 - Consolidated Statement</p> </div> <div class='financial-grid'> <div class='grid-header'>Revenue Stream</div> <div class='grid-header amount'>Q3 2023</div> <div class='grid-header amount'>Q4 2023</div> <div class='grid-row'>Software Licenses</div> <div class='grid-row amount'>$2,150,000</div> <div class='grid-row amount positive'>$2,875,000</div> <div class='grid-row'>Support Services</div> <div class='grid-row amount'>$850,000</div> <div class='grid-row amount positive'>$975,000</div> <div class='grid-row'>Consulting</div> <div class='grid-row amount'>$425,000</div> <div class='grid-row amount negative'>$380,000</div> <div class='grid-row total-row'>Total Revenue</div> <div class='grid-row total-row amount'>$3,425,000</div> <div class='grid-row total-row amount positive' id='total'>$4,230,000</div> </div> <div class='financial-grid'> <div class='grid-header'>Operating Expenses</div> <div class='grid-header amount'>Q3 2023</div> <div class='grid-header amount'>Q4 2023</div> <div class='grid-row'>R&D</div> <div class='grid-row amount'>$1,200,000</div> <div class='grid-row amount'>$1,350,000</div> <div class='grid-row'>Sales & Marketing</div> <div class='grid-row amount'>$800,000</div> <div class='grid-row amount'>$950,000</div> <div class='grid-row'>General & Admin</div> <div class='grid-row amount'>$400,000</div> <div class='grid-row amount'>$425,000</div> <div class='grid-row total-row'>Total Expenses</div> <div class='grid-row total-row amount'>$2,400,000</div> <div class='grid-row total-row amount'>$2,725,000</div> </div> <script> // Calculate growth percentage const q3Total = 3425000; const q4Total = 4230000; const growth = ((q4Total - q3Total) / q3Total * 100).toFixed(1); // Add growth indicator const totalEl = document.getElementById('total'); totalEl.innerHTML += ` <small>(+${growth}%)</small>`; </script> <div class='footer-note'> <p>This report was generated using IronPDF's advanced rendering engine.<br> All financial figures are in USD. Report generated on: <span id='date'></span></p> </div> <script> document.getElementById('date').textContent = new Date().toLocaleDateString(); </script> </body> </html>"; var pdf = renderer.RenderHtmlAsPdf(financialReport); pdf.SaveAs("financial-report.pdf"); using IronPdf; var renderer = new ChromePdfRenderer(); // Enable JavaScript for dynamic calculations renderer.RenderingOptions.EnableJavaScript = true; renderer.RenderingOptions.RenderDelay = 500; // Allow JS to execute string financialReport = @" <!DOCTYPE html> <html> <head> <meta charset='utf-8'> <style> @page { size: A4; margin: 20mm; } body { font-family: Arial, sans-serif; line-height: 1.6; } .header { text-align: center; margin-bottom: 30px; } .financial-grid { display: grid; grid-template-columns: 2fr 1fr 1fr; gap: 10px; margin-bottom: 20px; } .grid-header { background: #2c3e50; color: white; padding: 10px; font-weight: bold; } .grid-row { padding: 10px; border-bottom: 1px solid #ddd; } .grid-row:hover { background: #f9f9f9; } .amount { text-align: right; font-family: 'Courier New', monospace; } .positive { color: #27ae60; } .negative { color: #e74c3c; } .total-row { background: #ecf0f1; font-weight: bold; margin-top: 10px; } .footer-note { font-size: 0.8em; color: #666; margin-top: 30px; text-align: center; } @media print { .grid-row:hover { background: transparent; } .financial-grid { page-break-inside: avoid; } } </style> </head> <body> <div class='header'> <h1>Quarterly Financial Report</h1> <p>Q4 2023 - Consolidated Statement</p> </div> <div class='financial-grid'> <div class='grid-header'>Revenue Stream</div> <div class='grid-header amount'>Q3 2023</div> <div class='grid-header amount'>Q4 2023</div> <div class='grid-row'>Software Licenses</div> <div class='grid-row amount'>$2,150,000</div> <div class='grid-row amount positive'>$2,875,000</div> <div class='grid-row'>Support Services</div> <div class='grid-row amount'>$850,000</div> <div class='grid-row amount positive'>$975,000</div> <div class='grid-row'>Consulting</div> <div class='grid-row amount'>$425,000</div> <div class='grid-row amount negative'>$380,000</div> <div class='grid-row total-row'>Total Revenue</div> <div class='grid-row total-row amount'>$3,425,000</div> <div class='grid-row total-row amount positive' id='total'>$4,230,000</div> </div> <div class='financial-grid'> <div class='grid-header'>Operating Expenses</div> <div class='grid-header amount'>Q3 2023</div> <div class='grid-header amount'>Q4 2023</div> <div class='grid-row'>R&D</div> <div class='grid-row amount'>$1,200,000</div> <div class='grid-row amount'>$1,350,000</div> <div class='grid-row'>Sales & Marketing</div> <div class='grid-row amount'>$800,000</div> <div class='grid-row amount'>$950,000</div> <div class='grid-row'>General & Admin</div> <div class='grid-row amount'>$400,000</div> <div class='grid-row amount'>$425,000</div> <div class='grid-row total-row'>Total Expenses</div> <div class='grid-row total-row amount'>$2,400,000</div> <div class='grid-row total-row amount'>$2,725,000</div> </div> <script> // Calculate growth percentage const q3Total = 3425000; const q4Total = 4230000; const growth = ((q4Total - q3Total) / q3Total * 100).toFixed(1); // Add growth indicator const totalEl = document.getElementById('total'); totalEl.innerHTML += ` <small>(+${growth}%)</small>`; </script> <div class='footer-note'> <p>This report was generated using IronPDF's advanced rendering engine.<br> All financial figures are in USD. Report generated on: <span id='date'></span></p> </div> <script> document.getElementById('date').textContent = new Date().toLocaleDateString(); </script> </body> </html>"; var pdf = renderer.RenderHtmlAsPdf(financialReport); pdf.SaveAs("financial-report.pdf"); $vbLabelText $csharpLabel 此程式碼範例展示了IronPDF如何允許開發人員使用CSS Grid 佈局、 JavaScript執行和特定於列印的 CSS 。 為報告添加自訂頁首和頁腳,實現品牌推廣的背景和前景,實現安全浮水印,實現身份驗證的數位簽名。 更多詳情請參閱產生 PDF 報告指南。 如何將多個PDF檔案合併成一個PDF檔案? 這兩個庫都將多個 PDF 文件合併成一個文檔,從而整合資料以實現高效傳輸。 有關合併或分割 PDF 的更多詳細信息,請參閱相關指南。 多頁文件可能需要進行頁面管理或拆分多頁 PDF 文件。 對於大檔案效能,請考慮非同步 PDF 產生或並行處理。 合併兩個或多個 PDF 文件的範例提供了實際應用。 IronPDF提供完整的工具來整理 PDF 文件。 IronPDF如何合併PDF文件? 此程式碼範例展示了IronPDF如何允許開發人員從 HTML 字串渲染兩個 PDF 並將它們合併。 這種簡單的方法提供了額外的設定選項。 有關合併文件中的頁碼和分頁符,請參閱相應的指南。 此外,還可以複製 PDF 文件中的頁面,以便進行更精細的控制。 有關表單,請參閱表單管理和編輯表單文件。 頁碼和分頁符號範例展示了組合實作方式。 // Import the IronPdf library using IronPdf; // Define HTML strings to convert to PDF var htmlA = @"<p> [PDF_A] </p> <p> [PDF_A] 1st Page </p> <div style='page-break-after: always;'></div> <p> [PDF_A] 2nd Page</p>"; var htmlB = @"<p> [PDF_B] </p> <p> [PDF_B] 1st Page </p> <div style='page-break-after: always;'></div> <p> [PDF_B] 2nd Page</p>"; // Initialize a new renderer var renderer = new ChromePdfRenderer(); // Render HTML strings as PDFs var pdfDocA = renderer.RenderHtmlAsPdf(htmlA); var pdfDocB = renderer.RenderHtmlAsPdf(htmlB); // Merge the PDF documents var mergedPdf = PdfDocument.Merge(pdfDocA, pdfDocB); // Save the merged PDF mergedPdf.SaveAs("Merged.pdf"); // Import the IronPdf library using IronPdf; // Define HTML strings to convert to PDF var htmlA = @"<p> [PDF_A] </p> <p> [PDF_A] 1st Page </p> <div style='page-break-after: always;'></div> <p> [PDF_A] 2nd Page</p>"; var htmlB = @"<p> [PDF_B] </p> <p> [PDF_B] 1st Page </p> <div style='page-break-after: always;'></div> <p> [PDF_B] 2nd Page</p>"; // Initialize a new renderer var renderer = new ChromePdfRenderer(); // Render HTML strings as PDFs var pdfDocA = renderer.RenderHtmlAsPdf(htmlA); var pdfDocB = renderer.RenderHtmlAsPdf(htmlB); // Merge the PDF documents var mergedPdf = PdfDocument.Merge(pdfDocA, pdfDocB); // Save the merged PDF mergedPdf.SaveAs("Merged.pdf"); $vbLabelText $csharpLabel Merge 方法接受多個文件為 Enumerable 物件。 請參閱IronPDF合併 PDF 程式碼範例。 如需新增封面或建立目錄,請參閱專門指南。 也可以新增內容或附件。 分割 PDF 並提取頁面的範例示範了逆向操作。 請注意,包含可編輯表單的合併 PDF 檔案中,表單欄位名稱會附加索引號碼。 更多詳情請參閱表單資料處理指南。 ExpertPDF如何合併PDF文件? ExpertPDF 使用需要單獨安裝的 Merge PDF 組件。 AppendPDFFile 方法將檔案追加到 PDFMerge 物件中: // Import the ExpertPdf.MergePdf namespace using ExpertPdf.MergePdf; // Initialize a new PDFMerge object PDFMerge pdfMerge = new PDFMerge(); // Append PDF files to the merge object pdfMerge.AppendPDFFile("output.pdf"); pdfMerge.AppendPDFFile("html-to-pdf.pdf"); // Save the merged PDF to a file pdfMerge.SaveMergedPDFToFile("merged.pdf"); // Import the ExpertPdf.MergePdf namespace using ExpertPdf.MergePdf; // Initialize a new PDFMerge object PDFMerge pdfMerge = new PDFMerge(); // Append PDF files to the merge object pdfMerge.AppendPDFFile("output.pdf"); pdfMerge.AppendPDFFile("html-to-pdf.pdf"); // Save the merged PDF to a file pdfMerge.SaveMergedPDFToFile("merged.pdf"); $vbLabelText $csharpLabel IronPDF在底層使用了更有效率的合併演算法。 為了獲得更高的效能,請考慮使用 IronPDF 的非同步 PDF 產生和多執行緒產生功能來取代同步操作。 如何實現具有文件組織的高階PDF合併功能? 企業應用程式在合併 PDF 時需要書籤、頁面組織和元資料保留等進階功能。 本範例示範了書籤管理、元資料處理和文件組織。 為了符合規定,請實施修訂歷史記錄、 PDF/A 轉換和PDF/UA 可存取性。 大綱和書籤範例提供了更多實作細節。 有關更多詳細信息,請參閱設定和編輯元資料指南以及元資料可見性故障排除。 using IronPdf; using System.Collections.Generic; using System.Linq; public class AdvancedPdfMerger { public static void MergeDocumentsWithBookmarks() { var renderer = new ChromePdfRenderer(); var documentsToMerge = new List<PdfDocument>(); // Create chapter PDFs with proper structure string[] chapters = { "Introduction", "Technical Overview", "Implementation", "Conclusion" }; foreach (var chapter in chapters) { string html = $@" <html> <head> <style> body {{ font-family: Georgia, serif; margin: 40px; }} h1 {{ color: #2c3e50; border-bottom: 2px solid #3498db; padding-bottom: 10px; }} .chapter-number {{ color: #7f8c8d; font-size: 0.8em; }} </style> </head> <body> <h1><span class='chapter-number'>Chapter {Array.IndexOf(chapters, chapter) + 1}</span><br>{chapter}</h1> <p>This is the content for the {chapter} chapter. In a real document, this would contain extensive content, diagrams, and detailed explanations.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </body> </html>"; var pdf = renderer.RenderHtmlAsPdf(html); // Add metadata to each chapter pdf.MetaData.Title = $"Chapter: {chapter}"; pdf.MetaData.Author = "Technical Documentation Team"; pdf.MetaData.Subject = "Enterprise PDF Generation"; documentsToMerge.Add(pdf); } // Create a table of contents string tocHtml = @" <html> <head> <style> body { font-family: Georgia, serif; margin: 40px; } h1 { text-align: center; color: #2c3e50; margin-bottom: 40px; } .toc-entry { margin: 15px 0; font-size: 1.1em; } .toc-entry a { text-decoration: none; color: #3498db; } .page-number { float: right; color: #7f8c8d; } </style> </head> <body> <h1>Table of Contents</h1>"; int pageNumber = 2; // Starting after TOC page foreach (var chapter in chapters) { tocHtml += $@" <div class='toc-entry'> <a href='#'>Chapter {Array.IndexOf(chapters, chapter) + 1}: {chapter}</a> <span class='page-number'>{pageNumber}</span> </div>"; pageNumber += 2; // Assuming each chapter is 2 pages } tocHtml += @" </body> </html>"; var tocPdf = renderer.RenderHtmlAsPdf(tocHtml); // Merge all documents with TOC first var allDocuments = new List<PdfDocument> { tocPdf }; allDocuments.AddRange(documentsToMerge); var finalPdf = PdfDocument.Merge(allDocuments); // Add bookmarks for navigation finalPdf.BookMarks.AddBookMarkAtStart("Table of Contents", 0); int currentPage = 1; // After TOC foreach (var chapter in chapters) { finalPdf.BookMarks.AddBookMarkAtStart($"Chapter {Array.IndexOf(chapters, chapter) + 1}: {chapter}", currentPage); currentPage += 2; } // Set document properties finalPdf.MetaData.Title = "Complete Technical Documentation"; finalPdf.MetaData.Keywords = "IronPDF, Documentation, Enterprise, .NET"; finalPdf.MetaData.CreationDate = System.DateTime.Now; // Add page numbers to footer finalPdf.AddTextFooters("Page {page} of {total-pages}", new ChromePdfRenderer.ChromePdfRenderOptions() { MarginBottom = 20, MarginLeft = 50, MarginRight = 50 }); finalPdf.SaveAs("advanced-merged-document.pdf"); } } using IronPdf; using System.Collections.Generic; using System.Linq; public class AdvancedPdfMerger { public static void MergeDocumentsWithBookmarks() { var renderer = new ChromePdfRenderer(); var documentsToMerge = new List<PdfDocument>(); // Create chapter PDFs with proper structure string[] chapters = { "Introduction", "Technical Overview", "Implementation", "Conclusion" }; foreach (var chapter in chapters) { string html = $@" <html> <head> <style> body {{ font-family: Georgia, serif; margin: 40px; }} h1 {{ color: #2c3e50; border-bottom: 2px solid #3498db; padding-bottom: 10px; }} .chapter-number {{ color: #7f8c8d; font-size: 0.8em; }} </style> </head> <body> <h1><span class='chapter-number'>Chapter {Array.IndexOf(chapters, chapter) + 1}</span><br>{chapter}</h1> <p>This is the content for the {chapter} chapter. In a real document, this would contain extensive content, diagrams, and detailed explanations.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </body> </html>"; var pdf = renderer.RenderHtmlAsPdf(html); // Add metadata to each chapter pdf.MetaData.Title = $"Chapter: {chapter}"; pdf.MetaData.Author = "Technical Documentation Team"; pdf.MetaData.Subject = "Enterprise PDF Generation"; documentsToMerge.Add(pdf); } // Create a table of contents string tocHtml = @" <html> <head> <style> body { font-family: Georgia, serif; margin: 40px; } h1 { text-align: center; color: #2c3e50; margin-bottom: 40px; } .toc-entry { margin: 15px 0; font-size: 1.1em; } .toc-entry a { text-decoration: none; color: #3498db; } .page-number { float: right; color: #7f8c8d; } </style> </head> <body> <h1>Table of Contents</h1>"; int pageNumber = 2; // Starting after TOC page foreach (var chapter in chapters) { tocHtml += $@" <div class='toc-entry'> <a href='#'>Chapter {Array.IndexOf(chapters, chapter) + 1}: {chapter}</a> <span class='page-number'>{pageNumber}</span> </div>"; pageNumber += 2; // Assuming each chapter is 2 pages } tocHtml += @" </body> </html>"; var tocPdf = renderer.RenderHtmlAsPdf(tocHtml); // Merge all documents with TOC first var allDocuments = new List<PdfDocument> { tocPdf }; allDocuments.AddRange(documentsToMerge); var finalPdf = PdfDocument.Merge(allDocuments); // Add bookmarks for navigation finalPdf.BookMarks.AddBookMarkAtStart("Table of Contents", 0); int currentPage = 1; // After TOC foreach (var chapter in chapters) { finalPdf.BookMarks.AddBookMarkAtStart($"Chapter {Array.IndexOf(chapters, chapter) + 1}: {chapter}", currentPage); currentPage += 2; } // Set document properties finalPdf.MetaData.Title = "Complete Technical Documentation"; finalPdf.MetaData.Keywords = "IronPDF, Documentation, Enterprise, .NET"; finalPdf.MetaData.CreationDate = System.DateTime.Now; // Add page numbers to footer finalPdf.AddTextFooters("Page {page} of {total-pages}", new ChromePdfRenderer.ChromePdfRenderOptions() { MarginBottom = 20, MarginLeft = 50, MarginRight = 50 }); finalPdf.SaveAs("advanced-merged-document.pdf"); } } $vbLabelText $csharpLabel 此高階實作示範了書籤管理、元資料處理和頁碼標註。 更多詳情請參閱"整理 PDF"教學。 合併後探索PDF壓縮技術。 為了安全起見,請實施密碼保護和加密。 新增經典文字頁首和頁尾範例提供了格式設定選項。 如需更多功能,請探索新增頁碼和新增目錄指南。 密碼、安全性和元資料範例展示了整合實作。 如何將圖片轉換為PDF? IronPDF可以將各種影像轉換為 PDF,這是 ExpertPDF 不具備的功能。 但是,ExpertPDF 可以從 PDF 中提取影像並將 PDF 轉換為影像, IronPDF也具備這些功能。 更多詳情請參考圖片轉PDF指南。 IronPDF支援將 PDF 柵格化為圖像以及擷取文字和圖像。 對於進階場景,可以繪製文字和點陣圖,或繪製線條和矩形。 圖片轉PDF範例展示了實際應用。 有關影像質量,請參閱C# PDF 轉影像而不損失品質範例。 IronPDF如何將影像轉換為 PDF? 從影像建立 PDF 使用的是 ImageToPdfConverter 類別。 可以從任何資料夾載入圖像,支援多種格式,包括多頁 TIFF 檔案。 也可以為現有 PDF 檔案中新增影像或使用SVG 圖形。 為了提高記憶體效率,請使用 MemoryStream 對圖像進行柵格化。 自訂 PDF 尺寸範例有助於控制佈局。 // Import the IronPdf namespace using IronPdf; // Specify the folder containing the image files var imageFiles = System.IO.Directory.EnumerateFiles(@"C:\project\assets") .Where(file => file.EndsWith(".jpg") || file.EndsWith(".jpeg")); // Convert the images to a PDF document var pdfDocument = ImageToPdfConverter.ImageToPdf(imageFiles); // Save the PDF document pdfDocument.SaveAs(@"C:\project\composite.pdf"); // Import the IronPdf namespace using IronPdf; // Specify the folder containing the image files var imageFiles = System.IO.Directory.EnumerateFiles(@"C:\project\assets") .Where(file => file.EndsWith(".jpg") || file.EndsWith(".jpeg")); // Convert the images to a PDF document var pdfDocument = ImageToPdfConverter.ImageToPdf(imageFiles); // Save the PDF document pdfDocument.SaveAs(@"C:\project\composite.pdf"); $vbLabelText $csharpLabel 除了將影像轉換為 PDF 之外, IronPDF還使用柵格化到影像功能將掃描文件和商業文件轉換為影像。 該庫還可以從各種文件類型中提取圖像。有關記憶體操作,請參閱使用 MemoryStream 將圖像柵格化指南。 對於大型影像,請考慮最佳化 ImageToPDF 檔案大小。 縱向和橫向方向範例有助於頁面設定。有關進階影像處理,請參閱嵌入點陣圖和影像範例。 如何使用佈局控制建立進階影像到 PDF 轉換? 為了實現可控的影像放置和專業佈局,本相簿範例示範如何嵌入影像和建立佈局。 有關雲端存儲,請參閱Azure Blob 存儲映像指南。 灰階影像範例展示了影像處理選項: using IronPdf; using System.IO; public class PhotoAlbumCreator { public static void CreatePhotoAlbum(string imagesFolder, string outputPath) { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4; renderer.RenderingOptions.MarginTop = 20; renderer.RenderingOptions.MarginBottom = 20; renderer.RenderingOptions.MarginLeft = 20; renderer.RenderingOptions.MarginRight = 20; string htmlContent = @" <!DOCTYPE html> <html> <head> <style> body { font-family: Arial, sans-serif; } .album-title { text-align: center; font-size: 2em; margin-bottom: 30px; color: #2c3e50; } .photo-container { margin-bottom: 30px; text-align: center; page-break-inside: avoid; } .photo { max-width: 100%; max-height: 500px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); } .caption { margin-top: 10px; font-style: italic; color: #666; } .page-break { page-break-after: always; } </style> </head> <body> <h1 class='album-title'>My Photo Album</h1>"; var imageFiles = Directory.GetFiles(imagesFolder, "*.*") .Where(file => new[] { ".jpg", ".jpeg", ".png", ".gif" } .Contains(Path.GetExtension(file).ToLower())) .ToList(); for (int i = 0; i < imageFiles.Count; i++) { string base64Image = Convert.ToBase64String(File.ReadAllBytes(imageFiles[i])); string fileName = Path.GetFileNameWithoutExtension(imageFiles[i]); htmlContent += $@" <div class='photo-container'> <img class='photo' src='data:image/jpeg;base64,{base64Image}' alt='{fileName}'> <div class='caption'>Photo {i + 1}: {fileName}</div> </div>"; // Add page break every 2 photos if ((i + 1) % 2 == 0 && i < imageFiles.Count - 1) { htmlContent += "<div class='page-break'></div>"; } } htmlContent += @" <div style='text-align: center; margin-top: 40px; color: #999;'> <small>Created with IronPDF - Total Photos: " + imageFiles.Count + @"</small> </div> </body> </html>"; var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs(outputPath); } } // Usage PhotoAlbumCreator.CreatePhotoAlbum(@"C:\MyPhotos", @"C:\MyPhotoAlbum.pdf"); using IronPdf; using System.IO; public class PhotoAlbumCreator { public static void CreatePhotoAlbum(string imagesFolder, string outputPath) { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4; renderer.RenderingOptions.MarginTop = 20; renderer.RenderingOptions.MarginBottom = 20; renderer.RenderingOptions.MarginLeft = 20; renderer.RenderingOptions.MarginRight = 20; string htmlContent = @" <!DOCTYPE html> <html> <head> <style> body { font-family: Arial, sans-serif; } .album-title { text-align: center; font-size: 2em; margin-bottom: 30px; color: #2c3e50; } .photo-container { margin-bottom: 30px; text-align: center; page-break-inside: avoid; } .photo { max-width: 100%; max-height: 500px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); } .caption { margin-top: 10px; font-style: italic; color: #666; } .page-break { page-break-after: always; } </style> </head> <body> <h1 class='album-title'>My Photo Album</h1>"; var imageFiles = Directory.GetFiles(imagesFolder, "*.*") .Where(file => new[] { ".jpg", ".jpeg", ".png", ".gif" } .Contains(Path.GetExtension(file).ToLower())) .ToList(); for (int i = 0; i < imageFiles.Count; i++) { string base64Image = Convert.ToBase64String(File.ReadAllBytes(imageFiles[i])); string fileName = Path.GetFileNameWithoutExtension(imageFiles[i]); htmlContent += $@" <div class='photo-container'> <img class='photo' src='data:image/jpeg;base64,{base64Image}' alt='{fileName}'> <div class='caption'>Photo {i + 1}: {fileName}</div> </div>"; // Add page break every 2 photos if ((i + 1) % 2 == 0 && i < imageFiles.Count - 1) { htmlContent += "<div class='page-break'></div>"; } } htmlContent += @" <div style='text-align: center; margin-top: 40px; color: #999;'> <small>Created with IronPDF - Total Photos: " + imageFiles.Count + @"</small> </div> </body> </html>"; var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs(outputPath); } } // Usage PhotoAlbumCreator.CreatePhotoAlbum(@"C:\MyPhotos", @"C:\MyPhotoAlbum.pdf"); $vbLabelText $csharpLabel 此程式碼範例展示了IronPDF如何允許開發人員使用 DataURI 嵌入圖像、管理分頁符號和建立專業佈局。 有關雲端鏡像,請參閱Azure Blob 儲存鏡像指南。 對於大型文件,請考慮最佳化 ImageToPDF 文件大小。 此外,還可以縮放 PDF 對象和平移 PDF 對象,以實現精確定位。 將 PDF 匯出到記憶體的範例有助於實現記憶體高效的工作流程。 請參閱高效率新增 HTML 內容指南,以了解如何進行批次處理。 有哪些授權和定價方案? IronPDF是一個商業性的C# PDF 庫,可從IronPDF網站取得。免費用於個人開發,商業用途需獲得許可。 我們為單一專案、開發者、機構和公司提供各種許可證。 支援SaaS和OEM再分發。 有關實作細節,請參閱許可證金鑰指南。 部署時,請正確套用許可證密鑰。 對於 Web 應用程序,請在 Web.config 中設定許可證金鑰。 如果遇到許可伺服器連線問題,請參閱故障排除指南。使用許可證金鑰指南提供了完整的實作細節。 Visual Studio IDE 工具選單,顯示NuGet套件管理器選項,包括套件管理器控制台和"管理解決方案的NuGet套件",為.NET開發專案提供集中式相依性管理。 所有許可證均包含 30 天退款保證、一年技術支援和產品更新。 永久許可證只需一次性購買,無需額外費用。 適用於單一開發者/專案的輕量級軟體包從 $799 開始。 如需第一年後的技術支持,請參閱許可證延期條款。 若要升級以獲得更多功能或部署,請查看許可證升級。 有關IronPDF和 IIS部署或將IronPDF新增至軟體安裝程序,請參閱專門指南。 ClickOnce 版本不相容性指南有助於解決部署問題。 ExpertPDF提供按開發者或按公司劃分的許可。 免費試用ExpertPDF 。 請查看以下許可功能。 考慮使用 IronPDF 的透明許可選項來代替 ExpertPDF,以獲得更高的價值和更全面的支援。 NuGet套件管理器介面顯示了六個 ExpertPDF 庫及其下載統計信息,包括 HTML 轉 PDF 轉換器(下載量 14.5 萬次)和各種專業的 PDF 處理工具,所有庫的版本均為 11.0.2.0 ExpertComponents 工具包總開發者授權起價 850 美元,ExpertPDF 工具包起價為 750 美元。可單獨購買各個組件。 查看ExpertPDF的完整定價。 對於企業級需求,IronPDF 的授權方案提供更全面的功能集,性價比更高。 我應該選擇哪個PDF庫? IronPDF無需網路連線即可在本地將 HTML 渲染成 PDF,模擬符合標準的網頁瀏覽器。 HTML渲染器可產生精確的向量格式輸出,適用於商業印刷。 已取得商業用途許可,價格透明。 對於企業部署, IronPDF提供Docker 支援和遠端引擎功能。 請參閱以遠端容器方式執行IronPDF以及原生引擎與遠端引擎選項的指南。 該庫提供IronPdf.Slim以減少部署大小,並支援軟體包大小最佳化。 IronPdf.Slim v2025.5.6 部署異常指南可協助解決特定版本問題。 ExpertPDF 的 HTML 轉 PDF 轉換器庫可以將網頁和 HTML 轉換為 PDF,從ASP.NET產生報告,並進行電子合約簽署。 免費使用,但需購買附加功能。 與 IronPDF 提供的完整平台支援(包括Android 部署)不同,ExpertPDF 僅限於 Windows 平台。 IronPDF在幕後採用了先進的安全功能和定期的產品更新。 里程碑概述展示了持續改進,包括Chrome 渲染里程碑、相容性里程碑以及穩定性和效能里程碑。 雖然這兩個庫都能處理 PDF 並轉換常用格式,但IronPDF比 ExpertPDF 具有優勢。 IronPDF可轉換的格式範圍更廣,包括XML 、映像、 AngularJS 、 Markdown和RTF ,並具有可靠的 PDF 生成、格式化和編輯功能。 這確保開發人員能夠有效率地進行務實開發。 該庫在效能提升方面表現出色,對高吞吐量場景的非同步支援尤為突出。 對於並發處理, IronPDF支援並行 PDF 產生和多執行緒產生。 有關優化詳情,請參閱初始渲染緩慢故障排除指南。 ExpertPDF 需要單獨安裝組件,而IronPDF則整合了所有功能。 當項目需要完整的PDF功能時,這尤其有用。 IronPDF方案提供終身許可證,無需持續付費,而 ExpertPDF 則需要續約。 此外, IronPDF還提供完整的文件、 API 參考和程式碼範例,方便使用者快速入門。 演示部分展示了實際應用案例。 如需進行故障排除,請參閱快速故障排除指南或探索初始渲染效能和GPU 處理最佳化。 取得最佳支援指南可確保高效解決問題。 對於生產部署, IronPDF提供卓越的調試功能、自訂日誌記錄和全面的故障排除指南。 該庫支援高級功能: PDF/A 合規性、 PDF/UA 可訪問性、帶 HSM 的數位簽名以及安全處理清理。 對於企業安全, IronPDF提供加密和解密、密碼保護和完整的安全功能。 進階功能包括編輯文字、展平 PDF和管理 PDF 版本。 將 PDF 轉換為 base64 的指南有助於資料傳輸。 在支援和開發方面, IronPDF提供工程支持,並附有詳細的支持請求指南。 圖書館產品更新和里程碑體現了持續改進。 對於.NET MAUI開發人員, IronPDF提供PDF 檢視功能和XAML 到 PDF 的轉換。 Blazor開發人員使用Blazor伺服器整合和Razor到 PDF 的轉換。 該庫支援 MVC 應用程式的CSHTML 到 PDF 轉換和無頭 CSHTML 渲染。 有關限制,請參閱Blazor Server / WebAssembly 指南。 對於特殊用途, IronPDF整合了OpenAI,可進行智慧處理,在 PDF 中渲染圖表,在 MVC 應用程式中將 CSHTML 轉換為 PDF ,並支援國際語言和 UTF-8 。 該庫可以處理複雜的場景:展平 PDF 、線性化以實現快速網頁瀏覽以及建立 PDF 表單。 探索如何轉換 PDF 頁面、刪除 PDF 物件以及設定自訂臨時路徑。 IronPDF 的完整功能概述展示了建立 PDF 、轉換 PDF 、編輯 PDF 、組織 PDF和保護 PDF 的功能。 其他功能包括使用 C# 讀取 PDF 文件、文字查找和替換以及刪除特定的 PDF 頁面。 如需部署注意事項,請參閱 在本機電腦上偵錯 Azure Functions 、 Azure 日誌檔案管理、 AWS 日誌檔案處理以及502 Bad Gateway 錯誤的解決方案。 IronPDF提供完整的錯誤處理,包括存取路徑被拒絕解決方案、 Chrome 依賴項部署、 PDFium 依賴項部署和錯誤分配解決方案。 平台特定支援包括Linux 特定指南、 macOS 原生例外狀況和Windows Nano Server 限制。 安全功能包括Log4j 漏洞狀態和防止AWS Lambda 上的段錯誤。 請注意ExpertPDF 是其各自所有者的註冊商標。 本網站與ExpertPDF無任何關聯,亦未獲得其認可或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供參考,反映的是撰寫本文時可公開取得的資訊。 常見問題解答 怎樣在 C# 中將 HTML 轉換為 PDF? 您可以使用 IronPDF 的 RenderHtmlAsPdf 方法將 HTML 字符串轉換為 PDF。您還可以使用 RenderHtmlFileAsPdf 將 HTML 文件轉換為 PDF。 IronPDF 和 ExpertPDF 的主要差別是什麼? IronPDF 提供更廣泛的格式支持和整合功能,包括從 HTML 創建 PDF,編輯和格式轉換。ExpertPDF 提供簡單的 HTML 到 PDF 轉換,並具有輸出文件配置和數位簽名的選項。 我可以使用這些庫從 PDF 中提取文本和圖像嗎? 是的,IronPDF 可讓您從 PDF 文檔中提取文本和圖像,使得在 .NET 應用程式中操作和分析 PDF 內容變得容易。 這些 PDF 庫有哪些安裝選項? IronPDF 和 ExpertPDF 都可以通過 Visual Studio 的 NuGet 包管理器安裝。此外,IronPDF 的 .DLL 庫還可以直接從 IronPDF 網站下載。 是否可以將多個 PDF 文件合併成一個文件? 是的,IronPDF 提供一個合併方法來將多個 PDF 合併成一個文檔。ExpertPDF 也提供一個 PDFMerge 組件來合併 PDF。 IronPDF 是否需要互聯網連接來進行 HTML 到 PDF 轉換? 不,IronPDF 不需要互聯網連接就能進行 HTML 到 PDF 轉換,這使它成為離線應用程式的可靠選擇。 IronPDF 有哪些授權選項? IronPDF 提供多種授權選項,包括單一專案、開發者、代理商和企業授權。所有授權都是永久性的,並包含 30 天退款保證和為期一年的支持及更新。 ExpertPDF 能處理 PDF 文檔的數位簽名嗎? 是的,ExpertPDF 支持對 PDF 文檔進行數位簽名,使 PDF 文件安全和經過身份驗證。 C# 開發者在處理 PDF 時面臨什麼挑戰,這些庫如何幫助? C# 開發者在讀取、寫入、創建和轉換 PDF 時經常面臨挑戰。像 IronPDF 和 ExpertPDF 這些庫通過提供強大的 HTML 到 PDF 轉換、PDF 編輯等工具來簡化這些任務,便於將其輕鬆整合到 C# 應用程式中。 Curtis Chau 立即與工程團隊聊天 技術作家 Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。 相關文章 更新2026年3月1日 在 ASP.NET MVC 中生成 PDF:iTextSharp vs IronPDF 指南 比較在 ASP.NET MVC 中使用 iTextSharp vs IronPDF 的 PDF 產生方法。發現哪個函式庫能提供更好的 HTML 呈現以及更容易的實作。 閱讀更多 更新2026年2月1日 Ghostscript GPL vs IronPDF:技術比較指南 探索 Ghostscript GPL 與 IronPDF 的主要差異。比較 AGPL 授權與商業授權、指令列開關與本機 .NET API,以及 HTML-to-PDF 功能。 閱讀更多 更新2026年3月1日 ASP PDF 庫:比較 IronPDF、Aspose 和 Syncfusion 發現適用於 ASP.NET Core 應用程式的最佳 PDF 庫。比較 IronPDF 的 Chrome 引擎與 Aspose 和 Syncfusion 的替代方案。 閱讀更多 使用Itextsharp在C#中向PDF添加數字簽名IronPDF的產品比較
更新2026年3月1日 在 ASP.NET MVC 中生成 PDF:iTextSharp vs IronPDF 指南 比較在 ASP.NET MVC 中使用 iTextSharp vs IronPDF 的 PDF 產生方法。發現哪個函式庫能提供更好的 HTML 呈現以及更容易的實作。 閱讀更多
更新2026年2月1日 Ghostscript GPL vs IronPDF:技術比較指南 探索 Ghostscript GPL 與 IronPDF 的主要差異。比較 AGPL 授權與商業授權、指令列開關與本機 .NET API,以及 HTML-to-PDF 功能。 閱讀更多
更新2026年3月1日 ASP PDF 庫:比較 IronPDF、Aspose 和 Syncfusion 發現適用於 ASP.NET Core 應用程式的最佳 PDF 庫。比較 IronPDF 的 Chrome 引擎與 Aspose 和 Syncfusion 的替代方案。 閱讀更多