IRONSOFTWAREHOME
影片

如何在 C# 中使用 Java Script 將 HTML 轉換為 PDF

Curtis Chau
Curtis Chau
Updated: 2026年5月18日

為什麼從DynamicPDF遷移到IronPDF?

DynamicPDF的產品分裂是遷移的常見驅動因素。 了解授權模型有助於評估您當前實現的真實成本。

產品分裂問題

DynamicPDF (ceTe Software) 的PDF功能作為單獨授權包提供:

  1. DynamicPDF Core Suite (ceTe.DynamicPDF.CoreSuite.NET, v12.43.0):包含Generator、Merger和ReportWriter
  2. DynamicPDF HTML Converter (ceTe.DynamicPDF.HtmlConverter.NET, v3.3.0):HTML到PDF的獨立附加元件
  3. DynamicPDF Converter (ceTe.DynamicPDF.Converter.NET, v3.32.0):Office和50多種文件格式轉換
  4. DynamicPDF PrintManager (ceTe.DynamicPDF.Printing.NET):程式化列印
  5. DynamicPDF Rasterizer (ceTe.DynamicPDF.Rasterizer.NET):PDF轉影像
  6. DynamicPDF Viewer (ceTe.DynamicPDF.Viewer.NET):WinForms/WPF視圖控制

Generator、Merger和ReportWriter被合併到核心套件中,但HTML渲染、光柵化、列印和查看仍需單獨購買。 IronPDF將這些功能捆綁到一個單一的程式庫和授權中。

架構比較

方面DynamicPDFIronPDF
產品模型分裂的(5個以上產品)一體化程式庫
授權需要多個授權單一授權
HTML 到 PDF單獨的附加元件購買內建的,以Chromium為基礎
CSS 支援有限(需要附加元件)全部 CSS3 支援,含 Flexbox/Grid
API風格基於坐標的定位HTML/CSS + 操作API
學習曲線陡峭(多種API)溫和(web技術)
現代 .NET.NET Standard 2.0 / .NET 6 / .NET 8 / .NET Framework 4.6.2.NET 6/7/8/9+ 原生

主要遷移利益

  1. **單一包件:**一個NuGet包取代3-5個DynamicPDF包
  2. **現代渲染:**Chromium引擎對比傳統渲染
  3. **Web技術:**使用HTML/CSS取代基於坐標的定位
  4. **簡化API:**程式碼更少,更易讀,更易於維護
  5. **無需附加元件購買:**HTML、合併、安全性均已包含

遷移前準備

前提條件

確保您的環境符合以下要求:

  • .NET Framework 4.6.2+ or .NET 6/7/8/9+
  • Visual Studio 2019+或VS Code與C#擴展
  • NuGet包管理器存取 -IronPDF許可證金鑰(免費試用可在 ironpdf.com 獲得)

審核DynamicPDF使用情況

在您的解決方案目錄中運行這些命令,以識別所有DynamicPDF引用:

# Find allDynamicPDFreferences
grep -r "ceTe.DynamicPDF\|DynamicPDF" --include="*.cs" --include="*.csproj" .

# Check NuGet packages
dotnet list package | grep -i dynamic
SHELL

常見的包需要檢查:

  • ceTe.DynamicPDF.CoreSuite.NET (Generator + Merger + ReportWriter)
  • ceTe.DynamicPDF.HtmlConverter.NET (HTML到PDF附加元件)
  • ceTe.DynamicPDF.Converter.NET (Office / 多格式到PDF)
  • ceTe.DynamicPDF.Rasterizer.NET, ceTe.DynamicPDF.Printing.NET, ceTe.DynamicPDF.Viewer.NET

了解範式轉變

從DynamicPDF遷移到IronPDF時,最顯著的變化是文件建立的基本方法。 DynamicPDF使用基於坐標的定位,您可以在頁面上放置元素的特定X,Y坐標。 IronPDF使用HTML/CSS渲染,您可以使用web技術進行設計。

這一範式轉變意味著將Table2元素轉換為其HTML等價物——這一變更通常導致程式碼更易讀和更易於維護。

逐步遷移過程

步驟1:更新NuGet包

刪除實際安裝的DynamicPDF包,並新增IronPDF:

# RemoveDynamicPDFpackages (only those you actually have)
dotnet remove package ceTe.DynamicPDF.CoreSuite.NET
dotnet remove package ceTe.DynamicPDF.HtmlConverter.NET
dotnet remove package ceTe.DynamicPDF.Converter.NET
dotnet remove package ceTe.DynamicPDF.Rasterizer.NET
dotnet remove package ceTe.DynamicPDF.Printing.NET

# Install IronPDF
dotnet add package IronPdf
SHELL

步驟 2:更新命名空間引用

用IronPDF替換DynamicPDF命名空間:

// Remove these
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;
using ceTe.DynamicPDF.Merger;
using ceTe.DynamicPDF.Conversion;

// Add this
using IronPdf;

步驟3:配置授權

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

完整 API 遷移參考

核心類映射

DynamicPDF類別IronPDF等價
DocumentChromePdfRenderer
DocumentPdfDocument
Page帶有分頁符的HTML <div>
MergeDocumentPdfDocument.Merge()
HtmlConverterChromePdfRenderer

頁面元素到HTML對應

DynamicPDF頁面元素IronPDF/HTML等價
Label<p>, <span>, <div>
TextArea<p>
Image<img>標籤
Table2HTML <table>
PageNumberingLabel{page} / {total-pages}佔位符

關鍵API對應

DynamicPDFIronPDF
Document + PageChromePdfRenderer
Label, TextAreaHTML <p>, <div>
Table2HTML <table>
MergeDocumentPdfDocument.Merge()
HtmlConverterChromePdfRenderer
document.Draw()pdf.SaveAs() / pdf.BinaryData
PageNumberingLabel %%CP%%{page}佔位符

程式碼遷移範例

HTML到PDF轉換

HTML到PDF轉換顯示了DynamicPDF對單獨HtmlConverter附加元件的需求,而IronPDF的內建Chromium渲染則無此需求。

DynamicPDF實現:

// NuGet: Install-Package ceTe.DynamicPDF.Converter.NET
// HTML-to-PDF is a separate add-on; CoreSuite alone does not include it.
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Conversion;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1></body></html>";
        HtmlConverter converter = new HtmlConverter(html);
        converter.Convert("output.pdf");
    }
}

IronPDF實現:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1></body></html>";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}

IronPDF的ChromePdfRenderer提供以Chromium為基礎的渲染,具有完整的CSS3支持,無需單獨購買附加元件。 有關更多選項,請參閱HTML轉PDF文件

合併多個 PDF

PDF合併展示了DynamicPDF的Merge方法之間的差異。

DynamicPDF實現:

// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Merger;

class Program
{
    static void Main()
    {
        MergeDocument document = new MergeDocument("document1.pdf");
        document.Append("document2.pdf");
        document.Draw("merged.pdf");
    }
}

IronPDF實現:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}

IronPDF的靜態PdfDocument物件。 欲了解更多選項,請參閱 PDF合併文件

將文字新增到PDF

文字放置展示了從DynamicPDF基於坐標的TextStamper的範式轉變。

DynamicPDF實現:

// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;

class Program
{
    static void Main()
    {
        Document document = new Document();
        Page page = new Page(PageSize.Letter);
        Label label = new Label("Hello from DynamicPDF!", 0, 0, 504, 100);
        page.Elements.Add(label);
        document.Pages.Add(page);
        document.Draw("output.pdf");
    }
}

IronPDF實現:

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");
        var textStamper = new TextStamper()
        {
            Text = "Hello from IronPDF!",
            FontSize = 20,
            VerticalAlignment = VerticalAlignment.Top
        };
        pdf.ApplyStamp(textStamper);
        pdf.SaveAs("output.pdf");
    }
}

IronPDF的TextStamper提供基於對齊的定位,而非基於坐標的放置,使佈局更適應不同的頁面大小。 更多選項,請參閱水印與蓋章文件

完整的文件生成範例

這個全面的範例展示了將包含多個元素的DynamicPDF文件轉換為IronPDF的HTML方式。

DynamicPDF實現:

using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;
using ceTe.DynamicPDF.Merger;

// Generation (requires Generator license)
Document document = new Document();
Page page = new Page(PageSize.A4);
Label title = new Label("Invoice Report", 0, 0, 595, 30, Font.HelveticaBold, 18);
title.Align = TextAlign.Center;
page.Elements.Add(title);

Table2 table = new Table2(40, 60, 515, 500);
// ... complex table setup with columns, rows, cells...
page.Elements.Add(table);
document.Pages.Add(page);
document.Draw("invoice.pdf");

// Merging (requires Merger license)
MergeDocument mergeDoc = new MergeDocument("cover.pdf");
mergeDoc.Append("invoice.pdf");
mergeDoc.Draw("final.pdf");

IronPDF實現:

using IronPdf;

var renderer = new ChromePdfRenderer();

// All features in one library
var html = @"
<html>
<head>
    <style>
        body { font-family: Helvetica, sans-serif; padding: 40px; }
        h1 { text-align: center; font-size: 18pt; }
        table { width: 100%; border-collapse: collapse; margin-top: 20px; }
        th, td { border: 1px solid #ccc; padding: 8px; }
    </style>
</head>
<body>
    <h1>Invoice Report</h1>
    <table>
        <tr><th>Product</th><th>Qty</th><th>Price</th></tr>
        <tr><td>Widget</td><td>10</td><td>$99.99</td></tr>
    </table>
</body>
</html>";

var invoice = renderer.RenderHtmlAsPdf(html);

// Merging included - no separate license
var cover = PdfDocument.FromFile("cover.pdf");
var final = PdfDocument.Merge(cover, invoice);
final.SaveAs("final.pdf");

關鍵遷移注意事項

基於坐標的到HTML/CSS的定位

基本的範式轉變需要將X,Y坐標的定位轉換為基於CSS的佈局:

//DynamicPDF- coordinate-based
var label = new Label("Hello World", 100, 200, 300, 50);

//IronPDF- CSS positioning (if absolute positioning needed)
var html = "<div style='position:absolute; left:100px; top:200px; width:300px;'>Hello World</div>";

//IronPDF- preferred approach (flow-based)
var html = "<div style='margin-left:100px; margin-top:200px;'>Hello World</div>";

頁碼語法

DynamicPDF和IronPDF對頁碼使用不同的佔位語法:

//DynamicPDFplaceholders
"Page %%CP%% of %%TP%%"

//IronPDFplaceholders
"Page {page} of {total-pages}"

頭部和尾部

將DynamicPDF Template元素轉換為IronPDF HtmlHeaderFooter

//IronPDFheader/footer
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = "<div style='text-align:center;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};

更多頁眉/頁腳選項,請參閱頁眉和頁腳文件

安全設置

//IronPDFsecurity
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.UserPassword = "userPassword";

欲了解全面的安全選項,請參閱 加密文件

後遷移檢查清單

完成程式碼遷移後,請驗證以下內容:

  • 生成的PDF文件的視覺比較
  • 驗證文字定位和佈局
  • 測試表格渲染和溢出
  • 驗證所有頁面的頁眉/頁腳
  • 測試表單填寫功能
  • 驗證安全性/加密
  • 性能基準測試
  • 移除未使用的DynamicPDF授權文件
  • 更新文件

其他資源


從DynamicPDF遷移到IronPDF將多個產品授權合併到一個程式庫中,並以Chromium上的HTML/CSS渲染替代基於坐標的定位。 已經熟悉Web技術的團隊通常發現結果程式碼更易於維護。

請注意: DynamicPDF是其各自所有者的註冊商標。 此網站與ceTe Software不具有關聯、並未獲得認可或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供參考,反映撰寫時公開可用的資訊。
Curtis Chau
技術作家

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

...
閱讀更多

相關文章

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
預訂您的免費現場演示
Booking Badge

受到全球數百萬工程師的信任

Iron Software的客戶標誌
獲取您的無義務諮詢
填寫以下表格或電子郵件sales@ironsoftware.com
您的詳細資訊將始終保密
受到全球數百萬工程師的信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立