跳至頁尾內容
PDF工具

2022年的PDF瀏覽器工具

IronPDF在使用Chrome V8引擎進行HTML轉PDF轉換時表現卓越,其直觀的API提供精準的操作。而ExpertPDF在庫內提供基本的PDF功能,但對.NET生產系統而言需要更複雜的配置。

C#開發者在處理PDF時經常面臨挑戰,無論是讀取、寫入、建立還是格式轉換。 許多庫已經出現以解決這些需求,提供流暢的C#應用整合。 在開發C# PDF報告時,選擇合適的庫對開發時間和輸出質量有重大影響。 要完整了解C#中的PDF生成,瞭解庫的能力是至關重要的。

本文比較了面向.NET開發者的兩個PDF庫:

這兩個庫都提供在.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文件?

如何在不使用Adobe Acrobat Reader的情況下編輯PDF?

如何操作PDF文件?

可轉換哪些文件格式為PDF?

如何儲存和列印PDF?

什麼是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轉換器

以下部分涵蓋:

  1. 建立一個控制台專案
  2. IronPDF安裝
  3. ExpertPDF安裝
  4. 從URL建立PDF
  5. 從HTML輸入字串建立PDF
  6. 把多個PDF合併成單一PDF
  7. 圖像轉換為PDF
  8. 許可證與定價
  9. 結論

如何建立控制台專案?

請按照以下步驟使用Visual Studio 2022建立控制台應用程式:

  • 打開Visual Studio 2022並點擊建立一個新專案

    Visual Studio 2022歡迎螢幕,具有暗色主題介面,顯示四個主要開發選項:克隆儲存庫用以協作項目、開啟專案或解決方案用於現有工作、打開本地文件夾用於文件探索,以及建立一個新的專案以開始新的開發

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

    Visual Studio的建立新專案對話框展示了各種.NET專案範本,具有Linux、macOS和Windows的跨平台支持指示器,典型包括Console App、Class Library和MSTest Test Project選項,配有語言和專案型別過濾器

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

    Visual Studio專案配置窗口顯示了一個名為'DemoApp'的新跨平台C#控制台應用程式的設置選項,提供Linux、macOS、Windows以及控制台環境的目標選擇

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

    Visual Studio專案建立向導顯示'附加資訊'步驟,其中選擇了Console App模板並選擇了.NET 6.0框架,顯示C#、Linux、macOS、Windows和控制台應用的跨平台支援標籤

控制台專案已被建立並準備好進行程式庫測試。 這兩個程式庫在使用前都需要安裝。 參考快速開始指南以獲得更多詳細資訊。 概述文件提供了完整的資訊。

如何安裝IronPDF?

提供了多種安裝方法:

  1. 使用Visual Studio
  2. 直接下載NuGet包
  3. 下載IronPDF .DLL程式庫

參考安裝概述以獲得更多詳細資訊。 該程式庫支持Windows安裝程式以進行系統範圍的部署。 進階選項包含NuGet安裝使用許可鑰

如何使用Visual Studio安裝?

Visual Studio提供NuGet包管理器來安裝包:

  • 可通過項目選單和工具存取,或
  • 右鍵單擊Solution Explorer中的專案

    Visual Studio Solution Explorer上下文選單顯示各種專案管理選項,突顯了

    Visual Studio IDE工具選單展開以展示NuGet包管理器子選單,標籤

瀏覽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中的專案

    Visual Studio NuGet包管理器介面顯示IronPDF包搜索結果,其中包含多個庫版本,下載計數(主包3.88M),支持各種平台和渲染引擎的安裝選項

    Visual Studio Solution Explorer上下文選單中的

搜尋ExpertPDF NuGet包並安裝。 為了優化設置,參考IronPDF的使用聲明指南

注意:IronPDF支持WindowsLinuxmacOS,提供比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。 該程式庫對CSSJavaScript圖像表單提供高層支援。 使用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")
$vbLabelText   $csharpLabel

對於經身份驗證的URL,參考TLS網站和系統登錄指南。 為經身份驗證的請求配置Cookie自定義HTTP標頭。 安全站點可能需使用Kerberos認證。 對於除錯,使用Chrome除錯指南。 其他範例展示了將URL轉換為PDF

ExpertPDF如何將URL轉換為PDF?

ExpertPDF使用savePdfFromUrlToFile方法將URL轉換,以保留頁面格式:

// Import the ExpertPdf.HtmlToPdf namespace
using ExpertPdf.HtmlToPdf;

// Initialize a new PdfConverter
PdfConverter pdfConverter = new PdfConverter();
// Use PdfConverter to save a webpage URL directly to a PDF file
pdfConverter.SavePdfFromUrlToFile("___PROTECTED_URL_191___", "output.pdf");
// Import the ExpertPdf.HtmlToPdf namespace
using ExpertPdf.HtmlToPdf;

// Initialize a new PdfConverter
PdfConverter pdfConverter = new PdfConverter();
// Use PdfConverter to save a webpage URL directly to a PDF file
pdfConverter.SavePdfFromUrlToFile("___PROTECTED_URL_191___", "output.pdf");
' 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")
$vbLabelText   $csharpLabel

在幕後,IronPDF使用其Chrome渲染引擎以提供更好的HTML5和CSS3支持

如何從HTML輸入字串建立PDF?

這兩個庫都可以從HTML字串建立PDF。 參考HTML字串到PDF指南以獲得更多資訊。 使用螢幕和列印的CSS,並配合網頁字體和圖標字體。 IronPDF提供了出色的Bootstrap和Flexbox CSS支持。 使用HTML建立PDF範例展示了實際應用。

IronPDF如何將HTML字串轉換為PDF?

此程式碼範例展示了IronPDF如何允許開發人員從HTML字串生成PDF文件:

// Import the IronPdf library
using IronPdf;

// Initialize a new renderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render a PDF from HTML string and save it
var pdfDoc1 = renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>");
pdfDoc1.SaveAs("pixel-perfect.pdf");

// Render HTML with external assets and save it
var pdfDoc2 = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
pdfDoc2.SaveAs("html-with-assets.pdf");
// Import the IronPdf library
using IronPdf;

// Initialize a new renderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render a PDF from HTML string and save it
var pdfDoc1 = renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>");
pdfDoc1.SaveAs("pixel-perfect.pdf");

// Render HTML with external assets and save it
var pdfDoc2 = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
pdfDoc2.SaveAs("html-with-assets.pdf");
' 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")
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

第一個參數指定HTML字串,第二個參數指定輸出文件名。 考慮使用IronPDF的Unicode和UTF-8支持代替基本的HTML渲染以提供更強大的國際語言支持。

如何生成技術文件PDF?

技術文件收益於有結構的佈局和程式碼範例。 此Bootstrap 5演示展示IronPDF渲染文件為帶有語法突出顯示與提醒的能力。 參考Bootstrap和Flexbox CSS支持指南以獲取更多資訊。 IronPDF支持字體管理字體間距以達到專業排版效果。 如需提高效果,請查看字體疑難排解指南國際語言支持

using IronPdf;

var renderer = new ChromePdfRenderer();

string technicalDocs = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <link href='___PROTECTED_URL_192___ rel='stylesheet'>
    <style>
        .code-block { background: #f8f9fa; border-left: 3px solid #0d6efd; padding: 15px; border-radius: 4px; }
        .api-method { font-family: 'Courier New', monospace; color: #0d6efd; }
        @media print { .card, .alert { page-break-inside: avoid; } }
    </style>
</head>
<body class='bg-light'>
    <div class='container py-4'>
        <div class='card shadow-sm mb-4'>
            <div class='card-header bg-dark text-white'>
                <h2 class='mb-0'>API Reference - HTML to PDF Conversion</h2>
            </div>
            <div class='card-body'>
                <h4>RenderHtmlAsPdf() Method</h4>
                <p class='lead'>Converts HTML content to PDF with full CSS3 and JavaScript support.</p>

                <div class='code-block mb-3'>
                    <code class='api-method'>PdfDocument RenderHtmlAsPdf(string htmlContent)</code>
                </div>

                <div class='row mt-4'>
                    <div class='col-md-6'>
                        <h5 class='text-primary'>Parameters</h5>
                        <table class='table table-sm table-bordered'>
                            <tr>
                                <td><code>htmlContent</code></td>
                                <td>String containing HTML to convert</td>
                            </tr>
                        </table>
                    </div>
                    <div class='col-md-6'>
                        <h5 class='text-success'>Returns</h5>
                        <table class='table table-sm table-bordered'>
                            <tr>
                                <td><code>PdfDocument</code></td>
                                <td>Generated PDF document object</td>
                            </tr>
                        </table>
                    </div>
                </div>
            </div>
        </div>

        <div class='row g-3 mb-4'>
            <div class='col-md-4'>
                <div class='alert alert-success mb-0'>
                    <h6 class='alert-heading'>✓ Supported Features</h6>
                    <ul class='mb-0 small'>
                        <li>HTML5 semantic tags</li>
                        <li>CSS3 with Flexbox/Grid</li>
                        <li>JavaScript execution</li>
                        <li>External stylesheets</li>
                    </ul>
                </div>
            </div>
            <div class='col-md-4'>
                <div class='alert alert-info mb-0'>
                    <h6 class='alert-heading'>ⓘ Rendering Engine</h6>
                    <ul class='mb-0 small'>
                        <li>Chrome V8 Engine</li>
                        <li>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")
$vbLabelText   $csharpLabel

輸出:一個專業的技術文件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")
$vbLabelText   $csharpLabel

此程式碼範例展示了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")
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

在幕後,IronPDF使用更高效的合併算法。 考慮使用IronPDF的異步PDF生成多執行緒生成替代同步操作以獲得更大的性能。

如何用文件組織實現高級PDF合併?

企業應用需要高級特徵,如加書籤、頁面組織和合併PDF時保持元資料。 此範例演示了書籤管理元資料處理和文件組織。 為了合規性,實施修訂歷史PDF/A 轉換PDF/UA 可存取性輪廓和書籤範例提供了額外的實施細節。 參考設置和編輯元資料指南元資料可見性故障排除以獲取更多詳情。

using IronPdf;
using System.Collections.Generic;
using System.Linq;

public class AdvancedPdfMerger
{
    public static void MergeDocumentsWithBookmarks()
    {
        var renderer = new ChromePdfRenderer();
        var documentsToMerge = new List<PdfDocument>();

        // Create chapter PDFs with proper structure
        string[] chapters = { "Introduction", "Technical Overview", "Implementation", "Conclusion" };

        foreach (var chapter in chapters)
        {
            string html = $@"
                <html>
                <head>
                    <style>
                        body {{font-family: Georgia, serif; margin: 40px;}}
                        h1 {{color: #2c3e50; border-bottom: 2px solid #3498db; padding-bottom: 10px;}}
                        .chapter-number {{color: #7f8c8d; font-size: 0.8em;}}
                    </style>
                </head>
                <body>
                    <h1><span class='chapter-number'>Chapter {Array.IndexOf(chapters, chapter) + 1}</span><br>{chapter}</h1>
                    <p>This is the content for the {chapter} chapter. In a real document, this would contain 
                    extensive content, diagrams, and detailed explanations.</p>
                    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor 
                    incididunt ut labore et dolore magna aliqua.</p>
                </body>
                </html>";

            var pdf = renderer.RenderHtmlAsPdf(html);

            // Add metadata to each chapter
            pdf.MetaData.Title = $"Chapter: {chapter}";
            pdf.MetaData.Author = "Technical Documentation Team";
            pdf.MetaData.Subject = "Enterprise PDF Generation";

            documentsToMerge.Add(pdf);
        }

        // Create a table of contents
        string tocHtml = @"
            <html>
            <head>
                <style>
                    body { font-family: Georgia, serif; margin: 40px; }
                    h1 { text-align: center; color: #2c3e50; margin-bottom: 40px; }
                    .toc-entry { margin: 15px 0; font-size: 1.1em; }
                    .toc-entry a { text-decoration: none; color: #3498db; }
                    .page-number { float: right; color: #7f8c8d; }
                </style>
            </head>
            <body>
                <h1>Table of Contents</h1>";

        int pageNumber = 2; // Starting after TOC page
        foreach (var chapter in chapters)
        {
            tocHtml += $@"
                <div class='toc-entry'>
                    <a href='#'>Chapter {Array.IndexOf(chapters, chapter) + 1}: {chapter}</a>
                    <span class='page-number'>{pageNumber}</span>
                </div>";
            pageNumber += 2; // Assuming each chapter is 2 pages
        }

        tocHtml += @"
            </body>
            </html>";

        var tocPdf = renderer.RenderHtmlAsPdf(tocHtml);

        // Merge all documents with TOC first
        var allDocuments = new List<PdfDocument> { tocPdf };
        allDocuments.AddRange(documentsToMerge);

        var finalPdf = PdfDocument.Merge(allDocuments);

        // Add bookmarks for navigation
        finalPdf.BookMarks.AddBookMarkAtStart("Table of Contents", 0);
        int currentPage = 1; // After TOC
        foreach (var chapter in chapters)
        {
            finalPdf.BookMarks.AddBookMarkAtStart($"Chapter {Array.IndexOf(chapters, chapter) + 1}: {chapter}", currentPage);
            currentPage += 2;
        }

        // Set document properties
        finalPdf.MetaData.Title = "Complete Technical Documentation";
        finalPdf.MetaData.Keywords = "IronPDF, Documentation, Enterprise, .NET";
        finalPdf.MetaData.CreationDate = System.DateTime.Now;

        // Add page numbers to footer
        finalPdf.AddTextFooters("Page {page} of {total-pages}", 
            new ChromePdfRenderer.ChromePdfRenderOptions() 
            { 
                MarginBottom = 20,
                MarginLeft = 50,
                MarginRight = 50
            });

        finalPdf.SaveAs("advanced-merged-document.pdf");
    }
}
using IronPdf;
using System.Collections.Generic;
using System.Linq;

public class AdvancedPdfMerger
{
    public static void MergeDocumentsWithBookmarks()
    {
        var renderer = new ChromePdfRenderer();
        var documentsToMerge = new List<PdfDocument>();

        // Create chapter PDFs with proper structure
        string[] chapters = { "Introduction", "Technical Overview", "Implementation", "Conclusion" };

        foreach (var chapter in chapters)
        {
            string html = $@"
                <html>
                <head>
                    <style>
                        body {{font-family: Georgia, serif; margin: 40px;}}
                        h1 {{color: #2c3e50; border-bottom: 2px solid #3498db; padding-bottom: 10px;}}
                        .chapter-number {{color: #7f8c8d; font-size: 0.8em;}}
                    </style>
                </head>
                <body>
                    <h1><span class='chapter-number'>Chapter {Array.IndexOf(chapters, chapter) + 1}</span><br>{chapter}</h1>
                    <p>This is the content for the {chapter} chapter. In a real document, this would contain 
                    extensive content, diagrams, and detailed explanations.</p>
                    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor 
                    incididunt ut labore et dolore magna aliqua.</p>
                </body>
                </html>";

            var pdf = renderer.RenderHtmlAsPdf(html);

            // Add metadata to each chapter
            pdf.MetaData.Title = $"Chapter: {chapter}";
            pdf.MetaData.Author = "Technical Documentation Team";
            pdf.MetaData.Subject = "Enterprise PDF Generation";

            documentsToMerge.Add(pdf);
        }

        // Create a table of contents
        string tocHtml = @"
            <html>
            <head>
                <style>
                    body { font-family: Georgia, serif; margin: 40px; }
                    h1 { text-align: center; color: #2c3e50; margin-bottom: 40px; }
                    .toc-entry { margin: 15px 0; font-size: 1.1em; }
                    .toc-entry a { text-decoration: none; color: #3498db; }
                    .page-number { float: right; color: #7f8c8d; }
                </style>
            </head>
            <body>
                <h1>Table of Contents</h1>";

        int pageNumber = 2; // Starting after TOC page
        foreach (var chapter in chapters)
        {
            tocHtml += $@"
                <div class='toc-entry'>
                    <a href='#'>Chapter {Array.IndexOf(chapters, chapter) + 1}: {chapter}</a>
                    <span class='page-number'>{pageNumber}</span>
                </div>";
            pageNumber += 2; // Assuming each chapter is 2 pages
        }

        tocHtml += @"
            </body>
            </html>";

        var tocPdf = renderer.RenderHtmlAsPdf(tocHtml);

        // Merge all documents with TOC first
        var allDocuments = new List<PdfDocument> { tocPdf };
        allDocuments.AddRange(documentsToMerge);

        var finalPdf = PdfDocument.Merge(allDocuments);

        // Add bookmarks for navigation
        finalPdf.BookMarks.AddBookMarkAtStart("Table of Contents", 0);
        int currentPage = 1; // After TOC
        foreach (var chapter in chapters)
        {
            finalPdf.BookMarks.AddBookMarkAtStart($"Chapter {Array.IndexOf(chapters, chapter) + 1}: {chapter}", currentPage);
            currentPage += 2;
        }

        // Set document properties
        finalPdf.MetaData.Title = "Complete Technical Documentation";
        finalPdf.MetaData.Keywords = "IronPDF, Documentation, Enterprise, .NET";
        finalPdf.MetaData.CreationDate = System.DateTime.Now;

        // Add page numbers to footer
        finalPdf.AddTextFooters("Page {page} of {total-pages}", 
            new ChromePdfRenderer.ChromePdfRenderOptions() 
            { 
                MarginBottom = 20,
                MarginLeft = 50,
                MarginRight = 50
            });

        finalPdf.SaveAs("advanced-merged-document.pdf");
    }
}
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
$vbLabelText   $csharpLabel

這個高級實施展示了書籤管理元資料處理頁碼管理。 參考組織PDF教程以獲取更多詳情。 合併後探索PDF壓縮技術。 為了安全性,實施密碼保護加密新增經典文字頁眉和頁腳範例提供格式選項。 有關額外功能,請探索新增頁碼新增目錄指南。 密碼、安全性和元資料範例顯示了整合的實施。

如何將圖像轉換為PDF?

IronPDF將各種圖像轉換為PDF,而這一功能在ExpertPDF中不可用。 然而,ExpertPDF從PDF中提取圖像並將PDF轉換為圖像,IronPDF也提供這些功能。 參考圖像到PDF指南以獲取更多詳情。 IronPDF支持光柵化PDF為圖像提取文字和圖像。 對於高級場景,繪製文字和位圖繪製線條和矩形圖像到PDF範例展示了實際實施。 有關圖像質量,請參閱無損質量的C# PDF轉圖像範例

IronPDF 如何將圖像轉換為 PDF?

從圖像建立PDF使用ImageToPdfConverter類。 圖像從任何資料夾載入,支持各種格式,包含多頁TIFF文件。 還可以向現有PDF新增圖像或使用SVG圖形。 為了儲存效率,使用使用MemoryStream光柵化為圖像自定義PDF尺寸範例有助於佈局控制。

// Import the IronPdf namespace
using IronPdf;

// Specify the folder containing the image files
var imageFiles = System.IO.Directory.EnumerateFiles(@"C:\project\assets")
                  .Where(file => file.EndsWith(".jpg") || file.EndsWith(".jpeg"));

// Convert the images to a PDF document
var pdfDocument = ImageToPdfConverter.ImageToPdf(imageFiles);
// Save the PDF document
pdfDocument.SaveAs(@"C:\project\composite.pdf");
// Import the IronPdf namespace
using IronPdf;

// Specify the folder containing the image files
var imageFiles = System.IO.Directory.EnumerateFiles(@"C:\project\assets")
                  .Where(file => file.EndsWith(".jpg") || file.EndsWith(".jpeg"));

// Convert the images to a PDF document
var pdfDocument = ImageToPdfConverter.ImageToPdf(imageFiles);
// Save the PDF document
pdfDocument.SaveAs(@"C:\project\composite.pdf");
' 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")
$vbLabelText   $csharpLabel

除了將圖像轉換為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")
$vbLabelText   $csharpLabel

此程式碼範例顯示了IronPDF如何允許開發者實現嵌入DataURIs的圖像、管理分頁符和建立專業佈局。 有關雲端圖片,請參閱Azure Blob Storage圖像指南。 對於大文件,考慮ImageToPDF文件大小優化。 還有縮放PDF物件翻譯PDF物件以進行精確定位。 匯出PDF到記憶體範例有助於記憶體高效的工作流程。 參考高效新增HTML內容指南以便批次處理。

有哪些授權和定價選項?

IronPDF是一個商用C# PDF程式庫,可在IronPDF網站上獲得。私人開發免費使用,商業使用需許可。 單專案、開發者、代理商和企業可用多種授權。 支持SaaS與OEM再分發。 參考授權金鑰指南以了解實施細節。 部署時正確應用授權金鑰。 對於網頁應用,在Web.config中設置授權金鑰。 有關授權伺服器連接問題,請參閱故障排除指南。使用授權金鑰指南提供完整實施細節。

Visual Studio IDE 工具選單顯示 NuGet 套件管理選項,包括套件管理控制台和為解決方案管理 NuGet 套件,提供 .NET 開發專案的集中相依性管理

所有授權包括30天退款保證,一年的支持和產品更新。 永久授權需要一次性購買,不需支付額外費用。 單一開發者/專案的Lite方案開始於$999。 有關一年支持之外的支持,請參閱授權擴展。 要升級以獲得額外功能或部署,請檢查授權升級。 對於IronPDF和IIS 部署或 將IronPDF新增到軟體安裝程式,請參閱專門指南。 ClickOnce 版本不相容指南有助於解決部署問題。

ExpertPDF提供每開發者或每公司的授權。 免費試用ExpertPDF。 查看下面的授權功能。 考慮使用IronPDF的透明授權選項代替ExpertPDF,以獲得更高的價值和完整支持。

NuGet套件管理介面顯示六個ExpertPDF庫,以及下載統計資料,包括HTML到PDF轉換器(145K下載)等多個專門的PDF操縱工具,均為版本11.0.2.0

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、圖像、AngularJSMarkdownRTF,具有可靠的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 FunctionsAzure日誌文件管理AWS日誌文件處理及解決502 Bad Gateway 錯誤。 IronPDF提供完整錯誤處理,包括拒絕存取路徑解決方案Chrome依賴部署PDFium依賴部署惡劣配置錯誤解決方案。 平台特定支持包括Linux特定指南macOS本地異常Windows Nano Server 限制。 安全特性包含Log4j漏洞狀態及保護AWS Lambda上的分段錯誤

請注意ExpertPDF 是其相應所有者的註冊商標。 本網站未經ExpertPDF聯繫、認可或贊助。 所有產品名稱、徽標和品牌均為其各自所有者的財產。 比較僅供資訊參考,並反映了撰寫時的公開可用資訊。

常見問題

如何在C#中將HTML轉換為PDF?

您可以使用IronPDF的RenderHtmlAsPdf方法將HTML字串轉換成PDF。也可以使用RenderHtmlFileAsPdf將HTML文件轉換為PDF。

IronPDF 和 ExpertPDF 之間的主要差異是什麼?

IronPDF 提供更廣泛的格式支援和整合功能,包括從 HTML 建立 PDF、編輯和格式轉換。ExpertPDF 提供簡單的 HTML 到 PDF 轉換,並具有輸出檔案配置和數位簽章選項。

我可以使用這些程式庫從 PDF 中提取文字和圖片嗎?

可以,IronPDF 允許您從 PDF 文件中提取文字和圖片,使您可以在 .NET 應用程式中輕鬆操控和分析 PDF 內容。

這些 PDF 程式庫有哪些安裝選項?

IronPDF 和 ExpertPDF 都可以使用 Visual Studio 的 NuGet 套件管理器來安裝。此外,IronPDF 的 .DLL 程式庫可以直接從 IronPDF 的網站下載。

是否可以將多個 PDF 文件合併成一個文件?

可以,IronPDF 提供 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# 應用程式的簡易整合。

Curtis Chau
技術作家

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

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話