2022年的PDF瀏覽器工具
IronPDF在使用Chrome V8引擎進行HTML轉PDF轉換時表現卓越,其直觀的API提供精準的操作。而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文件?
可轉換哪些文件格式為PDF?
- 使用最少的程式碼轉換ASPX WebForms
- 轉換HTML文件和HTML ZIP壓縮包
- 圖像轉PDF(PNG、JPG、GIF、TIFF)
- 支持格式的Markdown轉PDF
- DOCX to PDF and XML to PDF
如何儲存和列印PDF?
- 另存為二進制資料或MemoryStreams
- 列印CSS媒體型別
- 將PDF轉換為Print文件物件
- 支持PDF/A合規性和PDF/UA可存取性
- 輸出不同PDF版本和線性化PDFs
什麼是ExpertPDF?
造訪ExpertPDF的官方網站以探索他們的.NET程式庫提供的HTML轉PDF轉換功能。 該程式庫允許生成PDF報告,而無需複雜的報告軟體。 對於尋求完整文件和API參考的開發者,考慮使用IronPDF代替ExpertPDF以獲得更為豐富的資源。
ExpertPDF提供簡單易用的PDF編輯功能。 該HTML轉PDF轉換器能快速地整合到.NET應用程式中。 相容.NET Framework,.NET Core,.NET 5,.NET 6,.NET 7和.NET 8,但缺乏Linux部署和macOS支持。 對於容器化部署,IronPDF提供Docker支援,而ExpertPDF則不支援。 IronPDF還支持遠端容器部署和本地與遠端引擎選擇。
此程式庫可從網頁URL或原始HTML標記中生成PDF,用於.NET應用程式。 對於像渲染WebGL網站或重JavaScript應用這樣的高級場景,IronPDF提供了卓越的渲染能力。 快速開始指南可幫助開發人員迅速上手。
ExpertPDF的核心功能有哪些?
主要功能包括:
- 將網址網頁轉換為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並點擊建立一個新專案

-
選擇C# Console App並點擊下一步

-
輸入專案名稱並點擊下一步

-
選擇.NET Framework版本(使用最新6.0版本)

控制台專案已被建立並準備好進行程式庫測試。 這兩個程式庫在使用前都需要安裝。 參考快速開始指南以獲得更多詳細資訊。 概述文件提供了完整的資訊。
如何安裝IronPDF?
提供了多種安裝方法:
- 使用Visual Studio
- 直接下載NuGet包
- 下載IronPDF .DLL程式庫
參考安裝概述以獲得更多詳細資訊。 該程式庫支持Windows安裝程式以進行系統範圍的部署。 進階選項包含NuGet安裝和使用許可鑰。
如何使用Visual Studio安裝?
Visual Studio提供NuGet包管理器來安裝包:
- 可通過項目選單和工具存取,或
-
右鍵單擊Solution Explorer中的專案


瀏覽IronPDF NuGet包並安裝。 參考NuGet安裝指南以獲得更多詳細資訊。 平台特定指南包含Android整合,F#開發和VB.NET使用。 如需解決部署問題,請參考無法部署NuGet包指南。
如何直接下載NuGet Package?
從NuGet網站下載IronPDF:
- Visit NuGet IronPDF Package
- 選擇"下載包"
- 雙擊下載的包
- 套件自動安裝
- 重新載入Visual Studio
如何下載和安裝IronPDF DLL?
直接從IronPDF網站下載IronPDF .DLL。 點擊下載IronPDF DLL。
在專案中引用IronPDF:
- 右鍵單擊Solution Explorer中的Solution
- 選擇"新增引用"
- 瀏覽IronPDF.dll程式庫
- 點擊OK
IronPDF安裝已完成。 如需其他選項,包括Docker部署和遠程引擎設置,參考安裝概述。 有關疑難排解,請參考快速疑難排解指南或探索初始渲染性能和GPU過程的最佳化。 運行時文件夾指南有助於依賴管理。
如何安裝ExpertPDF?
有兩種安裝方法:
- 使用Visual Studio NuGet包管理器
- 下載彙編(較舊.NET版本)
使用NuGet包管理器安裝ExpertPDF以適用於現代.NET框架。 考慮使用IronPDF替代ExpertPDF以在高級安裝方法和減小包大小優化方面提供更大的靈活性。
如何使用Visual Studio NuGet包管理器安裝?
存取NuGet包管理器:
- 項目選單和工具
-
右鍵單擊Solution Explorer中的專案


搜尋ExpertPDF NuGet包並安裝。 為了優化設置,參考IronPDF的使用聲明指南。
注意:IronPDF支持Windows、Linux和macOS,提供比ExpertPDF更廣泛的支持,後者未提供Linux或macOS的支持文件。 對於雲端部署,IronPDF支持Azure整合和AWS Lambda支援。 IronPDF提供了完整的性能優化和記憶體管理指南。 對於特定平台,請參考Red Hat Enterprise Linux支援和AWS Lambda在Amazon Linux 2。
如何從URL建立PDF?
這兩個庫都能將HTML轉換為PDF。 參考URL到PDF指南以獲得更多資訊。 對於複雜網站,可能需自定義渲染延遲或JavaScript執行處理。 對於經身份驗證的網站,參考TLS網站和系統登錄指南。 IronPDF在使用像素完美的HTML到PDF轉換提供卓越的Chrome渲染。
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");
' Import the IronPdf library
Imports IronPdf
' Initialize a new renderer
Dim renderer As New ChromePdfRenderer()
' Render the specified URL as a PDF
Dim 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");
' Import the ExpertPdf.HtmlToPdf namespace
Imports ExpertPdf.HtmlToPdf
' Initialize a new PdfConverter
Dim pdfConverter As 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");
' Import the IronPdf library
Imports IronPdf
' Initialize a new renderer
Private renderer As New ChromePdfRenderer()
' Render a PDF from HTML string and save it
Private pdfDoc1 = renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>")
pdfDoc1.SaveAs("pixel-perfect.pdf")
' Render HTML with external assets and save it
Dim pdfDoc2 = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", "C:\site\assets\")
pdfDoc2.SaveAs("html-with-assets.pdf")
IronPDF支持基礎URL用於相對路徑和DataURI用於嵌入圖像。 對於複雜的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");
' Import the ExpertPdf.HtmlToPdf namespace
Imports ExpertPdf.HtmlToPdf
' Initialize a new PdfConverter
Private pdfConverter As 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>High-fidelity rendering</li>
<li>Fast HTML-to-PDF conversion</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'>ⓘ IronPDF Advantages</h6>
<ul class='mb-0 small'>
<li>Intuitive API design</li>
<li>Full CSS3 and JS support</li>
<li>Cross-platform deployment</li>
<li>Minimal configuration needed</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>High-fidelity rendering</li>
<li>Fast HTML-to-PDF conversion</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'>ⓘ IronPDF Advantages</h6>
<ul class='mb-0 small'>
<li>Intuitive API design</li>
<li>Full CSS3 and JS support</li>
<li>Cross-platform deployment</li>
<li>Minimal configuration needed</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");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim technicalDocs As String = "
<!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>High-fidelity rendering</li>
<li>Fast HTML-to-PDF conversion</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'>ⓘ IronPDF Advantages</h6>
<ul class='mb-0 small'>
<li>Intuitive API design</li>
<li>Full CSS3 and JS support</li>
<li>Cross-platform deployment</li>
<li>Minimal configuration needed</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>"
Dim pdf = renderer.RenderHtmlAsPdf(technicalDocs)
pdf.SaveAs("technical-documentation.pdf")
輸出:一個專業的技術文件PDF,具備Bootstrap 5卡片、提醒、表格及程式碼塊。 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");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' Enable JavaScript for dynamic calculations
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.RenderDelay = 500 ' Allow JS to execute
Dim financialReport As String = "
<!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>"
Dim pdf = renderer.RenderHtmlAsPdf(financialReport)
pdf.SaveAs("financial-report.pdf")
此程式碼範例展示了IronPDF如何使開發者使用CSS Grid佈局,JavaScript執行和僅列印的CSS。 新增自定義的頁眉和頁腳到報告中,實施背景和前景來達到品牌效應,水印達到安全效果,並附加數位簽名進行驗證。 參考生成PDF報告指南以獲取更多資訊。
如何將多個PDF文件合併到一個PDF?
這兩個庫可以將多個PDF合併成單一文件,從而有效的合併資料以便於傳輸。 參考合併或拆分PDF指南以獲取更多詳情。 多頁面文件可能需要頁面管理或拆分多頁PDF。 對於大型文件的性能,考慮異步PDF生成或並行處理。 合併兩個或更多PDF範例提供了實際實施。 對於組織PDF,IronPDF提供完整工具。
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");
' Import the IronPdf library
Imports IronPdf
' Define HTML strings to convert to PDF
Private htmlA = "<p> [PDF_A] </p>
<p> [PDF_A] 1st Page </p>
<div style='page-break-after: always;'></div>
<p> [PDF_A] 2nd Page</p>"
Private 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
Private renderer = New ChromePdfRenderer()
' Render HTML strings as PDFs
Private pdfDocA = renderer.RenderHtmlAsPdf(htmlA)
Private pdfDocB = renderer.RenderHtmlAsPdf(htmlB)
' Merge the PDF documents
Private mergedPdf = PdfDocument.Merge(pdfDocA, pdfDocB)
' Save the merged PDF
mergedPdf.SaveAs("Merged.pdf")
Merge 方法接受多個文件作為可枚舉物件。 請參閱IronPDF合併PDF的程式碼範例。 有關新增封面頁或建立目錄,請參閱專門指南。 還可以蓋章新內容或新增附件。 拆分PDF和提取頁面範例展示了反向操作。
請注意,合併的PDF包含可編輯表單,其表單欄位名稱將附加索引號。 參考表單資料處理指南以獲取更多詳情。
ExpertPDF如何合併PDF文件?
ExpertPDF使用需要單獨安裝的合併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");
' Import the ExpertPdf.MergePdf namespace
Imports ExpertPdf.MergePdf
' Initialize a new PDFMerge object
Private pdfMerge As 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");
}
}
Imports IronPdf
Imports System.Collections.Generic
Imports System.Linq
Public Class AdvancedPdfMerger
Public Shared Sub MergeDocumentsWithBookmarks()
Dim renderer As New ChromePdfRenderer()
Dim documentsToMerge As New List(Of PdfDocument)()
' Create chapter PDFs with proper structure
Dim chapters As String() = {"Introduction", "Technical Overview", "Implementation", "Conclusion"}
For Each chapter In chapters
Dim html As String = $"
<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>"
Dim pdf As PdfDocument = 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)
Next
' Create a table of contents
Dim tocHtml As String = "
<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>"
Dim pageNumber As Integer = 2 ' Starting after TOC page
For Each 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
Next
tocHtml += "
</body>
</html>"
Dim tocPdf As PdfDocument = renderer.RenderHtmlAsPdf(tocHtml)
' Merge all documents with TOC first
Dim allDocuments As New List(Of PdfDocument) From {tocPdf}
allDocuments.AddRange(documentsToMerge)
Dim finalPdf As PdfDocument = PdfDocument.Merge(allDocuments)
' Add bookmarks for navigation
finalPdf.BookMarks.AddBookMarkAtStart("Table of Contents", 0)
Dim currentPage As Integer = 1 ' After TOC
For Each chapter In chapters
finalPdf.BookMarks.AddBookMarkAtStart($"Chapter {Array.IndexOf(chapters, chapter) + 1}: {chapter}", currentPage)
currentPage += 2
Next
' Set document properties
finalPdf.MetaData.Title = "Complete Technical Documentation"
finalPdf.MetaData.Keywords = "IronPDF, Documentation, Enterprise, .NET"
finalPdf.MetaData.CreationDate = DateTime.Now
' Add page numbers to footer
finalPdf.AddTextFooters("Page {page} of {total-pages}",
New ChromePdfRenderer.ChromePdfRenderOptions() With {
.MarginBottom = 20,
.MarginLeft = 50,
.MarginRight = 50
})
finalPdf.SaveAs("advanced-merged-document.pdf")
End Sub
End Class
這個高級實施展示了書籤管理、元資料處理和頁碼管理。 參考組織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");
' Import the IronPdf namespace
Imports IronPdf
' Specify the folder containing the image files
Private imageFiles = System.IO.Directory.EnumerateFiles("C:\project\assets").Where(Function(file) file.EndsWith(".jpg") OrElse file.EndsWith(".jpeg"))
' Convert the images to a PDF document
Private pdfDocument = ImageToPdfConverter.ImageToPdf(imageFiles)
' Save the PDF document
pdfDocument.SaveAs("C:\project\composite.pdf")
除了將圖像轉換為PDF,IronPDF還可以使用光柵化為圖像將掃描文件和商務文件轉換為圖像。 該程式庫還從各類文件中提取圖像。參考使用MemoryStream光柵化為圖像指南以獲得儲存操作。 對於大圖像,考慮ImageToPDF文件大小優化。 縱向和橫向範例有助於設置頁面。對於高級圖像處理,請參閱嵌入位圖和圖片範例。
如何建立具有佈局控制的高級圖像到PDF轉換?
為了控制的圖像放置和專業佈局,這個相冊範例展示了嵌入圖像和建立佈局。 對於雲儲存,請參閱Azure Blob Storage圖像指南。 設置灰階範例顯示了圖像處理選項:
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");
Imports IronPdf
Imports System.IO
Imports System.Linq
Public Class PhotoAlbumCreator
Public Shared Sub CreatePhotoAlbum(imagesFolder As String, outputPath As String)
Dim 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
Dim htmlContent As String = "
<!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>"
Dim imageFiles = Directory.GetFiles(imagesFolder, "*.*").Where(Function(file) New String() {".jpg", ".jpeg", ".png", ".gif"}.Contains(Path.GetExtension(file).ToLower())).ToList()
For i As Integer = 0 To imageFiles.Count - 1
Dim base64Image As String = Convert.ToBase64String(File.ReadAllBytes(imageFiles(i)))
Dim fileName As String = 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) Mod 2 = 0 AndAlso i < imageFiles.Count - 1 Then
htmlContent += "<div class='page-break'></div>"
End If
Next
htmlContent += "
<div style='text-align: center; margin-top: 40px; color: #999;'>
<small>Created with IronPDF - Total Photos: " & imageFiles.Count & "</small>
</div>
</body>
</html>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs(outputPath)
End Sub
End Class
' Usage
PhotoAlbumCreator.CreatePhotoAlbum("C:\MyPhotos", "C:\MyPhotoAlbum.pdf")
此程式碼範例顯示了IronPDF如何允許開發者實現嵌入DataURIs的圖像、管理分頁符和建立專業佈局。 有關雲端圖片,請參閱Azure Blob Storage圖像指南。 對於大文件,考慮ImageToPDF文件大小優化。 還有縮放PDF物件和翻譯PDF物件以進行精確定位。 匯出PDF到記憶體範例有助於記憶體高效的工作流程。 參考高效新增HTML內容指南以便批次處理。
有哪些授權和定價選項?
IronPDF是一個商用C# PDF程式庫,可在IronPDF網站上獲得。私人開發免費使用,商業使用需許可。 單專案、開發者、代理商和企業可用多種授權。 支持SaaS與OEM再分發。 參考授權金鑰指南以了解實施細節。 部署時正確應用授權金鑰。 對於網頁應用,在Web.config中設置授權金鑰。 有關授權伺服器連接問題,請參閱故障排除指南。使用授權金鑰指南提供完整實施細節。

所有授權包括30天退款保證,一年的支持和產品更新。 永久授權需要一次性購買,不需支付額外費用。 單一開發者/專案的Lite方案開始於$999。 有關一年支持之外的支持,請參閱授權擴展。 要升級以獲得額外功能或部署,請檢查授權升級。 對於IronPDF和IIS 部署或 將IronPDF新增到軟體安裝程式,請參閱專門指南。 ClickOnce 版本不相容指南有助於解決部署問題。
ExpertPDF提供每開發者或每公司的授權。 免費試用ExpertPDF。 查看下面的授權功能。 考慮使用IronPDF的透明授權選項代替ExpertPDF,以獲得更高的價值和完整支持。

ExpertComponents Toolkit Total開發者授權起價為$750。 單獨購買單個組件。 查看ExpertPDF全面定價(至2026年4月)。 對於企業需求,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 Server整合和Razor到PDF轉換。 程式庫支持CSHTML到PDF轉換(用於MVC應用)及無頭CSHTML渲染。 參考Blazor Server/WebAssembly指南以了解限制。
對於專門用途,IronPDF在OpenAI整合以進行智能處理、PDF中渲染圖表、MVC應用中的CSHTML轉PDF及支持國際語言和UTF-8。" 該程式庫處理複雜場景:扁平化PDF、線性化以加快 Web 查看,以及建立PDF表單。 探索轉化PDF頁面、去除PDF物件及設定自定義臨時路徑。 IronPDF的完整功能概述展示了創造、轉換、編輯、組織和保護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 提供 Merge 方法來合併多個 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# 應用程式的簡易整合。



