跳過到頁腳內容
產品比較

IronPDF vs ExpertPDF:資深 .NET 開發人員應該選擇哪個 C# PDF 程式庫?

IronPDF憑藉著 Chrome V8 引擎的精確度和直覺的 API,在 HTML 到 PDF 的轉換方面表現出色;而 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檔案?

如何在不使用 Adob​​e Acrobat Reader 的情況下編輯 PDF 文件?

填寫並閱讀PDF表格 -提取文字和圖像並進行解析

如何操作PDF文件?

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

如何儲存並列印PDF文件?

ExpertPDF是什麼?

造訪 ExpertPDF 官方網站,探索其提供 HTML 轉 PDF 功能的.NET庫。 該庫無需複雜的報表軟體即可產生 PDF 報表。 對於尋求完整文件API 參考的開發人員,建議使用IronPDF而不是 ExpertPDF,以獲得更豐富的資源。

ExpertPDF 提供簡單易用的 PDF 編輯功能。 HTML 轉 PDF 轉換器可以快速整合到.NET應用程式中。 雖然不支援Linux 部署macOS ,但與.NET Framework、 .NET Core、 .NET 5 和.NET 6 相容。 對於容器化部署, IronPDF提供Docker 支持,而 ExpertPDF 不支援。 IronPDF也支援遠端容器部署以及原生引擎與遠端引擎選項

該程式庫可以根據.NET應用程式中的網頁 URL 或原始 HTML 標記建立 PDF。 對於渲染 WebGL 網站JavaScript 密集型應用程式等進階場景, IronPDF提供卓越的渲染能力。 快速入門指南可協助開發人員快速上手。

ExpertPDF的主要功能有哪些?

顯著特點包括:

  • 將 URL 網頁轉換為 PDF
  • 將 HTML 字串轉換為 PDF
  • 多種輸出檔案選項
  • 設定頁面邊距和尺寸
  • 設定頁首和頁尾
  • 新增自動和自訂分頁符 將網頁的特定部分轉換為 PDF
  • 轉換過程中隱藏元素 將多個網頁合併成一個PDF文件
  • 將已驗證的網頁轉換為 PDF
  • 選擇要渲染的 CSS 媒體類型
  • 書籤支持
  • 數位簽名支持
  • 取得 PDF 中的 HTML 元素位置
  • 支援 HTML5/CSS3
  • 支援網頁字體
  • 文件類型轉換: PDF 轉文字轉換器 HTML 轉 PDF 轉換器
    • HTML 轉圖像轉換器 PDF 轉圖像轉換器 RTF 轉 PDF 轉換器

以下各節涵蓋以下內容:

  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# 控制台應用程式",然後按一下"下一步"。

Visual Studio 的"建立新專案"對話方塊展示了各種.NET專案模板,並附帶跨平台支援指示器,支援 Windows、Linux 和 macOS,包括控制台應用程式、類別庫和 MSTest 測試專案選項,以及語言和專案類型篩選器。

輸入項目名稱,然後按一下"下一步"。

![Visual Studio 專案配置窗口,顯示名為](/static-assets/pdf/blog/expert-pdf-net-library-alternatives/expert-pdf-net-library-alternatives-3.webp)
  • 選擇.NET Framework版本(使用最新的 6.0 版本)

    Visual Studio 專案建立精靈,顯示

控制台專案已建立完成,可以進行庫測試了。 這兩個庫都需要在使用前安裝。 更多詳情請參閱快速入門指南概述文件提供了完整的資訊。

如何安裝IronPDF?

有多種安裝方法可供選擇:

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

更多詳情請參閱安裝概述。 此庫支援Windows 安裝程序,可進行系統級部署。 進階選項包括NuGet安裝使用許可證金鑰

如何使用 Visual Studio 安裝?

Visual Studio 提供了NuGet套件管理器,用於安裝套件:

  • 透過項目選單工具訪問,或
  • 在解決方案資源管理器中以滑鼠右鍵按一下專案。

    Visual Studio 解決方案資源管理器上下文選單,顯示各種專案管理選項,其中

    Visual Studio IDE 工具選單已展開,顯示NuGet套件管理器子選單,其中包含

瀏覽並安裝IronPDF NuGet套件。 更多詳情請參閱NuGet安裝指南。 平台特定指南包括Android 整合F# 開發.NET使用。 有關部署故障排除,請參閱NuGet套件部署失敗指南

如何直接下載NuGet套件?

從NuGet網站下載IronPDF :

  • 訪問NuGet IronPDF包
  • 選擇"下載軟體包" 按兩下下載的軟體包
  • 該軟體包自動安裝
  • 重新載入 Visual Studio

如何下載並安裝IronPDF DLL?

直接從IronPDF網站下載IronPDF .DLL 檔案。 點選下載IronPDF DLL

項目參考IronPDF :

  • 在解決方案資源管理器中以滑鼠右鍵按一下解決方案。
  • 選擇"新增參考文獻"
  • 瀏覽IronPDF庫 按一下"確定"

IronPDF安裝完成。 如需Docker 部署遠端引擎設定等其他選項,請參閱安裝概述。 如需進行故障排除,請參閱快速故障排除指南或探索初始渲染效能GPU 處理最佳化運行時資料夾指南有助於依賴項管理。

如何安裝ExpertPDF?

有兩種安裝方法:

  • 使用 Visual Studio NuGet套件管理器
  • 下載組件(舊版.NET )

使用適用於現代.NET框架的NuGet套件管理器安裝 ExpertPDF。 考慮使用IronPDF代替 ExpertPDF,以獲得更大的靈活性,它具有高級安裝方法軟體包大小優化功能

如何使用 Visual Studio NuGet套件管理器進行安裝?

存取NuGet套件管理器:

專案選單工具

  • 在解決方案資源管理器中以滑鼠右鍵按一下項目

    Visual Studio NuGet套件管理器介面,顯示IronPDF套件的搜尋結果,包括多個庫版本、下載次數(主套件為 3.88M)以及適用於各種平台和渲染引擎的安裝選項

    Visual Studio 解決方案資源管理器上下文選單,其中"新增"子選單中的"管理NuGet套件"選項已高亮顯示,可快速存取套件管理和相依性安裝功能。

瀏覽並安裝 ExpertPDF NuGet套件。 為了改進設置,請參考IronPDF 的使用聲明指南

注意: ExpertPDF 僅支援 Windows,而IronPDF支援WindowsLinuxmacOS 。 對於雲端部署, IronPDF提供Azure 整合AWS Lambda 支援。 IronPDF提供完整的效能最佳化記憶體管理指導。 有關具體平台,請參閱Red Hat Enterprise Linux 支援Amazon Linux 2 上的 AWS Lambda

如何根據URL建立PDF?

這兩個庫都能將HTML轉換為PDF。 更多詳情請參閱連結指向的 PDF 指南。 複雜的網站可能需要自訂渲染延遲JavaScript執行處理。 已認證的網站,請參閱TLS 網站和系統登入指南。 IronPDF使用Chrome 渲染技術,能夠實現像素級完美的 HTML 到 PDF 轉換

IronPDF如何將 URL 轉換為 PDF?

IronPDF能有效率地將 URL 中的 HTML 程式碼渲染成 PDF 檔案。 該程式庫為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");
$vbLabelText   $csharpLabel

有關已驗證的 URL,請參閱TLS 網站和系統登入指南。 為已認證的請求設定cookie自訂 HTTP 標頭。 安全網站可能需要Kerberos身份驗證。 如需調試,請使用Chrome 調試指南。 其他範例則展示如何將 URL 轉換為 PDF

ExpertPDF 如何將 URL 轉換為 PDF?

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

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

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

// Initialize a new PdfConverter
PdfConverter pdfConverter = new PdfConverter();
// Use PdfConverter to save a webpage URL directly to a PDF file
pdfConverter.SavePdfFromUrlToFile("___PROTECTED_URL_191___", "output.pdf");
$vbLabelText   $csharpLabel

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

如何根據HTML輸入字串建立PDF?

這兩個函式庫都能根據 HTML 字串建立 PDF 檔案。 更多詳情請參閱HTML 字串轉 PDF 指南。 使用CSS 實現螢幕和列印效果,並融入網頁字體和圖示字體。 IronPDF提供出色的Bootstrap 和 Flexbox CSS支援。 使用 HTML 建立 PDF 的範例展示了實際應用。

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

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

// Import the IronPdf library
using IronPdf;

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

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

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

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

IronPDF支援相對路徑的基本 URL和用於嵌入圖像的資料 URI 。 有關複雜的 HTML 程式碼,請參閱HTML 檔案轉 PDF 指南。 有關特定視口設置,請參閱視口和縮放設定指南。該庫可無縫處理國際語言和 UTF-8 編碼。 進階功能包括HTML 渲染設定響應式 HTML 到 PDF 轉換

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

ExpertPDF HTML 轉 PDF 轉換器支援 HTML 字串轉換:

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

// Initialize a new PdfConverter
PdfConverter pdfConverter = new PdfConverter();
// Use PdfConverter to save an HTML string to a PDF file
pdfConverter.SavePdfFromHtmlStringToFile("<h1>PDF using Expert PDF</h1>", "html-to-pdf.pdf");
// Import the ExpertPdf.HtmlToPdf namespace
using ExpertPdf.HtmlToPdf;

// Initialize a new PdfConverter
PdfConverter pdfConverter = new PdfConverter();
// Use PdfConverter to save an HTML string to a PDF file
pdfConverter.SavePdfFromHtmlStringToFile("<h1>PDF using Expert PDF</h1>", "html-to-pdf.pdf");
$vbLabelText   $csharpLabel

第一個參數指定 HTML 字串,第二個參數指定輸出檔名。 為了獲得更強大的國際語言支持,請考慮使用 IronPDF 的Unicode 和 UTF-8 支援來取代基本的 HTML 渲染。

如何產生技術文件PDF?

技術文件可以從包含程式碼範例的結構化佈局中受益。 此 Bootstrap 5 示範展示了 IronPDF 渲染帶有語法高亮和警告功能的文件的能力。 有關更多詳細信息,請參閱Bootstrap 和 Flexbox CSS 支援指南。 IronPDF支援字型管理字距調整,滿足專業排版需求。 為了獲得更好的效果,請查看字體故障排除指南國際語言支援

using IronPdf;

var renderer = new ChromePdfRenderer();

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

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

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

        <div class='row g-3 mb-4'>
            <div class='col-md-4'>
                <div class='alert alert-success mb-0'>
                    <h6 class='alert-heading'>✓ Supported Features</h6>
                    <ul class='mb-0 small'>
                        <li>HTML5 semantic tags</li>
                        <li>CSS3 with Flexbox/Grid</li>
                        <li>JavaScript execution</li>
                        <li>External stylesheets</li>
                    </ul>
                </div>
            </div>
            <div class='col-md-4'>
                <div class='alert alert-info mb-0'>
                    <h6 class='alert-heading'>ⓘ Rendering Engine</h6>
                    <ul class='mb-0 small'>
                        <li>Chrome V8 Engine</li>
                        <li>98% browser fidelity</li>
                        <li>Sub-second rendering</li>
                        <li>Async/await support</li>
                    </ul>
                </div>
            </div>
            <div class='col-md-4'>
                <div class='alert alert-warning mb-0'>
                    <h6 class='alert-heading'>⚠ ExpertPDF Notes</h6>
                    <ul class='mb-0 small'>
                        <li>Complex API structure</li>
                        <li>Limited CSS3 support</li>
                        <li>No native JavaScript</li>
                        <li>Requires configuration</li>
                    </ul>
                </div>
            </div>
        </div>

        <div class='card shadow-sm'>
            <div class='card-header bg-primary text-white'>
                <h5 class='mb-0'>Code Example Comparison</h5>
            </div>
            <div class='card-body'>
                <div class='row'>
                    <div class='col-md-6'>
                        <h6 class='text-primary'>IronPDF (Simple)</h6>
                        <div class='code-block'>
                            <pre class='mb-0'><code>var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");</code></pre>
                        </div>
                        <div class='badge bg-success mt-2'>3 Lines</div>
                    </div>
                    <div class='col-md-6'>
                        <h6 class='text-warning'>ExpertPDF (Complex)</h6>
                        <div class='code-block'>
                            <pre class='mb-0'><code>var converter = new HtmlToPdfConverter();
converter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4;
converter.NavigationTimeout = 60;
byte[] result = converter.GetPdfBytesFromHtmlString(html);
File.WriteAllBytes("output.pdf", result);</code></pre>
                        </div>
                        <div class='badge bg-warning text-dark mt-2'>5+ Lines</div>
                    </div>
                </div>
            </div>
            <div class='card-footer text-muted'>
                <small><strong>Comparison:</strong> IronPDF provides a more intuitive API with less configuration overhead for common use cases.</small>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(technicalDocs);
pdf.SaveAs("technical-documentation.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

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

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

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

        <div class='row g-3 mb-4'>
            <div class='col-md-4'>
                <div class='alert alert-success mb-0'>
                    <h6 class='alert-heading'>✓ Supported Features</h6>
                    <ul class='mb-0 small'>
                        <li>HTML5 semantic tags</li>
                        <li>CSS3 with Flexbox/Grid</li>
                        <li>JavaScript execution</li>
                        <li>External stylesheets</li>
                    </ul>
                </div>
            </div>
            <div class='col-md-4'>
                <div class='alert alert-info mb-0'>
                    <h6 class='alert-heading'>ⓘ Rendering Engine</h6>
                    <ul class='mb-0 small'>
                        <li>Chrome V8 Engine</li>
                        <li>98% browser fidelity</li>
                        <li>Sub-second rendering</li>
                        <li>Async/await support</li>
                    </ul>
                </div>
            </div>
            <div class='col-md-4'>
                <div class='alert alert-warning mb-0'>
                    <h6 class='alert-heading'>⚠ ExpertPDF Notes</h6>
                    <ul class='mb-0 small'>
                        <li>Complex API structure</li>
                        <li>Limited CSS3 support</li>
                        <li>No native JavaScript</li>
                        <li>Requires configuration</li>
                    </ul>
                </div>
            </div>
        </div>

        <div class='card shadow-sm'>
            <div class='card-header bg-primary text-white'>
                <h5 class='mb-0'>Code Example Comparison</h5>
            </div>
            <div class='card-body'>
                <div class='row'>
                    <div class='col-md-6'>
                        <h6 class='text-primary'>IronPDF (Simple)</h6>
                        <div class='code-block'>
                            <pre class='mb-0'><code>var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");</code></pre>
                        </div>
                        <div class='badge bg-success mt-2'>3 Lines</div>
                    </div>
                    <div class='col-md-6'>
                        <h6 class='text-warning'>ExpertPDF (Complex)</h6>
                        <div class='code-block'>
                            <pre class='mb-0'><code>var converter = new HtmlToPdfConverter();
converter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4;
converter.NavigationTimeout = 60;
byte[] result = converter.GetPdfBytesFromHtmlString(html);
File.WriteAllBytes("output.pdf", result);</code></pre>
                        </div>
                        <div class='badge bg-warning text-dark mt-2'>5+ Lines</div>
                    </div>
                </div>
            </div>
            <div class='card-footer text-muted'>
                <small><strong>Comparison:</strong> IronPDF provides a more intuitive API with less configuration overhead for common use cases.</small>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(technicalDocs);
pdf.SaveAs("technical-documentation.pdf");
$vbLabelText   $csharpLabel

輸出:包含 Bootstrap 5 卡片、警報、表格和程式碼區塊的專業技術文件 PDF。 IronPDF能夠精確渲染所有排版、間距工具和網格佈局,展現出卓越的文件產生能力。

如何建立佈局複雜的財務報表?

財務報告需要精確的表格格式和計算。 此範例示範了 IronPDF 使用 CSS Grid 和動態JavaScript進行複雜的財務佈局渲染。 有關更多詳細信息,請參閱PDF 中的JavaScript指南,包括自訂JavaScript執行。 為了優化文件品質和進行元資料管理以符合法規要求,財務文件可能需要進行PDF壓縮PDF 中的圖表渲染指南有助於資料視覺化。

using IronPdf;

var renderer = new ChromePdfRenderer();
// Enable JavaScript for dynamic calculations
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.RenderDelay = 500; // Allow JS to execute

string financialReport = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <style>
        @page { size: A4; margin: 20mm; }
        body { font-family: Arial, sans-serif; line-height: 1.6; }
        .header { text-align: center; margin-bottom: 30px; }
        .financial-grid { display: grid; grid-template-columns: 2fr 1fr 1fr; gap: 10px; margin-bottom: 20px; }
        .grid-header { background: #2c3e50; color: white; padding: 10px; font-weight: bold; }
        .grid-row { padding: 10px; border-bottom: 1px solid #ddd; }
        .grid-row:hover { background: #f9f9f9; }
        .amount { text-align: right; font-family: 'Courier New', monospace; }
        .positive { color: #27ae60; }
        .negative { color: #e74c3c; }
        .total-row { background: #ecf0f1; font-weight: bold; margin-top: 10px; }
        .footer-note { font-size: 0.8em; color: #666; margin-top: 30px; text-align: center; }
        @media print { 
            .grid-row:hover { background: transparent; }
            .financial-grid { page-break-inside: avoid; }
        }
    </style>
</head>
<body>
    <div class='header'>
        <h1>Quarterly Financial Report</h1>
        <p>Q4 2023 - Consolidated Statement</p>
    </div>

    <div class='financial-grid'>
        <div class='grid-header'>Revenue Stream</div>
        <div class='grid-header amount'>Q3 2023</div>
        <div class='grid-header amount'>Q4 2023</div>

        <div class='grid-row'>Software Licenses</div>
        <div class='grid-row amount'>$2,150,000</div>
        <div class='grid-row amount positive'>$2,875,000</div>

        <div class='grid-row'>Support Services</div>
        <div class='grid-row amount'>$850,000</div>
        <div class='grid-row amount positive'>$975,000</div>

        <div class='grid-row'>Consulting</div>
        <div class='grid-row amount'>$425,000</div>
        <div class='grid-row amount negative'>$380,000</div>

        <div class='grid-row total-row'>Total Revenue</div>
        <div class='grid-row total-row amount'>$3,425,000</div>
        <div class='grid-row total-row amount positive' id='total'>$4,230,000</div>
    </div>

    <div class='financial-grid'>
        <div class='grid-header'>Operating Expenses</div>
        <div class='grid-header amount'>Q3 2023</div>
        <div class='grid-header amount'>Q4 2023</div>

        <div class='grid-row'>R&D</div>
        <div class='grid-row amount'>$1,200,000</div>
        <div class='grid-row amount'>$1,350,000</div>

        <div class='grid-row'>Sales & Marketing</div>
        <div class='grid-row amount'>$800,000</div>
        <div class='grid-row amount'>$950,000</div>

        <div class='grid-row'>General & Admin</div>
        <div class='grid-row amount'>$400,000</div>
        <div class='grid-row amount'>$425,000</div>

        <div class='grid-row total-row'>Total Expenses</div>
        <div class='grid-row total-row amount'>$2,400,000</div>
        <div class='grid-row total-row amount'>$2,725,000</div>
    </div>

    <script>
        // Calculate growth percentage
        const q3Total = 3425000;
        const q4Total = 4230000;
        const growth = ((q4Total - q3Total) / q3Total * 100).toFixed(1);

        // Add growth indicator
        const totalEl = document.getElementById('total');
        totalEl.innerHTML += ` <small>(+${growth}%)</small>`;
    </script>

    <div class='footer-note'>
        <p>This report was generated using IronPDF's advanced rendering engine.<br>
        All financial figures are in USD. Report generated on: <span id='date'></span></p>
    </div>

    <script>
        document.getElementById('date').textContent = new Date().toLocaleDateString();
    </script>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(financialReport);
pdf.SaveAs("financial-report.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();
// Enable JavaScript for dynamic calculations
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.RenderDelay = 500; // Allow JS to execute

string financialReport = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <style>
        @page { size: A4; margin: 20mm; }
        body { font-family: Arial, sans-serif; line-height: 1.6; }
        .header { text-align: center; margin-bottom: 30px; }
        .financial-grid { display: grid; grid-template-columns: 2fr 1fr 1fr; gap: 10px; margin-bottom: 20px; }
        .grid-header { background: #2c3e50; color: white; padding: 10px; font-weight: bold; }
        .grid-row { padding: 10px; border-bottom: 1px solid #ddd; }
        .grid-row:hover { background: #f9f9f9; }
        .amount { text-align: right; font-family: 'Courier New', monospace; }
        .positive { color: #27ae60; }
        .negative { color: #e74c3c; }
        .total-row { background: #ecf0f1; font-weight: bold; margin-top: 10px; }
        .footer-note { font-size: 0.8em; color: #666; margin-top: 30px; text-align: center; }
        @media print { 
            .grid-row:hover { background: transparent; }
            .financial-grid { page-break-inside: avoid; }
        }
    </style>
</head>
<body>
    <div class='header'>
        <h1>Quarterly Financial Report</h1>
        <p>Q4 2023 - Consolidated Statement</p>
    </div>

    <div class='financial-grid'>
        <div class='grid-header'>Revenue Stream</div>
        <div class='grid-header amount'>Q3 2023</div>
        <div class='grid-header amount'>Q4 2023</div>

        <div class='grid-row'>Software Licenses</div>
        <div class='grid-row amount'>$2,150,000</div>
        <div class='grid-row amount positive'>$2,875,000</div>

        <div class='grid-row'>Support Services</div>
        <div class='grid-row amount'>$850,000</div>
        <div class='grid-row amount positive'>$975,000</div>

        <div class='grid-row'>Consulting</div>
        <div class='grid-row amount'>$425,000</div>
        <div class='grid-row amount negative'>$380,000</div>

        <div class='grid-row total-row'>Total Revenue</div>
        <div class='grid-row total-row amount'>$3,425,000</div>
        <div class='grid-row total-row amount positive' id='total'>$4,230,000</div>
    </div>

    <div class='financial-grid'>
        <div class='grid-header'>Operating Expenses</div>
        <div class='grid-header amount'>Q3 2023</div>
        <div class='grid-header amount'>Q4 2023</div>

        <div class='grid-row'>R&D</div>
        <div class='grid-row amount'>$1,200,000</div>
        <div class='grid-row amount'>$1,350,000</div>

        <div class='grid-row'>Sales & Marketing</div>
        <div class='grid-row amount'>$800,000</div>
        <div class='grid-row amount'>$950,000</div>

        <div class='grid-row'>General & Admin</div>
        <div class='grid-row amount'>$400,000</div>
        <div class='grid-row amount'>$425,000</div>

        <div class='grid-row total-row'>Total Expenses</div>
        <div class='grid-row total-row amount'>$2,400,000</div>
        <div class='grid-row total-row amount'>$2,725,000</div>
    </div>

    <script>
        // Calculate growth percentage
        const q3Total = 3425000;
        const q4Total = 4230000;
        const growth = ((q4Total - q3Total) / q3Total * 100).toFixed(1);

        // Add growth indicator
        const totalEl = document.getElementById('total');
        totalEl.innerHTML += ` <small>(+${growth}%)</small>`;
    </script>

    <div class='footer-note'>
        <p>This report was generated using IronPDF's advanced rendering engine.<br>
        All financial figures are in USD. Report generated on: <span id='date'></span></p>
    </div>

    <script>
        document.getElementById('date').textContent = new Date().toLocaleDateString();
    </script>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(financialReport);
pdf.SaveAs("financial-report.pdf");
$vbLabelText   $csharpLabel

此程式碼範例展示了IronPDF如何允許開發人員使用CSS Grid 佈局JavaScript執行特定於列印的 CSS 。 為報告添加自訂頁首和頁腳,實現品牌推廣的背景和前景,實現安全浮水印,實現身份驗證的數位簽名。 更多詳情請參閱產生 PDF 報告指南

如何將多個PDF檔案合併成一個PDF檔案?

這兩個庫都將多個 PDF 文件合併成一個文檔,從而整合資料以實現高效傳輸。 有關合併或分割 PDF 的更多詳細信息,請參閱相關指南。 多頁文件可能需要進行頁面管理拆分多頁 PDF 文件。 對於大檔案效能,請考慮非同步 PDF 產生並行處理合併兩個或多個 PDF 文件的範例提供了實際應用。 IronPDF提供完整的工具來整理 PDF 文件

IronPDF如何合併PDF文件?

此程式碼範例展示了IronPDF如何允許開發人員從 HTML 字串渲染兩個 PDF 並將它們合併。 這種簡單的方法提供了額外的設定選項。 有關合併文件中的頁碼分頁符,請參閱相應的指南。 此外,還可以複製 PDF 文件中的頁面,以便進行更精細的控制。 有關表單,請參閱表單管理編輯表單文件頁碼和分頁符號範例展示了組合實作方式。

// Import the IronPdf library
using IronPdf;

// Define HTML strings to convert to PDF
var htmlA = @"<p> [PDF_A] </p>
        <p> [PDF_A] 1st Page </p>
        <div style='page-break-after: always;'></div>
        <p> [PDF_A] 2nd Page</p>";

var htmlB = @"<p> [PDF_B] </p>
        <p> [PDF_B] 1st Page </p>
        <div style='page-break-after: always;'></div>
        <p> [PDF_B] 2nd Page</p>";

// Initialize a new renderer
var renderer = new ChromePdfRenderer();

// Render HTML strings as PDFs
var pdfDocA = renderer.RenderHtmlAsPdf(htmlA);
var pdfDocB = renderer.RenderHtmlAsPdf(htmlB);

// Merge the PDF documents
var mergedPdf = PdfDocument.Merge(pdfDocA, pdfDocB);

// Save the merged PDF
mergedPdf.SaveAs("Merged.pdf");
// Import the IronPdf library
using IronPdf;

// Define HTML strings to convert to PDF
var htmlA = @"<p> [PDF_A] </p>
        <p> [PDF_A] 1st Page </p>
        <div style='page-break-after: always;'></div>
        <p> [PDF_A] 2nd Page</p>";

var htmlB = @"<p> [PDF_B] </p>
        <p> [PDF_B] 1st Page </p>
        <div style='page-break-after: always;'></div>
        <p> [PDF_B] 2nd Page</p>";

// Initialize a new renderer
var renderer = new ChromePdfRenderer();

// Render HTML strings as PDFs
var pdfDocA = renderer.RenderHtmlAsPdf(htmlA);
var pdfDocB = renderer.RenderHtmlAsPdf(htmlB);

// Merge the PDF documents
var mergedPdf = PdfDocument.Merge(pdfDocA, pdfDocB);

// Save the merged PDF
mergedPdf.SaveAs("Merged.pdf");
$vbLabelText   $csharpLabel

Merge 方法接受多個文件為 Enumerable 物件。 請參閱IronPDF合併 PDF 程式碼範例。 如需新增封面或建立目錄,請參閱專門指南。 也可以新增內容附件分割 PDF 並提取頁面的範例示範了逆向操作。

請注意,包含可編輯表單的合併 PDF 檔案中,表單欄位名稱會附加索引號碼。 更多詳情請參閱表單資料處理指南。

ExpertPDF如何合併PDF文件?

ExpertPDF 使用需要單獨安裝的 Merge PDF 組件。 AppendPDFFile 方法將檔案追加到 PDFMerge 物件中:

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

// Initialize a new PDFMerge object
PDFMerge pdfMerge = new PDFMerge();
// Append PDF files to the merge object
pdfMerge.AppendPDFFile("output.pdf");
pdfMerge.AppendPDFFile("html-to-pdf.pdf");
// Save the merged PDF to a file
pdfMerge.SaveMergedPDFToFile("merged.pdf");
// Import the ExpertPdf.MergePdf namespace
using ExpertPdf.MergePdf;

// Initialize a new PDFMerge object
PDFMerge pdfMerge = new PDFMerge();
// Append PDF files to the merge object
pdfMerge.AppendPDFFile("output.pdf");
pdfMerge.AppendPDFFile("html-to-pdf.pdf");
// Save the merged PDF to a file
pdfMerge.SaveMergedPDFToFile("merged.pdf");
$vbLabelText   $csharpLabel

IronPDF在底層使用了更有效率的合併演算法。 為了獲得更高的效能,請考慮使用 IronPDF 的非同步 PDF 產生多執行緒產生功能來取代同步操作。

如何實現具有文件組織的高階PDF合併功能?

企業應用程式在合併 PDF 時需要書籤、頁面組織和元資料保留等進階功能。 本範例示範了書籤管理元資料處理和文件組織。 為了符合規定,請實施修訂歷史記錄PDF/A 轉換PDF/UA 可存取性大綱和書籤範例提供了更多實作細節。 有關更多詳細信息,請參閱設定和編輯元資料指南以及元資料可見性故障排除

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

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

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

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

            var pdf = renderer.RenderHtmlAsPdf(html);

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

            documentsToMerge.Add(pdf);
        }

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

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

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

        var tocPdf = renderer.RenderHtmlAsPdf(tocHtml);

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

        var finalPdf = PdfDocument.Merge(allDocuments);

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

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

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

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

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

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

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

            var pdf = renderer.RenderHtmlAsPdf(html);

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

            documentsToMerge.Add(pdf);
        }

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

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

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

        var tocPdf = renderer.RenderHtmlAsPdf(tocHtml);

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

        var finalPdf = PdfDocument.Merge(allDocuments);

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

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

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

        finalPdf.SaveAs("advanced-merged-document.pdf");
    }
}
$vbLabelText   $csharpLabel

此高階實作示範了書籤管理元資料處理頁碼標註。 更多詳情請參閱"整理 PDF"教學。 合併後探索PDF壓縮技術。 為了安全起見,請實施密碼保護加密新增經典文字頁首和頁尾範例提供了格式設定選項。 如需更多功能,請探索新增頁碼新增目錄指南。 密碼、安全性和元資料範例展示了整合實作。

如何將圖片轉換為PDF?

IronPDF可以將各種影像轉換為 PDF,這是 ExpertPDF 不具備的功能。 但是,ExpertPDF 可以從 PDF 中提取影像並將 PDF 轉換為影像, IronPDF也具備這些功能。 更多詳情請參考圖片轉PDF指南。 IronPDF支援將 PDF 柵格化為圖像以及擷取文字和圖像。 對於進階場景,可以繪製文字和點陣圖,繪製線條和矩形圖片轉PDF範例展示了實際應用。 有關影像質量,請參閱C# PDF 轉影像而不損失品質範例

IronPDF如何將影像轉換為 PDF?

從影像建立 PDF 使用的是 ImageToPdfConverter 類別。 可以從任何資料夾載入圖像,支援多種格式,包括多頁 TIFF 檔案。 也可以為現有 PDF 檔案中新增影像或使用SVG 圖形。 為了提高記憶體效率,請使用 MemoryStream 對圖像進行柵格化自訂 PDF 尺寸範例有助於控制佈局。

// Import the IronPdf namespace
using IronPdf;

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

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

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

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

除了將影像轉換為 PDF 之外, IronPDF還使用柵格化到影像功能將掃描文件和商業文件轉換為影像。 該庫還可以從各種文件類型中提取圖像。有關記憶體操作,請參閱使用 MemoryStream 將圖像柵格化指南。 對於大型影像,請考慮最佳化 ImageToPDF 檔案大小縱向和橫向方向範例有助於頁面設定。有關進階影像處理,請參閱嵌入點陣圖和影像範例

如何使用佈局控制建立進階影像到 PDF 轉換?

為了實現可控的影像放置和專業佈局,本相簿範例示範如何嵌入影像和建立佈局。 有關雲端存儲,請參閱Azure Blob 存儲映像指南灰階影像範例展示了影像處理選項:

using IronPdf;
using System.IO;

public class PhotoAlbumCreator
{
    public static void CreatePhotoAlbum(string imagesFolder, string outputPath)
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        renderer.RenderingOptions.MarginLeft = 20;
        renderer.RenderingOptions.MarginRight = 20;

        string htmlContent = @"
            <!DOCTYPE html>
            <html>
            <head>
                <style>
                    body { font-family: Arial, sans-serif; }
                    .album-title { text-align: center; font-size: 2em; margin-bottom: 30px; color: #2c3e50; }
                    .photo-container { margin-bottom: 30px; text-align: center; page-break-inside: avoid; }
                    .photo { max-width: 100%; max-height: 500px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); }
                    .caption { margin-top: 10px; font-style: italic; color: #666; }
                    .page-break { page-break-after: always; }
                </style>
            </head>
            <body>
                <h1 class='album-title'>My Photo Album</h1>";

        var imageFiles = Directory.GetFiles(imagesFolder, "*.*")
            .Where(file => new[] { ".jpg", ".jpeg", ".png", ".gif" }
            .Contains(Path.GetExtension(file).ToLower()))
            .ToList();

        for (int i = 0; i < imageFiles.Count; i++)
        {
            string base64Image = Convert.ToBase64String(File.ReadAllBytes(imageFiles[i]));
            string fileName = Path.GetFileNameWithoutExtension(imageFiles[i]);

            htmlContent += $@"
                <div class='photo-container'>
                    <img class='photo' src='data:image/jpeg;base64,{base64Image}' alt='{fileName}'>
                    <div class='caption'>Photo {i + 1}: {fileName}</div>
                </div>";

            // Add page break every 2 photos
            if ((i + 1) % 2 == 0 && i < imageFiles.Count - 1)
            {
                htmlContent += "<div class='page-break'></div>";
            }
        }

        htmlContent += @"
                <div style='text-align: center; margin-top: 40px; color: #999;'>
                    <small>Created with IronPDF - Total Photos: " + imageFiles.Count + @"</small>
                </div>
            </body>
            </html>";

        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs(outputPath);
    }
}

// Usage
PhotoAlbumCreator.CreatePhotoAlbum(@"C:\MyPhotos", @"C:\MyPhotoAlbum.pdf");
using IronPdf;
using System.IO;

public class PhotoAlbumCreator
{
    public static void CreatePhotoAlbum(string imagesFolder, string outputPath)
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        renderer.RenderingOptions.MarginLeft = 20;
        renderer.RenderingOptions.MarginRight = 20;

        string htmlContent = @"
            <!DOCTYPE html>
            <html>
            <head>
                <style>
                    body { font-family: Arial, sans-serif; }
                    .album-title { text-align: center; font-size: 2em; margin-bottom: 30px; color: #2c3e50; }
                    .photo-container { margin-bottom: 30px; text-align: center; page-break-inside: avoid; }
                    .photo { max-width: 100%; max-height: 500px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); }
                    .caption { margin-top: 10px; font-style: italic; color: #666; }
                    .page-break { page-break-after: always; }
                </style>
            </head>
            <body>
                <h1 class='album-title'>My Photo Album</h1>";

        var imageFiles = Directory.GetFiles(imagesFolder, "*.*")
            .Where(file => new[] { ".jpg", ".jpeg", ".png", ".gif" }
            .Contains(Path.GetExtension(file).ToLower()))
            .ToList();

        for (int i = 0; i < imageFiles.Count; i++)
        {
            string base64Image = Convert.ToBase64String(File.ReadAllBytes(imageFiles[i]));
            string fileName = Path.GetFileNameWithoutExtension(imageFiles[i]);

            htmlContent += $@"
                <div class='photo-container'>
                    <img class='photo' src='data:image/jpeg;base64,{base64Image}' alt='{fileName}'>
                    <div class='caption'>Photo {i + 1}: {fileName}</div>
                </div>";

            // Add page break every 2 photos
            if ((i + 1) % 2 == 0 && i < imageFiles.Count - 1)
            {
                htmlContent += "<div class='page-break'></div>";
            }
        }

        htmlContent += @"
                <div style='text-align: center; margin-top: 40px; color: #999;'>
                    <small>Created with IronPDF - Total Photos: " + imageFiles.Count + @"</small>
                </div>
            </body>
            </html>";

        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs(outputPath);
    }
}

// Usage
PhotoAlbumCreator.CreatePhotoAlbum(@"C:\MyPhotos", @"C:\MyPhotoAlbum.pdf");
$vbLabelText   $csharpLabel

此程式碼範例展示了IronPDF如何允許開發人員使用 DataURI 嵌入圖像、管理分頁符號和建立專業佈局。 有關雲端鏡像,請參閱Azure Blob 儲存鏡像指南。 對於大型文件,請考慮最佳化 ImageToPDF 文件大小。 此外,還可以縮放 PDF 對象平移 PDF 對象,以實現精確定位。 將 PDF 匯出到記憶體的範例有助於實現記憶體高效的工作流程。 請參閱高效率新增 HTML 內容指南,以了解如何進行批次處理。

有哪些授權和定價方案?

IronPDF是一個商業性的C# PDF 庫,可從IronPDF網站取得。免費用於個人開發,商業用途需獲得許可。 我們為單一專案、開發者、機構和公司提供各種許可證。 支援SaaS和OEM再分發。 有關實作細節,請參閱許可證金鑰指南。 部署時,請正確套用許可證密鑰。 對於 Web 應用程序,請在 Web.config 中設定許可證金鑰。 如果遇到許可伺服器連線問題,請參閱故障排除指南。使用許可證金鑰指南提供了完整的實作細節。

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

所有許可證均包含 30 天退款保證、一年技術支援和產品更新。 永久許可證只需一次性購買,無需額外費用。 適用於單一開發者/專案的輕量級軟體包從 $799 開始。 如需第一年後的技術支持,請參閱許可證延期條款。 若要升級以獲得更多功能或部署,請查看許可證升級。 有關IronPDF和 IIS部署或將IronPDF新增至軟體安裝程序,請參閱專門指南。 ClickOnce 版本不相容性指南有助於解決部署問題。

ExpertPDF提供按開發者或按公司劃分的許可。 免費試用ExpertPDF 。 請查看以下許可功能。 考慮使用 IronPDF 的透明許可選項來代替 ExpertPDF,以獲得更高的價值和更全面的支援。

NuGet套件管理器介面顯示了六個 ExpertPDF 庫及其下載統計信息,包括 HTML 轉 PDF 轉換器(下載量 14.5 萬次)和各種專業的 PDF 處理工具,所有庫的版本均為 11.0.2.0

ExpertComponents 工具包總開發者授權起價 850 美元,ExpertPDF 工具包起價為 750 美元。可單獨購買各個組件。 查看ExpertPDF的完整定價。 對於企業級需求,IronPDF 的授權方案提供更全面的功能集,性價比更高。

我應該選擇哪個PDF庫?

IronPDF無需網路連線即可在本地將 HTML 渲染成 PDF,模擬符合標準的網頁瀏覽器。 HTML渲染器可產生精確的向量格式輸出,適用於商業印刷。 已取得商業用途許可,價格透明。 對於企業部署, IronPDF提供Docker 支援遠端引擎功能。 請參閱以遠端容器方式執行IronPDF以及原生引擎與遠端引擎選項的指南。 該庫提供IronPdf.Slim以減少部署大小,並支援軟體包大小最佳化IronPdf.Slim v2025.5.6 部署異常指南可協助解決特定版本問題。

ExpertPDF 的 HTML 轉 PDF 轉換器庫可以將網頁和 HTML 轉換為 PDF,從ASP.NET產生報告,並進行電子合約簽署。 免費使用,但需購買附加功能。 與 IronPDF 提供的完整平台支援(包括Android 部署)不同,ExpertPDF 僅限於 Windows 平台。 IronPDF在幕後採用了先進的安全功能和定期的產品更新里程碑概述展示了持續改進,包括Chrome 渲染里程碑相容性里程碑以及穩定性和效能里程碑

雖然這兩個庫都能處理 PDF 並轉換常用格式,但IronPDF比 ExpertPDF 具有優勢。 IronPDF可轉換的格式範圍更廣,包括XML 、映像、 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伺服器整合Razor到 PDF 的轉換。 該庫支援 MVC 應用程式的CSHTML 到 PDF 轉換無頭 CSHTML 渲染。 有關限制,請參閱Blazor Server / WebAssembly 指南

對於特殊用途, IronPDF整合了OpenAI,可進行智慧處理在 PDF 中渲染圖表,在 MVC 應用程式中將 CSHTML 轉換為 PDF ,並支援國際語言和 UTF-8 。 該庫可以處理複雜的場景:展平 PDF線性化以實現快速網頁瀏覽以及建立 PDF 表單。 探索如何轉換 PDF 頁面刪除 PDF 物件以及設定自訂臨時路徑。 IronPDF 的完整功能概述展示了建立 PDF轉換 PDF編輯 PDF組織 PDF保護 PDF 的功能。 其他功能包括使用 C# 讀取 PDF 文件文字查找和替換以及刪除特定的 PDF 頁面

如需部署注意事項,請參閱 在本機電腦上偵錯 Azure 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 提供一個合併方法來將多個 PDF 合併成一個文檔。ExpertPDF 也提供一個 PDFMerge 組件來合併 PDF。

IronPDF 是否需要互聯網連接來進行 HTML 到 PDF 轉換?

不,IronPDF 不需要互聯網連接就能進行 HTML 到 PDF 轉換,這使它成為離線應用程式的可靠選擇。

IronPDF 有哪些授權選項?

IronPDF 提供多種授權選項,包括單一專案、開發者、代理商和企業授權。所有授權都是永久性的,並包含 30 天退款保證和為期一年的支持及更新。

ExpertPDF 能處理 PDF 文檔的數位簽名嗎?

是的,ExpertPDF 支持對 PDF 文檔進行數位簽名,使 PDF 文件安全和經過身份驗證。

C# 開發者在處理 PDF 時面臨什麼挑戰,這些庫如何幫助?

C# 開發者在讀取、寫入、創建和轉換 PDF 時經常面臨挑戰。像 IronPDF 和 ExpertPDF 這些庫通過提供強大的 HTML 到 PDF 轉換、PDF 編輯等工具來簡化這些任務,便於將其輕鬆整合到 C# 應用程式中。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me