IronPDF 與 ExpertPDF:高級 .NET 開發人員應該選擇哪個 C# PDF 庫?
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?
- 用最少的程式碼轉換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 測試專案選項,以及語言和專案類型篩選器。](/static-assets/pdf/blog/expert-pdf-net-library-alternatives/expert-pdf-net-library-alternatives-2.webp)輸入項目名稱,然後按一下"下一步"。
[Visual Studio 專案設定視窗顯示了名為"DemoApp"的新跨平台 C# 控制台應用程式的設定選項,平台目標選項包括 Linux、macOS、Windows 和控制台環境](/static-assets/pdf/blog/expert-pdf-net-library-alternatives/expert-pdf-net-library-alternatives-3.webp)。選擇 .NET Framework 版本(使用最新的 6.0 版本)
控制台專案已建立完成,可以進行庫測試了。 這兩個庫都需要在使用前安裝。 更多詳情請參閱快速入門指南。 概述文件提供了完整的資訊。
如何安裝 IronPDF?
有多種安裝方法可供選擇:
- 使用 Visual Studio
- 直接下載 NuGet 套件
- 下載 IronPDF .DLL 函式庫
更多詳情請參閱安裝概述。 此庫支援Windows 安裝程序,可進行系統級部署。 進階選項包括NuGet 安裝和使用許可證金鑰。
如何使用 Visual Studio 安裝?
Visual Studio 提供了 NuGet 套件管理器,用於安裝套件:
- 透過項目選單工具訪問,或
在解決方案資源管理器中以滑鼠右鍵按一下項目
Visual Studio 解決方案資源管理器上下文功能表顯示各種專案管理選項,其中"管理 NuGet 套件"選項突出顯示,方便使用者快速存取套件管理功能。
Visual Studio IDE 工具功能表已展開,顯示 NuGet 套件管理器子選單,其中包含"管理解決方案的 NuGet 套件"選項,用於集中管理解決方案中所有專案的依賴項。
瀏覽並安裝 IronPDF NuGet 套件。 更多詳情請參閱NuGet 安裝指南。 平台特定指南包括Android 整合、 F# 開發和VB.NET 使用。 有關部署故障排除,請參閱NuGet 套件部署失敗指南。
如何直接下載 NuGet 套件?
從 NuGet 網站下載 IronPDF:
- 訪問NuGet IronPDF 包
- 選擇"下載軟體包" 按兩下下載的軟體包
- 該軟體包自動安裝
- 重新載入 Visual Studio
如何下載並安裝 IronPDF DLL?
直接從IronPDF 網站下載 IronPDF .DLL 檔案。 點選下載 IronPDF DLL 。
項目參考IronPDF:
- 在解決方案資源管理器中以滑鼠右鍵按一下解決方案。
- 選擇"新增參考文獻"
- 瀏覽 IronPDF.dll 庫 按一下"確定"
IronPDF安裝完成。 如需Docker 部署和遠端引擎設定等其他選項,請參閱安裝概述。 如需進行故障排除,請參閱快速故障排除指南或探索初始渲染效能和GPU 處理最佳化。 運行時資料夾指南有助於依賴項管理。
如何安裝ExpertPDF?
有兩種安裝方法:
- 使用 Visual Studio NuGet 套件管理器
- 下載組件(舊版 .NET)
使用適用於現代 .NET 框架的 NuGet 套件管理器安裝 ExpertPDF。 考慮使用 IronPDF 代替 ExpertPDF,以獲得更大的靈活性,它具有高級安裝方法和軟體包大小優化功能。
如何使用 Visual Studio NuGet 套件管理器進行安裝?
存取 NuGet 套件管理器:
專案選單工具
在解決方案資源管理器中以滑鼠右鍵按一下項目
Visual Studio NuGet 套件管理器介面顯示了 IronPDF 套件的搜尋結果,其中包含多個庫版本、下載次數(主套件為 3.88M)以及適用於各種平台和渲染引擎的安裝選項。
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");有關已驗證的 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");在幕後,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");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");第一個參數指定 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");輸出:包含 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");此程式碼範例展示了 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");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");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");
}
}此高階實作示範了書籤管理、元資料處理和頁碼標註。 更多詳情請參閱"整理 PDF"教學。 合併後探索PDF壓縮技術。 為了安全起見,請實施密碼保護和加密。 新增經典文字頁首和頁尾範例提供了格式設定選項。 如需更多功能,請探索新增頁碼和新增目錄指南。 密碼、安全性和元資料範例展示了整合實作。
如何將圖片轉換為PDF?
IronPDF 可以將各種影像轉換為 PDF,這是 ExpertPDF 不具備的功能。 但是,ExpertPDF 可以從 PDF 中提取影像並將 PDF 轉換為影像,IronPDF 也具備這些功能。 更多詳情請參考圖片轉PDF指南。 IronPDF 支援將 PDF 柵格化為圖像以及擷取文字和圖像。 對於進階場景,可以繪製文字和點陣圖,或繪製線條和矩形。 圖片轉PDF範例展示了實際應用。 有關影像質量,請參閱C# PDF 轉影像而不損失品質範例。
IronPDF 如何將影像轉換為 PDF?
使用ImageToPdfConverter類別可以從影像建立 PDF。 可以從任何資料夾載入圖像,支援多種格式,包括多頁 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");除了將影像轉換為 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");此程式碼範例展示了 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,以獲得更高的價值和更全面的支援。
ExpertComponents Toolkit 全套開發者授權起價 850 美元,ExpertPDF Toolkit 起價為 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 上的段錯誤。
常見問題解答
如何在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# 應用程式中。






