IRONSOFTWAREHOME
视频

如何在HTML中使用Java Script与PDF

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

为什么要从动态 PDF迁移到 IronPDF?

DynamicPDF 的产品碎片化是常见的迁移驱动力。 理解许可证模式有助于评估您当前实现的真实成本。

产品碎片化问题

DynamicPDF (ceTe Software) 将 PDF 功能作为单独许可的包进行提供:

  1. DynamicPDF Core Suite (ceTe.DynamicPDF.CoreSuite.NET, v12.43.0):包括生成器、合并器和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查看器控件

生成器、合并器和报告编写器被合并到 Core Suite,但 HTML 渲染、光栅化、打印和查看仍然需要单独购买。IronPDF将这些功能打包成一个单一库和许可证。

架构比较

方面动态 PDFIronPDF
产品模型零散(5 个以上产品)一体化库
许可需要多个许可证单一许可证
HTML 到 PDF单独购买附加组件基于 Chromium 的内置
CSS支持有限(需要附加功能)带有 Flexbox/Grid 的完整 CSS3
API 风格基于坐标的定位HTML/CSS + 操作 API
学习曲线Steep(多个应用程序接口)温和(网络技术)
现代.NET.NET Standard 2.0 / .NET 6 / .NET 8 / .NET Framework 4.6.2.NET 6/7/8/9+ 原生语言

主要迁移优势

1.**单个包:**一个 NuGet 包即可替代 3-5 个动态 PDF包 2.现代渲染: Chromium 引擎与传统渲染 3. **Web 技术:**使用 HTML/CSS 而非基于坐标的定位 4.**更简洁的 API:**代码更少,更易读,更易于维护 5.无需额外购买: HTML、合并、安全功能全部包含在内

迁移前准备

前提条件

确保您的环境符合这些要求:

  • .NET Framework 4.6.2+ or .NET 6/7/8/9+
  • Visual Studio 2019+ 或带有 C# 扩展的 VS Code
  • 访问 NuGet 包管理器 -IronPDF许可证密钥(可在ironpdf.com免费试用)

审计动态 PDF的使用情况

在解决方案目录中运行这些命令,以识别所有动态 PDF引用:

# Find all动态 PDFreferences
grep -r "ceTe.DynamicPDF\|DynamicPDF" --include="*.cs" --include="*.csproj" .

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

需要查找的常见软件包:

  • ceTe.DynamicPDF.CoreSuite.NET (生成器 + 合并器 + 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

理解范式转变

从动态 PDF迁移到IronPDF时,最重要的变化是文档创建的基本方法。动态 PDF使用基于坐标的定位,您可以将元素放置在页面上特定的 X、Y 坐标上。IronPDF使用 HTML/CSS 渲染,您可以使用网络技术进行设计。

这种范式转变意味着将Table2元素转换为其HTML等价物——这一改变通常会导致代码更具可读性和可维护性。

逐步迁移过程

步骤 1:更新 NuGet 软件包

删除您实际安装的动态 PDF包并添加 IronPDF:

# Remove动态 PDFpackages (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替换动态 PDF命名空间:

// 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
PageHTML <div> 带分页
MergeDocumentPdfDocument.Merge()
HtmlConverterChromePdfRenderer

页面元素到 HTML 的映射

DynamicPDF 页面元素IronPDF/HTML 同等版本
Label<p>, <span>, <div>
TextArea<div>, <p> 带CSS
Image<img> 标签
Table2HTML <table>
PageNumberingLabel{page} / {total-pages} 占位符

关键 API 映射

动态 PDFIronPDF
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提供了基于对齐的定位而非基于坐标的放置,使布局在不同页面大小上更加适应。 有关更多选项,请参阅水印和盖章文档

完整文档生成示例

本综合示例展示了将包含多个元素的动态 PDF文档转换为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 的布局:

//动态 PDF- 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对页码使用不同的占位符语法:

//动态 PDFplaceholders
"Page %%CP%% of %%TP%%"

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

页眉和页脚

将DynamicPDF的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文件的可视化比较
  • 检查文本位置和布局
  • 测试表格渲染和溢出
  • 检查所有页面的页眉/页脚
  • 测试表单填写功能
  • 验证安全性/加密
  • 性能基准测试
  • 删除未使用的动态 PDF许可证文件
  • 更新文档

其他资源


从动态 PDF迁移到IronPDF将多种产品许可证整合为一个库,并用 Chromium 上的 HTML/CSS 渲染取代了基于坐标的位置。 已经熟悉网页技术的团队通常发现生成的代码更容易维护。

请注意: DynamicPDF是其各自所有者注册的商标。 本网站与ceTe Software没有关联、认可或赞助关系。 所有产品名称、徽标和品牌均为各自所有者的财产。 比较仅供参考,反映撰写时公开可用的信息。
Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

...
阅读更多

相关文章

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 天试用密钥
无需信用卡或创建账户