跳過到頁腳內容
產品比較

IronPDF對比PDFTron (Apryse):2025年完整C# PDF庫比較

您是否在為您的.NET專案尋找合適的PDF程式庫? 這份IronPDF和PDFTron(現為Apryse)之間的全面比較分析了功能、定價、性能和開發者體驗,幫助您做出明智的決定。 無論您在構建網頁應用程式、桌面軟體還是雲端服務,選擇合適的PDF工具包都能顯著影響您的開發速度和專案成功。

快速比較摘要

**類別** **功能/方面** **IronPDF** **PDFTron(Apryse)** **關鍵優勢**
**核心架構** 設計理念 簡單優先,Chrome V8引擎 以企業為焦點,自訂引擎 IronPDF:更快的開發
API複雜度 簡單的方法如RenderHtmlAsPdf() IronPDF:節省70%的代碼
學習曲線 1-2天典型 1-2週典型 IronPDF:更快的採用
**平台支援** 跨平台 原生支援,單一包 需要多個包/模組 IronPDF:更簡單的部署
.NET版本 .NET 10, 9, 8, 7, 6, 5, Core 3.1+, Framework 4.6.2+ 類似支援但需額外設置 兩者:現代框架支援
**HTML轉PDF** 渲染引擎 完整Chrome V8引擎 自訂引擎(通過HTML2PDF模組) IronPDF:98%+的瀏覽器保真度
JavaScript支援 全支援帶有渲染延遲 支援有限 IronPDF:動態內容就緒
**MS Office支援** DOCX轉PDF 內建DocxToPdfRenderer PDFTron:更好的Office保真度
CAD支援 不提供 DWG, DXF, DGN轉PDF PDFTron:CAD工作流程
**性能** HTML渲染速度 0.8-1.2s典型(Chrome引擎) 0.3-0.5s典型(簡單的HTML) PDFTron:對於基本HTML更快
內存使用 150-200MB(Chrome進程) 80-120MB典型 PDFTron:更低的記憶體佔用
**Licensing & Pricing** 入門級 Lite: $799 (1 dev, 1 project) 自訂報價(估計$5,000-$10,000+) IronPDF:透明定價
企業級 Professional: $2,399 (10 devs) 自訂報價(估計$30,000+) IronPDF:最多節省90%的成本
**支援** 支援包含 是的,24/5工程支援 依賴於授權級別而變化 IronPDF:支援已包含
**最適合的使用情境** 使用案例 現代網頁應用程式,HTML報告,快速開發 文檔密集型工作流程,CAD/Office轉換 依據具體情況而定

什麼是IronPDF和PDFTron(Apryse)?

IronPDF概述

IronPDF是一個全面的.NET PDF程式庫,簡化了PDF的創建、編輯和處理。 基於Chrome渲染引擎,擅長將HTML、CSS和JavaScript轉換為像素完美的PDF文件。 該程式庫的簡單API設計允許開發者以最少的代碼整合PDF功能,因此特別適合網頁應用程式、報告系統和文件自動化。

PDFTron(Apryse)概述

PDFTron於2023年2月更名為Apryse,是一個專注於企業的PDF SDK,提供廣泛的文檔處理功能。 最初為複雜的文檔工作流程開發,提供對多種文件格式的強大支援,包括Microsoft Office、CAD圖紙和專用文件類型。PDFTron Systems Inc.,全球領銜的文件處理技術公司,宣布更名為Apryse; 將13家公司整合在一起,包括iText、Windward、Eversign等。

如何為PDF生成創建ASP.NET專案?

不論選擇哪個程式庫,設定ASP.NET專案以生成PDF都需要正確配置。 遵循以下步驟創建適用于IronPDF或PDFTron整合的基礎:

  1. 打開Visual Studio 2022或更高版本
  2. 點擊"創建新專案"
  3. 選擇"ASP.NET Core Web App"(建議.NET 6.0或更高版本)
  4. 選擇您的專案名稱和位置
  5. 根據需要選擇"Web應用程式(模型-視圖-控制器)"或"Web API"
  6. 確保選擇".NET 8.0"或更高版本以獲得最佳相容性

Visual Studio中新專案對話框顯示出ASP.NET Core Web App選擇 Visual Studio的新建專案對話框中顯示ASP.NET專案模板以整合PDF程式庫

對於Web Forms應用程式:

  • 選擇"ASP.NET Web應用程式(.NET Framework)"
  • 從模板選項中選擇"Web Forms"
  • 點擊"創建"以生成專案結構

在Visual Studio專案創建嚮導中選擇Web Forms模板 為傳統ASP.NET應用程式選擇具備PDF能力的Web Forms模板

如何在我的C#專案中安裝IronPDF?

IronPDF提供多種安裝方法,以適應不同的開發工作流。 在Visual Studio中,右鍵點擊您的專案在解決方案總管中,選擇"管理NuGet套件..."。 從那裡,簡單地搜尋IronPDF並安裝最新版本。

方法1:使用Visual Studio套件管理器

最簡單的方法是使用Visual Studio內建的NuGet套件管理器:

  1. 右鍵點擊解決方案總管中的專案
  2. 選擇"管理NuGet套件"
  3. 點擊"瀏覽"並搜尋"IronPDF"
  4. 在IronPDF套件上點擊"安裝"

解決方案總管上下文菜單顯示管理NuGet套件選項 通過Visual Studio的解決方案總管訪問NuGet套件管理器以安裝IronPDF

Visual Studio中顯示程序包管理選項的專案菜單 通過Visual Studio的專案菜單訪問NuGet套件管理器的替代途徑

NuGet套件管理器介面顯示IronPDF安裝 通過NuGet套件管理器安裝IronPDF,包含版本信息和依賴關係

方法2:使用套件管理控制台

對於偏好命令行工具的開發者:

# Open Package Manager Console in Visual Studio
# Tools > NuGet Package Manager > Package Manager Console
Install-Package IronPdf

# For specific version installation
Install-Package IronPdf -Version 2025.7.0
# Open Package Manager Console in Visual Studio
# Tools > NuGet Package Manager > Package Manager Console
Install-Package IronPdf

# For specific version installation
Install-Package IronPdf -Version 2025.7.0
SHELL

方法3:直接下載安裝

不具備NuGet訪問權限的環境:

  1. IronPDF的官方網站下載
  2. 解壓縮ZIP文件到您的專案目錄
  3. 在Visual Studio中,右鍵點擊"參考"→"添加參考"
  4. 瀏覽並選擇IronPdf.dll

方法4:使用.NET CLI

對於命令行愛好者和CI/CD管道:

# Navigate to your project directory
cd MyProject

# Install IronPDF
dotnet add package IronPdf

# Restore packages
dotnet restore
# Navigate to your project directory
cd MyProject

# Install IronPDF
dotnet add package IronPdf

# Restore packages
dotnet restore
SHELL

如何安裝PDFTron(Apryse)SDK?

由於其模組化架構和專注於企業,PDFTron的安裝步驟更多。 過程會根據目標平台和所需功能而有所不同。

前置需求

  • Visual Studio 2019或更高版本
  • .NET桌面開發工作負載
  • .NET Framework 4.5.1+開發工具
  • PDFTron SDK下載

手動整合步驟

  1. 解壓縮SDK

    # Example extraction path
    PDFNET_BASE = C:/PDFTron/PDFNetDotNet4/
    # Example extraction path
    PDFNET_BASE = C:/PDFTron/PDFNetDotNet4/
    SHELL
  2. 使用授權金鑰初始化

    // Initialize PDFTron with your license key
    pdftron.PDFNet.Initialize("your-license-key-here");
    
    // Note: Demo keys expire after evaluation period
    // Contact Apryse sales for production licenses
    // Initialize PDFTron with your license key
    pdftron.PDFNet.Initialize("your-license-key-here");
    
    // Note: Demo keys expire after evaluation period
    // Contact Apryse sales for production licenses
    $vbLabelText   $csharpLabel
  3. 複製所需的程式庫

    • Lib資料夾到您的專案目錄
    • 添加兩者的參考PDFNet.dll
  4. 配置本地複製屬性

在Visual Studio中設置PDFTron本地複製屬性為False 將PDFNet.dll的本地複製屬性設置為False以實現正確的PDFTron部署

  1. 更新App.config

    <configuration>
       <runtime>
           <loadFromRemoteSources enabled="true" />
       </runtime>
    </configuration>
    <configuration>
       <runtime>
           <loadFromRemoteSources enabled="true" />
       </runtime>
    </configuration>
    XML
  2. 配置後編譯事件

    xcopy $(ProjectDir)Lib\PDFNet $(TargetDir)PDFNet /S /I /Y
    xcopy $(ProjectDir)Lib\PDFNet $(TargetDir)PDFNet /S /I /Y
    SHELL

NuGet安裝(簡化版)

對於更流線型的方法:

  1. 打開NuGet套件管理器
  2. 搜尋"PDFTron.NET.x64"或平台專用的包
  3. 安裝適合您架構的包

PDFTron NuGet套件安裝介面 通過NuGet套件管理器安裝PDFTron,包含平台專用的包

PDFTron相比ComPDFKit的10+類型提供了超過30種批註類型。然而,這個龐大的功能集中需要在安裝過程中仔細選擇模組。

如何使用這些程式庫將URL轉換為PDF?

兩個程式庫都提供URL轉PDF的功能,但採用不同的方法和能力。 讓我們來檢查每個程式庫的實施細節和性能特徵。

IronPDF的URL轉PDF

IronPDF的Chrome渲染引擎為現代網頁標準提供卓越的支持:

using IronPdf;

// Initialize the Chrome renderer with advanced options
var renderer = new ChromePdfRenderer();

// Configure rendering for optimal results
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.RenderDelay = 1000; // Wait for JS execution

// Handle authentication if needed
renderer.LoginCredentials = new ChromeHttpLoginCredentials() {
    Username = "user@domain.com",
    Password = "secure_password"
};

// Render URL to PDF with full browser capabilities
var pdf = renderer.RenderUrlAsPdf("https://ironpdf.com/");

// Add metadata for document management
pdf.MetaData.Author = "Development Team";
pdf.MetaData.Title = "Website Export - " + DateTime.Now.ToString("yyyy-MM-dd");

// Save with compression
pdf.CompressImages(90);
pdf.SaveAs("website-export.pdf");
using IronPdf;

// Initialize the Chrome renderer with advanced options
var renderer = new ChromePdfRenderer();

// Configure rendering for optimal results
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.RenderDelay = 1000; // Wait for JS execution

// Handle authentication if needed
renderer.LoginCredentials = new ChromeHttpLoginCredentials() {
    Username = "user@domain.com",
    Password = "secure_password"
};

// Render URL to PDF with full browser capabilities
var pdf = renderer.RenderUrlAsPdf("https://ironpdf.com/");

// Add metadata for document management
pdf.MetaData.Author = "Development Team";
pdf.MetaData.Title = "Website Export - " + DateTime.Now.ToString("yyyy-MM-dd");

// Save with compression
pdf.CompressImages(90);
pdf.SaveAs("website-export.pdf");
$vbLabelText   $csharpLabel

IronPDF中的Chrome渲染器處理複雜場景,包括:

  • 單頁應用程式(SPAs)與繁重的JavaScript
  • 使用媒體查詢的響應式設計
  • 網頁字體和外部樣式表
  • AJAX內容加載
  • CSS動畫和過渡

IronPDF主分支現在支持所有這些:nuget.org/packages/IronPdf。 最近的性能改進顯著提升了渲染速度,特別是對於複雜的網頁應用程式。

PDFTron(Apryse)的URL轉PDF

PDFTron需要使用HTML2PDF模組進行網頁內容轉換:

using pdftron;
using pdftron.PDF;
using pdftron.SDF;

class UrlToPdfConverter 
{
    public static void ConvertUrlToPdf(string url, string outputPath)
    {
        // Initialize PDFTron with license
        PDFNet.Initialize("your-license-key");

        // Create a new PDF document
        using (PDFDoc doc = new PDFDoc())
        {
            // Initialize HTML2PDF converter
            HTML2PDF converter = new HTML2PDF();

            // Configure conversion settings
            HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
            settings.SetPrintBackground(true);
            settings.SetLoadImages(true);

            // Set page dimensions
            converter.SetPaperSize(PrinterMode.PaperSize.e_letter);
            converter.SetMargins(0.5, 0.5, 0.5, 0.5);

            // Insert URL content
            converter.InsertFromURL(url);

            // Perform conversion
            if (converter.Convert(doc))
            {
                // Save the resulting PDF
                doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
                Console.WriteLine($"Successfully converted {url} to {outputPath}");
            }
            else
            {
                Console.WriteLine("Conversion failed");
            }
        }
    }
}
using pdftron;
using pdftron.PDF;
using pdftron.SDF;

class UrlToPdfConverter 
{
    public static void ConvertUrlToPdf(string url, string outputPath)
    {
        // Initialize PDFTron with license
        PDFNet.Initialize("your-license-key");

        // Create a new PDF document
        using (PDFDoc doc = new PDFDoc())
        {
            // Initialize HTML2PDF converter
            HTML2PDF converter = new HTML2PDF();

            // Configure conversion settings
            HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
            settings.SetPrintBackground(true);
            settings.SetLoadImages(true);

            // Set page dimensions
            converter.SetPaperSize(PrinterMode.PaperSize.e_letter);
            converter.SetMargins(0.5, 0.5, 0.5, 0.5);

            // Insert URL content
            converter.InsertFromURL(url);

            // Perform conversion
            if (converter.Convert(doc))
            {
                // Save the resulting PDF
                doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
                Console.WriteLine($"Successfully converted {url} to {outputPath}");
            }
            else
            {
                Console.WriteLine("Conversion failed");
            }
        }
    }
}
$vbLabelText   $csharpLabel

PDFTron HTML2PDF的重要考量:

  • PDFTron的SDK是根據技術(API,功能)的廣度和發佈範圍(外部或內部用戶)進行報價的。
  • 相比瀏覽器引擎有有限的JavaScript支援
  • 對於複雜佈局可能需要額外的配置
  • 更適合簡單的HTML文件

如何從HTML字串創建PDF?

從HTML字串創建PDF對於生成動態報告、發票和文件至關重要。 兩個程式庫以不同的方式處理這一過程。

IronPDF的HTML字串轉PDF

IronPDF在渲染複雜HTML方面表現出色,具有完整的CSS3和JavaScript支援:

using IronPdf;
using System.Text;

public class HtmlStringToPdfConverter
{
    public static PdfDocument GenerateInvoice(InvoiceData data)
    {
        // Build dynamic HTML with modern CSS
        var html = new StringBuilder();
        html.Append(@"
        <!DOCTYPE html>
        <html>
        <head>
            <meta charset='UTF-8'>
            <style>
                @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap');

                body {
                    font-family: 'Roboto', sans-serif;
                    margin: 0;
                    padding: 20px;
                    color: #333;
                }

                .invoice-header {
                    display: flex;
                    justify-content: space-between;
                    border-bottom: 2px solid #007bff;
                    padding-bottom: 20px;
                    margin-bottom: 30px;
                }

                .company-logo {
                    width: 150px;
                    height: auto;
                }

                .invoice-details {
                    text-align: right;
                }

                .invoice-number {
                    font-size: 24px;
                    font-weight: 700;
                    color: #007bff;
                }

                table {
                    width: 100%;
                    border-collapse: collapse;
                    margin-top: 20px;
                }

                th {
                    background-color: #f8f9fa;
                    padding: 12px;
                    text-align: left;
                    border-bottom: 2px solid #dee2e6;
                }

                td {
                    padding: 12px;
                    border-bottom: 1px solid #dee2e6;
                }

                .total-row {
                    font-weight: 700;
                    font-size: 18px;
                    background-color: #e9ecef;
                }

                @media print {
                    body { margin: 0; }
                    .no-print { display: none; }
                }
            </style>
        </head>
        <body>
        ");

        // Add invoice header
        html.Append($@"
            <div class='invoice-header'>
                <div>
                    <img src='data:image/png;base64,{data.CompanyLogoBase64}' class='company-logo' alt='Company Logo'>
                    <h2>{data.CompanyName}</h2>
                    <p>{data.CompanyAddress}</p>
                </div>
                <div class='invoice-details'>
                    <div class='invoice-number'>Invoice #{data.InvoiceNumber}</div>
                    <p>Date: {data.InvoiceDate:yyyy-MM-dd}</p>
                    <p>Due: {data.DueDate:yyyy-MM-dd}</p>
                </div>
            </div>
        ");

        // Add line items table
        html.Append(@"
            <table>
                <thead>
                    <tr>
                        <th>Description</th>
                        <th>Quantity</th>
                        <th>Unit Price</th>
                        <th>Total</th>
                    </tr>
                </thead>
                <tbody>
        ");

        foreach (var item in data.LineItems)
        {
            html.Append($@"
                <tr>
                    <td>{item.Description}</td>
                    <td>{item.Quantity}</td>
                    <td>${item.UnitPrice:F2}</td>
                    <td>${item.Total:F2}</td>
                </tr>
            ");
        }

        html.Append($@"
                </tbody>
                <tfoot>
                    <tr class='total-row'>
                        <td colspan='3'>Total</td>
                        <td>${data.Total:F2}</td>
                    </tr>
                </tfoot>
            </table>
        </body>
        </html>
        ");

        // Configure renderer for optimal output
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
        renderer.RenderingOptions.EnableJavaScript = true;
        renderer.RenderingOptions.CreatePdfFormsFromHtml = true;

        // Generate PDF with proper base path for assets
        var pdf = renderer.RenderHtmlAsPdf(html.ToString());

        // Add security if needed
        pdf.SecuritySettings.UserPassword = data.CustomerEmail;
        pdf.SecuritySettings.AllowUserPrinting = true;
        pdf.SecuritySettings.AllowUserCopyPasteContent = false;

        return pdf;
    }
}
using IronPdf;
using System.Text;

public class HtmlStringToPdfConverter
{
    public static PdfDocument GenerateInvoice(InvoiceData data)
    {
        // Build dynamic HTML with modern CSS
        var html = new StringBuilder();
        html.Append(@"
        <!DOCTYPE html>
        <html>
        <head>
            <meta charset='UTF-8'>
            <style>
                @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap');

                body {
                    font-family: 'Roboto', sans-serif;
                    margin: 0;
                    padding: 20px;
                    color: #333;
                }

                .invoice-header {
                    display: flex;
                    justify-content: space-between;
                    border-bottom: 2px solid #007bff;
                    padding-bottom: 20px;
                    margin-bottom: 30px;
                }

                .company-logo {
                    width: 150px;
                    height: auto;
                }

                .invoice-details {
                    text-align: right;
                }

                .invoice-number {
                    font-size: 24px;
                    font-weight: 700;
                    color: #007bff;
                }

                table {
                    width: 100%;
                    border-collapse: collapse;
                    margin-top: 20px;
                }

                th {
                    background-color: #f8f9fa;
                    padding: 12px;
                    text-align: left;
                    border-bottom: 2px solid #dee2e6;
                }

                td {
                    padding: 12px;
                    border-bottom: 1px solid #dee2e6;
                }

                .total-row {
                    font-weight: 700;
                    font-size: 18px;
                    background-color: #e9ecef;
                }

                @media print {
                    body { margin: 0; }
                    .no-print { display: none; }
                }
            </style>
        </head>
        <body>
        ");

        // Add invoice header
        html.Append($@"
            <div class='invoice-header'>
                <div>
                    <img src='data:image/png;base64,{data.CompanyLogoBase64}' class='company-logo' alt='Company Logo'>
                    <h2>{data.CompanyName}</h2>
                    <p>{data.CompanyAddress}</p>
                </div>
                <div class='invoice-details'>
                    <div class='invoice-number'>Invoice #{data.InvoiceNumber}</div>
                    <p>Date: {data.InvoiceDate:yyyy-MM-dd}</p>
                    <p>Due: {data.DueDate:yyyy-MM-dd}</p>
                </div>
            </div>
        ");

        // Add line items table
        html.Append(@"
            <table>
                <thead>
                    <tr>
                        <th>Description</th>
                        <th>Quantity</th>
                        <th>Unit Price</th>
                        <th>Total</th>
                    </tr>
                </thead>
                <tbody>
        ");

        foreach (var item in data.LineItems)
        {
            html.Append($@"
                <tr>
                    <td>{item.Description}</td>
                    <td>{item.Quantity}</td>
                    <td>${item.UnitPrice:F2}</td>
                    <td>${item.Total:F2}</td>
                </tr>
            ");
        }

        html.Append($@"
                </tbody>
                <tfoot>
                    <tr class='total-row'>
                        <td colspan='3'>Total</td>
                        <td>${data.Total:F2}</td>
                    </tr>
                </tfoot>
            </table>
        </body>
        </html>
        ");

        // Configure renderer for optimal output
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
        renderer.RenderingOptions.EnableJavaScript = true;
        renderer.RenderingOptions.CreatePdfFormsFromHtml = true;

        // Generate PDF with proper base path for assets
        var pdf = renderer.RenderHtmlAsPdf(html.ToString());

        // Add security if needed
        pdf.SecuritySettings.UserPassword = data.CustomerEmail;
        pdf.SecuritySettings.AllowUserPrinting = true;
        pdf.SecuritySettings.AllowUserCopyPasteContent = false;

        return pdf;
    }
}
$vbLabelText   $csharpLabel

IronPDF的HTML渲染的主要優勢:

  • 完整的CSS3支援,包括flexbox和網格佈局
  • 谷歌字體和網頁字體整合
  • JavaScript圖表庫(Chart.js,D3.js)的完美渲染
  • 改變視窗控制的響應設計支援
  • 自包含檔案的Base64圖片嵌入

PDFTron(Apryse)的HTML字串轉PDF

PDFTron的HTML字串轉換方法:

using pdftron;
using pdftron.PDF;
using pdftron.SDF;

public class PdfTronHtmlConverter
{
    public static void ConvertHtmlString(string htmlContent, string outputPath)
    {
        PDFNet.Initialize("your-license-key");

        using (PDFDoc doc = new PDFDoc())
        {
            // Create HTML2PDF converter instance
            HTML2PDF converter = new HTML2PDF();

            // Configure page settings
            converter.SetPaperSize(PrinterMode.PaperSize.e_letter);
            converter.SetLandscape(false);
            converter.SetMargins(1.0, 1.0, 1.0, 1.0, HTML2PDF.e_inches);

            // Enable images and backgrounds
            HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
            settings.SetPrintBackground(true);
            settings.SetLoadImages(true);
            settings.SetJavaScriptDelay(1000); // Limited JS support

            // Insert HTML content
            converter.InsertFromHtmlString(htmlContent);

            // Convert to PDF
            if (converter.Convert(doc))
            {
                // Post-processing options
                doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
            }
        }
    }
}
using pdftron;
using pdftron.PDF;
using pdftron.SDF;

public class PdfTronHtmlConverter
{
    public static void ConvertHtmlString(string htmlContent, string outputPath)
    {
        PDFNet.Initialize("your-license-key");

        using (PDFDoc doc = new PDFDoc())
        {
            // Create HTML2PDF converter instance
            HTML2PDF converter = new HTML2PDF();

            // Configure page settings
            converter.SetPaperSize(PrinterMode.PaperSize.e_letter);
            converter.SetLandscape(false);
            converter.SetMargins(1.0, 1.0, 1.0, 1.0, HTML2PDF.e_inches);

            // Enable images and backgrounds
            HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
            settings.SetPrintBackground(true);
            settings.SetLoadImages(true);
            settings.SetJavaScriptDelay(1000); // Limited JS support

            // Insert HTML content
            converter.InsertFromHtmlString(htmlContent);

            // Convert to PDF
            if (converter.Convert(doc))
            {
                // Post-processing options
                doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
            }
        }
    }
}
$vbLabelText   $csharpLabel

需要考慮的PDFTron HTML限制:

  • 基本CSS支援(不支援高級佈局)
  • 有限的JavaScript執行
  • 字體嵌入需要額外配置
  • 更適合簡單的文件佈局

如何將ASPX頁面轉換為PDF?

將ASPX頁面轉換為PDF是ASP.NET應用程式的一個常見需求。 IronPDF提供原生支持,而PDFTron則需要變通辦法。

IronPDF的ASPX轉PDF

IronPDF提供流暢的ASPX轉換,只需要一行代碼:

using IronPdf;

public partial class InvoicePage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // Render the current ASPX page as PDF on page load
        if (Request.QueryString["pdf"] == "true")
        {
            // Configure PDF output options
            AspxToPdf.RenderThisPageAsPdf(
                AspxToPdf.FileBehavior.InBrowser,
                "Invoice_" + DateTime.Now.ToString("yyyyMMdd") + ".pdf");
        }
    }

    protected void ExportToPdfButton_Click(object sender, EventArgs e)
    {
        // Advanced configuration for ASPX to PDF
        IronPdf.AspxToPdf.RenderThisPageAsPdf(
            IronPdf.AspxToPdf.FileBehavior.Attachment,
            "Invoice.pdf",
            new ChromePdfRenderOptions()
            {
                PaperSize = PdfPaperSize.A4,
                MarginTop = 20,
                MarginBottom = 20,
                CssMediaType = PdfCssMediaType.Print,
                EnableJavaScript = true,
                CreatePdfFormsFromHtml = true,
                FitToPaper = true
            });
    }
}
using IronPdf;

public partial class InvoicePage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // Render the current ASPX page as PDF on page load
        if (Request.QueryString["pdf"] == "true")
        {
            // Configure PDF output options
            AspxToPdf.RenderThisPageAsPdf(
                AspxToPdf.FileBehavior.InBrowser,
                "Invoice_" + DateTime.Now.ToString("yyyyMMdd") + ".pdf");
        }
    }

    protected void ExportToPdfButton_Click(object sender, EventArgs e)
    {
        // Advanced configuration for ASPX to PDF
        IronPdf.AspxToPdf.RenderThisPageAsPdf(
            IronPdf.AspxToPdf.FileBehavior.Attachment,
            "Invoice.pdf",
            new ChromePdfRenderOptions()
            {
                PaperSize = PdfPaperSize.A4,
                MarginTop = 20,
                MarginBottom = 20,
                CssMediaType = PdfCssMediaType.Print,
                EnableJavaScript = true,
                CreatePdfFormsFromHtml = true,
                FitToPaper = true
            });
    }
}
$vbLabelText   $csharpLabel

如需更好地控制渲染過程:

// In Global.asax.cs or Startup.cs
public static void ConfigureAspxToPdf()
{
    // Set global defaults for all ASPX to PDF conversions
    AspxToPdf.GlobalSettings.PaperSize = PdfPaperSize.A4;
    AspxToPdf.GlobalSettings.PrintHtmlBackgrounds = true;
    AspxToPdf.GlobalSettings.EnableJavaScript = true;
    AspxToPdf.GlobalSettings.CssMediaType = PdfCssMediaType.Screen;

    // Custom headers and footers
    AspxToPdf.GlobalSettings.HtmlHeader = new HtmlHeaderFooter()
    {
        HtmlFragment = "<div style='text-align: center; font-size: 12px;'>{page} of {total-pages}</div>",
        Height = 25
    };
}
// In Global.asax.cs or Startup.cs
public static void ConfigureAspxToPdf()
{
    // Set global defaults for all ASPX to PDF conversions
    AspxToPdf.GlobalSettings.PaperSize = PdfPaperSize.A4;
    AspxToPdf.GlobalSettings.PrintHtmlBackgrounds = true;
    AspxToPdf.GlobalSettings.EnableJavaScript = true;
    AspxToPdf.GlobalSettings.CssMediaType = PdfCssMediaType.Screen;

    // Custom headers and footers
    AspxToPdf.GlobalSettings.HtmlHeader = new HtmlHeaderFooter()
    {
        HtmlFragment = "<div style='text-align: center; font-size: 12px;'>{page} of {total-pages}</div>",
        Height = 25
    };
}
$vbLabelText   $csharpLabel

IronPDF的ASPX轉PDF功能保存:

  • ViewState和表單值
  • Session狀態數據
  • CSS樣式和佈局
  • JavaScript渲染內容
  • 主頁面佈局

PDFTron的ASPX替代方案

PDFTron不直接支持ASPX,需要間接的方法:

// Capture ASPX output as HTML, then convert
public void ConvertAspxWithPdfTron()
{
    // Render ASPX to string first
    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);

    // Render the page to HTML
    this.RenderControl(hw);
    string htmlContent = sw.ToString();

    // Then use PDFTron's HTML2PDF
    PDFNet.Initialize("your-license-key");

    using (PDFDoc doc = new PDFDoc())
    {
        HTML2PDF converter = new HTML2PDF();
        converter.InsertFromHtmlString(htmlContent);
        converter.Convert(doc);

        // Send to browser
        byte[] pdfBytes = doc.Save(SDFDoc.SaveOptions.e_linearized);
        Response.ContentType = "application/pdf";
        Response.BinaryWrite(pdfBytes);
        Response.End();
    }
}
// Capture ASPX output as HTML, then convert
public void ConvertAspxWithPdfTron()
{
    // Render ASPX to string first
    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);

    // Render the page to HTML
    this.RenderControl(hw);
    string htmlContent = sw.ToString();

    // Then use PDFTron's HTML2PDF
    PDFNet.Initialize("your-license-key");

    using (PDFDoc doc = new PDFDoc())
    {
        HTML2PDF converter = new HTML2PDF();
        converter.InsertFromHtmlString(htmlContent);
        converter.Convert(doc);

        // Send to browser
        byte[] pdfBytes = doc.Save(SDFDoc.SaveOptions.e_linearized);
        Response.ContentType = "application/pdf";
        Response.BinaryWrite(pdfBytes);
        Response.End();
    }
}
$vbLabelText   $csharpLabel

如何將圖像轉換為PDF?

圖像轉PDF對於文件歸檔和作品集創建至關重要。 兩個程式庫都提供這個功能,但方法不同。

IronPDF的圖像轉PDF

IronPDF提供專用的ImageToPdfConverter類用於高效批量處理:

using IronPdf;
using System.IO;
using System.Linq;

public class ImagePdfGenerator
{
    public static void CreatePhotoAlbum(string imageFolder, string outputPath)
    {
        // Get all supported image files
        var supportedExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tiff", ".svg" };
        var imageFiles = Directory.GetFiles(imageFolder)
            .Where(f => supportedExtensions.Contains(Path.GetExtension(f).ToLower()))
            .OrderBy(f => f);

        // Convert images to PDF with options
        var pdf = ImageToPdfConverter.ImageToPdf(imageFiles, ImageBehavior.FitToPage);

        // Add metadata
        pdf.MetaData.Title = "Photo Album";
        pdf.MetaData.Author = "Photography Department";
        pdf.MetaData.CreationDate = DateTime.Now;

        // Apply compression for smaller file size
        pdf.CompressImages(80); // 80% quality

        // Save the PDF
        pdf.SaveAs(outputPath);
    }

    public static void CreateThumbnailCatalog(List<ProductImage> images)
    {
        var renderer = new ChromePdfRenderer();

        // Build HTML with image grid
        var html = @"
        <html>
        <head>
            <style>
                .image-grid {
                    display: grid;
                    grid-template-columns: repeat(3, 1fr);
                    gap: 20px;
                    padding: 20px;
                }
                .image-item {
                    text-align: center;
                }
                .image-item img {
                    max-width: 100%;
                    height: 200px;
                    object-fit: cover;
                    border: 1px solid #ddd;
                }
                .image-caption {
                    margin-top: 10px;
                    font-size: 12px;
                }
            </style>
        </head>
        <body>
            <h1>Product Catalog</h1>
            <div class='image-grid'>";

        foreach (var image in images)
        {
            html += $@"
                <div class='image-item'>
                    <img src='data:image/jpeg;base64,{image.Base64Data}' />
                    <div class='image-caption'>{image.ProductName}</div>
                </div>";
        }

        html += "</div></body></html>";

        // Render with optimal settings for images
        renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("product-catalog.pdf");
    }
}
using IronPdf;
using System.IO;
using System.Linq;

public class ImagePdfGenerator
{
    public static void CreatePhotoAlbum(string imageFolder, string outputPath)
    {
        // Get all supported image files
        var supportedExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tiff", ".svg" };
        var imageFiles = Directory.GetFiles(imageFolder)
            .Where(f => supportedExtensions.Contains(Path.GetExtension(f).ToLower()))
            .OrderBy(f => f);

        // Convert images to PDF with options
        var pdf = ImageToPdfConverter.ImageToPdf(imageFiles, ImageBehavior.FitToPage);

        // Add metadata
        pdf.MetaData.Title = "Photo Album";
        pdf.MetaData.Author = "Photography Department";
        pdf.MetaData.CreationDate = DateTime.Now;

        // Apply compression for smaller file size
        pdf.CompressImages(80); // 80% quality

        // Save the PDF
        pdf.SaveAs(outputPath);
    }

    public static void CreateThumbnailCatalog(List<ProductImage> images)
    {
        var renderer = new ChromePdfRenderer();

        // Build HTML with image grid
        var html = @"
        <html>
        <head>
            <style>
                .image-grid {
                    display: grid;
                    grid-template-columns: repeat(3, 1fr);
                    gap: 20px;
                    padding: 20px;
                }
                .image-item {
                    text-align: center;
                }
                .image-item img {
                    max-width: 100%;
                    height: 200px;
                    object-fit: cover;
                    border: 1px solid #ddd;
                }
                .image-caption {
                    margin-top: 10px;
                    font-size: 12px;
                }
            </style>
        </head>
        <body>
            <h1>Product Catalog</h1>
            <div class='image-grid'>";

        foreach (var image in images)
        {
            html += $@"
                <div class='image-item'>
                    <img src='data:image/jpeg;base64,{image.Base64Data}' />
                    <div class='image-caption'>{image.ProductName}</div>
                </div>";
        }

        html += "</div></body></html>";

        // Render with optimal settings for images
        renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("product-catalog.pdf");
    }
}
$vbLabelText   $csharpLabel

先進的圖像處理功能:

  • SVG轉PDF轉換保留矢量質量
  • 記憶體最佳化的批量處理
  • 自訂大小和定位選項
  • 保留EXIF數據

PDFTron(Apryse)的圖像轉PDF

PDFTron使用其轉換API進行圖像處理:

using pdftron;
using pdftron.PDF;
using pdftron.SDF;

public class PdfTronImageConverter
{
    public static void ConvertImageToPdf(string imagePath, string outputPath)
    {
        PDFNet.Initialize("your-license-key");

        using (PDFDoc doc = new PDFDoc())
        {
            // Use Convert API for image to PDF
            pdftron.PDF.Convert.ToPdf(doc, imagePath);

            // Additional image processing
            PageIterator itr = doc.GetPageIterator();
            while (itr.HasNext())
            {
                Page page = itr.Current();

                // Adjust page size to image
                Rect crop_box = page.GetCropBox();
                page.SetMediaBox(crop_box);

                itr.Next();
            }

            // Save optimized PDF
            doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
        }
    }

    public static void CreateMultiPageImagePdf(string[] imagePaths, string outputPath)
    {
        PDFNet.Initialize("your-license-key");

        using (PDFDoc doc = new PDFDoc())
        {
            ElementBuilder builder = new ElementBuilder();
            ElementWriter writer = new ElementWriter();

            foreach (string imagePath in imagePaths)
            {
                // Create a new page for each image
                Page page = doc.PageCreate();
                writer.Begin(page);

                // Add image to page
                Image img = Image.Create(doc, imagePath);
                Element element = builder.CreateImage(img, 0, 0, 612, 792);
                writer.WritePlacedElement(element);

                writer.End();
                doc.PagePushBack(page);
            }

            doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
        }
    }
}
using pdftron;
using pdftron.PDF;
using pdftron.SDF;

public class PdfTronImageConverter
{
    public static void ConvertImageToPdf(string imagePath, string outputPath)
    {
        PDFNet.Initialize("your-license-key");

        using (PDFDoc doc = new PDFDoc())
        {
            // Use Convert API for image to PDF
            pdftron.PDF.Convert.ToPdf(doc, imagePath);

            // Additional image processing
            PageIterator itr = doc.GetPageIterator();
            while (itr.HasNext())
            {
                Page page = itr.Current();

                // Adjust page size to image
                Rect crop_box = page.GetCropBox();
                page.SetMediaBox(crop_box);

                itr.Next();
            }

            // Save optimized PDF
            doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
        }
    }

    public static void CreateMultiPageImagePdf(string[] imagePaths, string outputPath)
    {
        PDFNet.Initialize("your-license-key");

        using (PDFDoc doc = new PDFDoc())
        {
            ElementBuilder builder = new ElementBuilder();
            ElementWriter writer = new ElementWriter();

            foreach (string imagePath in imagePaths)
            {
                // Create a new page for each image
                Page page = doc.PageCreate();
                writer.Begin(page);

                // Add image to page
                Image img = Image.Create(doc, imagePath);
                Element element = builder.CreateImage(img, 0, 0, 612, 792);
                writer.WritePlacedElement(element);

                writer.End();
                doc.PagePushBack(page);
            }

            doc.Save(outputPath, SDFDoc.SaveOptions.e_linearized);
        }
    }
}
$vbLabelText   $csharpLabel

有哪些授權選項和成本?

了解授權是制定預算和合規的關鍵。 這兩個程式庫的定價模式截然不同。

IronPDF授權

IronPDF有3種定價版本,從$2,399。 IronPDF也提供免費試用。 IronPDF提供透明的、已公佈的定價(截至2025年):

授權級別:

  • Lite License:$799
  • 1名開發者
  • 1個位置
  • 1個專案
  • 適合個人開發者或小專案

  • Plus License:$1,199
  • 3名開發者
  • 3個位置
  • 3個專案
  • 完美適用於小型團隊

  • Professional License:$2,399
  • 10名開發者
  • 10個位置
  • 10個專案
  • 最適合發展中的團隊

  • Unlimited License:自訂定價
  • 不限開發者
  • 不限位置
  • 不限專案

額外選項:

  • 免版稅再分發:+$2,399(一次性)
  • 提供SaaS/OEM授權
  • Iron Suite捆綁包:花2種產品的價格購買10種產品

所有Team License均不可轉讓,並禁止在組織或代理/客戶關係之外分配授權。

PDFTron(Apryse)授權

PDFTron的授權是基於報價的,沒有公佈的定價。 根據用戶反饋和行業報告:

預估定價範圍:

  • 小型企業:每年$5,000 - $15,000
  • 企業級:每年$30,000 - $100,000+
  • 額外的模組需要單獨購買授權

定價透明度是PDFTron的一大缺點。 所有功能都是附加的,需要具體的授權條款和合同。 用戶報告:

  • 投資了6,500美元在PDFTron,但他們的產品並未按廣告所說運行,結果我們空手而歸,產品中出現了一大堆需要清理的問題。
  • 需要複雜的授權談判
  • 每個模組的定價增加了總成本
  • 限制的退款政策

主要差異:

  • IronPDF:永久授權,一次性付款
  • PDFTron:通常基於訂閱或年度費用
  • IronPDF:基本授權中包含所有功能
  • PDFTron:核心功能加收費附加功能

支援選項如何比較?

開發者支援可能左右專案的時間表。 以下是每個供應商如何處理客戶協助。

IronPDF支援

IronPDF在所有授權中都包含專業支援:

IronPDF程式庫適用於Azure WebApps、Functions和WebJobs。 它適用於Linux和Windows變體,雖然我會建議Windows變體Functions和WebApps進行顯著更好的測試並更容易安裝。

PDFTron(Apryse)支援

PDFTron的支援根據授權級別而有所不同:

  • PDFTron的成本很高。 對我們的業務的重要性證明了成本的合理性,但當我們將此產品與其他PDF網頁解決方案進行比較時,這確實是一個障礙。
  • 用於基本授權的論壇支援
  • 提供付費支援計劃
  • 偶爾支援可能會較為欠缺,開發者不得不自己艱難應對。
  • 回應時間隨支援級別而異

性能特徵是什麼?

性能影響用戶體驗和伺服器成本。 讓我們來看看真實世界的性能數據。

IronPDF性能

最近的改進顯著提升了IronPDF的性能:

// Optimized batch processing example
public async Task BatchConvertWithPerformanceMonitoring()
{
    var renderer = new ChromePdfRenderer();

    // Configure for performance
    renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;
    renderer.RenderingOptions.RenderDelay = 0; // No delay for static content
    renderer.RenderingOptions.Timeout = 30; // 30 second timeout

    // Enable parallel processing
    var tasks = new List<Task<PdfDocument>>();
    var urls = GetUrlsToConvert();

    // Process in parallel with throttling
    using (var semaphore = new SemaphoreSlim(4)) // Max 4 concurrent
    {
        foreach (var url in urls)
        {
            await semaphore.WaitAsync();

            tasks.Add(Task.Run(async () =>
            {
                try
                {
                    return await renderer.RenderUrlAsPdfAsync(url);
                }
                finally
                {
                    semaphore.Release();
                }
            }));
        }

        var results = await Task.WhenAll(tasks);

        // Merge results if needed
        var merged = PdfDocument.Merge(results);
        merged.SaveAs("batch-output.pdf");
    }
}
// Optimized batch processing example
public async Task BatchConvertWithPerformanceMonitoring()
{
    var renderer = new ChromePdfRenderer();

    // Configure for performance
    renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;
    renderer.RenderingOptions.RenderDelay = 0; // No delay for static content
    renderer.RenderingOptions.Timeout = 30; // 30 second timeout

    // Enable parallel processing
    var tasks = new List<Task<PdfDocument>>();
    var urls = GetUrlsToConvert();

    // Process in parallel with throttling
    using (var semaphore = new SemaphoreSlim(4)) // Max 4 concurrent
    {
        foreach (var url in urls)
        {
            await semaphore.WaitAsync();

            tasks.Add(Task.Run(async () =>
            {
                try
                {
                    return await renderer.RenderUrlAsPdfAsync(url);
                }
                finally
                {
                    semaphore.Release();
                }
            }));
        }

        var results = await Task.WhenAll(tasks);

        // Merge results if needed
        var merged = PdfDocument.Merge(results);
        merged.SaveAs("batch-output.pdf");
    }
}
$vbLabelText   $csharpLabel

生產環境中的性能指標:

  • 簡單的HTML:200-400毫秒
  • 帶有CSS/JS的複雜HTML:800-1200毫秒 IronPDF確實擁有文檔中所述的渲染方法的異步變體,例如ironpdf.com/examples/async。 使用Parallel.ForEach是批量渲染Html To PDF的最高效策略,適合我的使用例子

PDFTron(Apryse)性能

PDFTron通常為簡單的轉換提供更快的原始性能:

  • 基本HTML:100-300毫秒
  • Office文件:500-1000毫秒
  • 更低的記憶體佔用
  • 更適合高容量的簡單文件

然而,用戶報告了複雜情況的問題:

  • 有時會出現漏洞。有時是相當嚴重的漏洞,理應在QA測試中被發現。 解決它們可能需要一段時間。

現代CSS框架和Bootstrap支援

隨著企業應用越來越多的採用像Bootstrap、Tailwind和Foundation這樣的現代CSS框架,能夠準確轉換這些框架到PDF變得成為選擇PDF程式庫的關鍵標準。

IronPDF:全面支援基於Chromium的框架

IronPDF的Chrome V8渲染引擎為所有現代CSS框架和網頁標準提供全面的支援:

  • Bootstrap 5:完整的flexbox和CSS Grid支援,以及所有響應式工具
  • Bootstrap 4:與卡片組件、導航系統和表單佈局的完全相容
  • Tailwind CSS:所有實用程序類別、響應式修飾符和JIT編譯模式
  • Foundation:完整的網格系統和組件庫支援
  • 現代CSS3:Flexbox、CSS Grid、CSS變數、動畫、變形和過渡
  • JavaScript框架:React、Vue、Angular組件渲染,具備完整的互動性支持

生產驗證:Bootstrap首頁官方範本以98%+的瀏覽器保真度轉換。

代碼範例:企業儀表板和數據表

using IronPdf;

var renderer = new ChromePdfRenderer();

string bootstrapDashboard = @"
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
    <div class='container-fluid py-4'>
        <div class='d-flex justify-content-between align-items-center mb-4'>
            <h1>Sales Dashboard - Q1 2025</h1>
            <span class='badge bg-success fs-5'>+15.3% YoY</span>
        </div>

        <div class='row g-4 mb-4'>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>Total Revenue</h6>
                        <h2 class='text-primary'>$1.2M</h2>
                        <small class='text-success'>↑ 12%</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>New Customers</h6>
                        <h2 class='text-info'>1,847</h2>
                        <small class='text-success'>↑ 8%</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>Avg Order Value</h6>
                        <h2 class='text-warning'>$649</h2>
                        <small class='text-danger'>↓ 3%</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>Conversion Rate</h6>
                        <h2 class='text-success'>3.2%</h2>
                        <small class='text-success'>↑ 0.4%</small>
                    </div>
                </div>
            </div>
        </div>

        <div class='card'>
            <div class='card-header bg-primary text-white'>
                <h5 class='mb-0'>Top Products by Revenue</h5>
            </div>
            <div class='card-body p-0'>
                <table class='table table-striped table-hover mb-0'>
                    <thead class='table-light'>
                        <tr>
                            <th>Product</th>
                            <th>Category</th>
                            <th>Units Sold</th>
                            <th class='text-end'>Revenue</th>
                            <th class='text-end'>Growth</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td><strong>Professional License</strong></td>
                            <td><span class='badge bg-primary'>Software</span></td>
                            <td>1,234</td>
                            <td class='text-end'>$369,000</td>
                            <td class='text-end'><span class='badge bg-success'>+18%</span></td>
                        </tr>
                        <tr>
                            <td><strong>Plus License</strong></td>
                            <td><span class='badge bg-primary'>Software</span></td>
                            <td>2,891</td>
                            <td class='text-end'>$289,000</td>
                            <td class='text-end'><span class='badge bg-success'>+15%</span></td>
                        </tr>
                        <tr>
                            <td><strong>Support Package</strong></td>
                            <td><span class='badge bg-info'>Services</span></td>
                            <td>892</td>
                            <td class='text-end'>$178,000</td>
                            <td class='text-end'><span class='badge bg-success'>+22%</span></td>
                        </tr>
                        <tr>
                            <td><strong>Training Program</strong></td>
                            <td><span class='badge bg-info'>Services</span></td>
                            <td>456</td>
                            <td class='text-end'>$91,000</td>
                            <td class='text-end'><span class='badge bg-warning'>+5%</span></td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(bootstrapDashboard);
pdf.SaveAs("sales-dashboard.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

string bootstrapDashboard = @"
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
    <div class='container-fluid py-4'>
        <div class='d-flex justify-content-between align-items-center mb-4'>
            <h1>Sales Dashboard - Q1 2025</h1>
            <span class='badge bg-success fs-5'>+15.3% YoY</span>
        </div>

        <div class='row g-4 mb-4'>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>Total Revenue</h6>
                        <h2 class='text-primary'>$1.2M</h2>
                        <small class='text-success'>↑ 12%</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>New Customers</h6>
                        <h2 class='text-info'>1,847</h2>
                        <small class='text-success'>↑ 8%</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>Avg Order Value</h6>
                        <h2 class='text-warning'>$649</h2>
                        <small class='text-danger'>↓ 3%</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h6 class='text-muted'>Conversion Rate</h6>
                        <h2 class='text-success'>3.2%</h2>
                        <small class='text-success'>↑ 0.4%</small>
                    </div>
                </div>
            </div>
        </div>

        <div class='card'>
            <div class='card-header bg-primary text-white'>
                <h5 class='mb-0'>Top Products by Revenue</h5>
            </div>
            <div class='card-body p-0'>
                <table class='table table-striped table-hover mb-0'>
                    <thead class='table-light'>
                        <tr>
                            <th>Product</th>
                            <th>Category</th>
                            <th>Units Sold</th>
                            <th class='text-end'>Revenue</th>
                            <th class='text-end'>Growth</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td><strong>Professional License</strong></td>
                            <td><span class='badge bg-primary'>Software</span></td>
                            <td>1,234</td>
                            <td class='text-end'>$369,000</td>
                            <td class='text-end'><span class='badge bg-success'>+18%</span></td>
                        </tr>
                        <tr>
                            <td><strong>Plus License</strong></td>
                            <td><span class='badge bg-primary'>Software</span></td>
                            <td>2,891</td>
                            <td class='text-end'>$289,000</td>
                            <td class='text-end'><span class='badge bg-success'>+15%</span></td>
                        </tr>
                        <tr>
                            <td><strong>Support Package</strong></td>
                            <td><span class='badge bg-info'>Services</span></td>
                            <td>892</td>
                            <td class='text-end'>$178,000</td>
                            <td class='text-end'><span class='badge bg-success'>+22%</span></td>
                        </tr>
                        <tr>
                            <td><strong>Training Program</strong></td>
                            <td><span class='badge bg-info'>Services</span></td>
                            <td>456</td>
                            <td class='text-end'>$91,000</td>
                            <td class='text-end'><span class='badge bg-warning'>+5%</span></td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(bootstrapDashboard);
pdf.SaveAs("sales-dashboard.pdf");
$vbLabelText   $csharpLabel

輸出:一個專業的企業儀表板,具有Bootstrap的flexbox度量卡片、響應式網格佈局以及風格化的數據表——所有這些都以完美的保真度呈現在PDF中。

PDFTron(Apryse):具有框架限制的HTML2PDF模組

PDFTron的HTML-to-PDF轉換通過HTML2PDF模組提供,該模組使用自訂渲染引擎,對於現代CSS框架具有特定限制:

  • 自訂引擎:非基於Chromium,這意味著CSS3支援是選擇性的,而不是全面的
  • Flexbox支援:部分實施,Bootstrap 4/5 Flexbox佈局可能無法正確渲染
  • CSS Grid:對CSS Grid佈局規範的有限支援
  • JavaScript限制:有限的JavaScript執行相比完整的瀏覽器引擎
  • Bootstrap 3:用於表格佈局通常比Bootstrap 4/5更好
  • 需要框架測試:複雜的Bootstrap組件需要廣泛的測試和潛在的替代方案

根據開發者報告,使用Bootstrap的PDFTron用戶遇到了:

  • Flexbox為基礎的導航列渲染出現對齊問題
  • 卡片組和網格系統需進行CSS調整
  • PDF輸出中未能承認響應式工具
  • 需要簡化Bootstrap組件或使用備選CSS

企業考量:對於構建在現代Bootstrap版本(4+)上的應用程式,PDFTron可能需要顯著的額外開發努力來處理佈局轉換,這可能會抵消其其他性能優勢。 使用自訂引擎方法意味著您不會獲得與真正的瀏覽器相同的渲染保真度。

欲了解有關綜合的Bootstrap框架支援和測試指導,請參見Bootstrap & Flexbox CSS指南

什麼時候應該選擇每個程式庫?

正確的選擇取決於您的具體需求和限制。

選擇IronPDF當:

HTML/CSS保真度至關重要

  • 現代網頁應用程式包含復雜佈局
  • 重JavaScript內容
  • 需要保存的響應式設計

快速開發是首要任務

預算透明度重要

  • 公佈的價格允許準確預算
  • 沒有驚訝的成本或隱藏費用
  • 基本授權中包含所有功能

您需要特定的功能

選擇PDFTron(Apryse)當:

企業文檔工作流

  • 複雜的表單處理,具有XFA支援
  • CAD文件轉換(DWG、DXF)
  • 高級的Office文檔處理

性能重於功能

  • 高容量的簡單文檔處理
  • 更低的記憶體需求
  • 基本HTML轉換需求

專業要求

  • 內建的文檔查看組件
  • 廣泛的批註類型(30+)
  • 與舊系統集成

大型企業環境

  • 專用支援合同
  • 自訂功能開發
  • 合規證書

總結和結論

IronPDF和PDFTron(Apryse)都是強大的PDF程式庫,但它們服務於不同的市場細分和使用場景。

IronPDF在下列方面表現出色:

  • 現代網頁技術支援(HTML5、CSS3、JavaScript)
  • 開發者友好的API設計
  • 透明且可負擔的定價
  • 快速應用程序開發
  • 雲端和容器化部署

PDFTron(Apryse)的優勢包括:

  • 企業文檔工作流
  • CAD和專門格式支援
  • 更低的資源消耗
  • 擴展的批註能力
  • 與舊系統的兼容性

對於大多數構建現代應用的.NET開發者來說,IronPDF提供了最佳的功能組合、易用性和價值。 其基於Chrome的渲染引擎確保了像素完美的HTML到PDF轉換,而簡單的API加快了開發速度。

對於對CAD轉換、複雜表單處理或使用舊文檔格式有特定需求的企業來說,PDFTron仍然是可行的選擇。 然而,不透明的定價方式和模組化的許可結構可能顯著增加總成本。

開始入門

嘗試IronPDF:

探索PDFTron:

請記得在做決定前仔細評估您的具體使用案例中這兩個選項。 將長期成本、支援質量和功能路線圖與技術能力一起考慮。

現在開始使用 IronPDF。
green arrow pointer

請注意PDFTron是其相應所有者的註冊商標。 本網站與PDFTron沒有關聯、認可或贊助關係。 所有產品名稱、標誌和品牌均屬於其相應所有者的財產。 比較僅供信息之用,並基於撰寫時的公開信息。)}]

常見問題解答

怎樣在 C# 中將 HTML 轉換為 PDF?

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

IronPDF 和 PDFTron 在 HTML 轉換為 PDF 的效能差異是什麼?

IronPDF 提供優越的 Chrome 引擎渲染,對複雜網頁內容提供更好的 JavaScript 和 CSS3 支援。PDFTron 對簡單 HTML 的轉換較快,但可能無法有效處理複雜內容。

IronPDF 和 PDFTron 的授權選項有哪些?

IronPDF 提供包括所有功能的透明且永久的授權,起價 $749。PDFTron 則需要定制報價,費用可從每年 $5,000 到 $100,000+ 不等。

這些庫是否可以將 ASPX 頁面轉換為 PDF?

可以,IronPDF 可以透過 AspxToPdf.RenderThisPageAsPdf 方法在單列程式碼內轉換 ASPX 頁面為 PDF。PDFTron 不直接支持 ASPX 頁面轉換。

哪個庫更適合像 Azure 這樣的雲端環境?

IronPDF 專為雲端環境(包括 Azure 和 AWS)優化,並與 Functions 和 WebApps 無縫運作。PDFTron 可能需要額外配置以達到最佳雲端部署效果。

IronPDF 或 PDFTron 能夠創建可填寫的 PDF 表單嗎?

可以,這兩個庫都支持創建可填寫的 PDF 表單。IronPDF 使用 CreatePdfFormsFromHtml 自動將 HTML 表單轉換。PDFTron 提供多種表單欄位類型,但需要更複雜的整合。

IronPDF 和 PDFTron 使用者可獲得哪些支援選項?

IronPDF 提供 24/5 工程支援,直接連接開發者,通常 24-48 小時內回覆。PDFTron 的支援選項則取決於授權層級,提供基本的論壇支援和付費的直接協助。

IronPDF 和 PDFTron 在處理具密碼保護的網站時如何比較?

IronPDF 支持透過 ChromeHttpLoginCredentials 做身份驗證以處理登錄表單和 HTTP 驗證,而 PDFTron 對此功能的支持有限。

Jacob Mellor, Team Iron 首席技術官
首席技術官

Jacob Mellor是Iron Software的首席技術官,也是開創C# PDF技術的前瞻性工程師。作為Iron Software核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。

Jacob擁有曼徹斯特大學土木工程一級榮譽學士學位(1998年–2001年)。他於1999年在倫敦開立首家軟體公司,並於2005年建立了他的第一個.NET組件,專注於解決Microsoft生態系統中的複雜問題。

他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron Support Team

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