MIGRATION GUIDES How to Migrate from DynamicPDF to IronPDF in C# Curtis Chau 發表日期:2026年1月11日 下載 IronPDF NuGet 下載 DLL 下載 Windows 安裝程式 開始免費試用 法學碩士副本 法學碩士副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 為什麼要從 動態PDF 遷移到 IronPDF? DynamicPDF 的產品碎片化是推動使用者遷移的主要因素。 了解許可模式對於評估目前實施方案的真實成本至關重要。 產品碎片化問題 DynamicPDF 以獨立產品銷售,並附有單獨的許可證: 1.動態 PDF 產生器:從零開始建立 PDF DynamicPDF Merger:合併、分割和處理現有 PDF 檔案(需另外購買) DynamicPDF核心套件:組合產生器和合併器 DynamicPDF ReportWriter:報表生成 DynamicPDF HTML Converter: HTML 轉 PDF 轉換(獨立外掛程式) DynamicPDF 列印管理器:以程式方式列印 PDF 一套完整的 PDF 解決方案需要 3-5 個 動態PDF 的獨立許可證。 IronPDF 將所有功能都包含在一個軟體包中。 架構比較 方面 動態PDF IronPDF 產品模型 分散的(5種以上產品) 一體化圖書館 授權 需要多個許可證 單許可證 HTML 轉 PDF 單獨購買附加元件 內建的、基於鉻的 CSS 支援 有限(需額外購買) 完全基於 CSS3 的 Flexbox/Grid 佈局 API 風格 基於座標的定位 HTML/CSS + 操作 API 學習曲線 陡峭(多個 API) 溫和(網路技術) 近代 .NET .NET Standard 2.0 .NET 6/7/8/9+ 原生 遷移的主要優勢 1.單包:一個 NuGet 套件即可取代 3-5 個 動態PDF 包 2.現代渲染: Chromium 引擎與傳統渲染 Web 技術:使用 HTML/CSS 而非基於座標的定位 4.更簡潔的 API:程式碼更少,更易讀,更容易維護 5.無需額外購買: HTML、合併、安全功能全部包含在內 遷移前準備 先決條件 請確保您的環境符合以下要求: .NET Framework 4.6.2+ 或 .NET Core 3.1 / .NET 5-9 Visual Studio 2019+ 或帶有 C# 擴充功能的 VS Code NuGet 套件管理器訪問 IronPDF 許可證金鑰(可在ironpdf.com提供免費試用) 審核 動態PDF 使用情況 在解決方案目錄中執行以下命令,以識別所有 動態PDF 引用: # Find all 動態PDF references grep -r "ceTe.DynamicPDF\|DynamicPDF" --include="*.cs" --include="*.csproj" . # Check NuGet packages dotnet list package | grep -i dynamic # Find all 動態PDF references grep -r "ceTe.DynamicPDF\|DynamicPDF" --include="*.cs" --include="*.csproj" . # Check NuGet packages dotnet list package | grep -i dynamic SHELL 常見的軟體包: ceTe.DynamicPDF.CoreSuite.NET ceTe.DynamicPDF.Generator.NET ceTe.DynamicPDF.Merger.NET ceTe.DynamicPDF.HtmlConverter.NET 理解範式轉移 從 動態PDF 遷移到 IronPDF 時,最顯著的變化是文件建立方式的根本改變。 動態PDF 使用基於座標的定位,將元素放置在頁面上的特定 X、Y 座標處。 IronPDF 使用 HTML/CSS 渲染,您可以使用 Web 技術進行設計。 這種範式轉移意味著將Label 、 TextArea和Table2元素轉換為它們的 HTML 等效元素——這種改變通常會產生更易讀、更易於維護的程式碼。 逐步遷移過程 步驟 1:更新 NuGet 套件 移除所有 動態PDF 軟體包,然後安裝 IronPDF: # Remove 動態PDF packages dotnet remove package ceTe.DynamicPDF.CoreSuite.NET dotnet remove package ceTe.DynamicPDF.Generator.NET dotnet remove package ceTe.DynamicPDF.Merger.NET dotnet remove package ceTe.DynamicPDF.HtmlConverter.NET # Install IronPDF dotnet add package IronPdf # Remove 動態PDF packages dotnet remove package ceTe.DynamicPDF.CoreSuite.NET dotnet remove package ceTe.DynamicPDF.Generator.NET dotnet remove package ceTe.DynamicPDF.Merger.NET dotnet remove package ceTe.DynamicPDF.HtmlConverter.NET # Install IronPDF dotnet add package IronPdf SHELL 步驟 2:更新命名空間引用 將 動態PDF 命名空間替換為 IronPDF: // Remove these using ceTe.DynamicPDF; using ceTe.DynamicPDF.PageElements; using ceTe.DynamicPDF.Merger; using ceTe.DynamicPDF.Conversion; // Add this using IronPdf; // Remove these using ceTe.DynamicPDF; using ceTe.DynamicPDF.PageElements; using ceTe.DynamicPDF.Merger; using ceTe.DynamicPDF.Conversion; // Add this using IronPdf; $vbLabelText $csharpLabel 步驟 3:設定許可證 // Add at application startup (Program.cs or Startup.cs) IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; // Add at application startup (Program.cs or Startup.cs) IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; $vbLabelText $csharpLabel 完整的 API 遷移參考 核心類別映射 動態PDF 類 IronPDF當量 筆記 Document ChromePdfRenderer 用於產生新的PDF文件 Document PdfDocument 用於修改現有PDF Page HTML<div>分頁符 或多次渲染。 MergeDocument PdfDocument.Merge() 靜態合併方法 HtmlConverter ChromePdfRenderer 內置,無需額外添加 頁面元素到 HTML 的映射 動態PDF 頁面元素 IronPDF/HTML 等效項 Label <p>,<span> ,<div> TextArea <div>,<p>使用 CSS Image <img>標籤 Table2 HTML<table> PageNumberingLabel {page} / {total-pages}佔位符 關鍵 API 映射 動態PDF IronPDF 筆記 Document + Page ChromePdfRenderer 基於 HTML 的生成 Label , TextArea HTML<p> ,<div> 使用 CSS 設定樣式 Table2 HTML<table> 完整的 CSS 樣式 MergeDocument PdfDocument.Merge() 靜態方法 HtmlConverter ChromePdfRenderer 內置,無需額外添加 document.Draw() pdf.SaveAs() / pdf.BinaryData PageNumberingLabel %%CP%% {page}佔位符 不同的語法 程式碼遷移範例 HTML 轉 PDF HTML 到 PDF 的轉換顯示 動態PDF 需要單獨的HtmlConverter插件,而 IronPDF 則內建了 Chromium 渲染功能。 DynamicPDF實作: // NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET 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"); } } // NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET 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"); } } $vbLabelText $csharpLabel 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"); } } // 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"); } } $vbLabelText $csharpLabel IronPDF 的ChromePdfRenderer提供基於 Chromium 的渲染功能,並完全支援 CSS3——無需單獨購買外掛程式。 更多選項,請參閱HTML 轉 PDF 文件。 合併多個PDF文件 PDF 合併示範了 動態PDF 的MergeDocument類別(需要 Merger 產品許可證)與 IronPDF 的內建靜態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"); } } // 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"); } } $vbLabelText $csharpLabel 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"); } } // 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"); } } $vbLabelText $csharpLabel IronPDF 的靜態Merge方法直接接受多個PdfDocument物件。 更多選項請參閱PDF 合併文件。 在PDF中加入文本 文字放置體現了從 動態PDF 基於座標的Label元素到 IronPDF 基於 HTML 的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"); } } // 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"); } } $vbLabelText $csharpLabel 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"); } } // 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"); } } $vbLabelText $csharpLabel 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"); 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"); $vbLabelText $csharpLabel 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"); 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"); $vbLabelText $csharpLabel 關鍵遷移說明 基於座標的 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>"; // 動態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>"; $vbLabelText $csharpLabel 頁碼文法 DynamicPDF 和 IronPDF 使用不同的佔位語法來表示頁碼: // 動態PDF placeholders "Page %%CP%% of %%TP%%" // IronPDF placeholders "Page {page} of {total-pages}" // 動態PDF placeholders "Page %%CP%% of %%TP%%" // IronPDF placeholders "Page {page} of {total-pages}" $vbLabelText $csharpLabel 頁首和頁尾 將 動態PDF Template元素轉換為 IronPDF HtmlHeaderFooter : // IronPDF header/footer renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center;'>Page {page} of {total-pages}</div>", MaxHeight = 25 }; // IronPDF header/footer renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center;'>Page {page} of {total-pages}</div>", MaxHeight = 25 }; $vbLabelText $csharpLabel 如需更多頁首/頁尾選項,請參閱頁首和頁尾文件。 安全設定 // IronPDF security pdf.SecuritySettings.OwnerPassword = "ownerPassword"; pdf.SecuritySettings.UserPassword = "userPassword"; // IronPDF security pdf.SecuritySettings.OwnerPassword = "ownerPassword"; pdf.SecuritySettings.UserPassword = "userPassword"; $vbLabelText $csharpLabel 有關全面的安全性選項,請參閱加密文件。 遷移後檢查清單 程式碼遷移完成後,請驗證以下內容: 產生PDF檔案的可視化比較 檢查文字位置和版面 測試表格渲染和溢出 檢查所有頁面的頁首/頁腳 測試表單填寫功能 驗證安全性/加密 性能基準測試 刪除未使用的 動態PDF 授權文件 更新文檔 讓您的 PDF 基礎架構面向未來 隨著 .NET 10 即將到來,C# 14 也引入了新的語言特性,選擇一個採用現代 .NET 模式的 PDF 函式庫可以確保長期的兼容性。 IronPDF 對 .NET 6/7/8/9+ 的原生支援為專案擴展到 2025 年和 2026 年提供了清晰的發展路徑,而無需管理多個產品授權或處理分散的 API。 其他資源 IronPDF 文件 HTML 轉 PDF 教學課程 API 參考 NuGet 套件 -授權選項 從 動態PDF 遷移到 IronPDF 可以消除管理多個產品授權的複雜性,同時提供基於 Chromium 的現代渲染和完整的 CSS3 支援。 從基於座標的定位過渡到 HTML/CSS 設計通常會產生更易於維護的程式碼,並利用熟悉的 Web 技術。 Curtis Chau 立即與工程團隊聊天 技術撰稿人 Curtis Chau 擁有電腦科學學士學位(卡爾頓大學),專長於前端開發,精通 Node.js、TypeScript、JavaScript 和 React。Curtis 對製作直覺且美觀的使用者介面充滿熱情,他喜歡使用現代化的架構,並製作結構良好且視覺上吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 也有濃厚的興趣,他喜歡探索整合硬體與軟體的創新方式。在空閒時間,他喜歡玩遊戲和建立 Discord bots,將他對技術的熱愛與創意結合。 相關文章 發表日期 2026年2月1日 How to Migrate from ZetPDF to IronPDF in C# Master the migration from ZetPDF to IronPDF with this complete C# guide. Switch from a coordinate-based library to a modern HTML-to-PDF solution. Includes code examples for HTML conversion, merging PDFs, and removing PDFSharp dependencies. 閱讀更多 發表日期 2026年2月1日 How to Migrate from Scryber.Core to IronPDF in C# Master the migration from Scryber.Core to IronPDF with this complete C# guide. Switch from custom XML/HTML parsing to a modern Chromium renderer. Includes code examples for HTML conversion, URL rendering, and replacing proprietary bindings. 閱讀更多 發表日期 2026年2月1日 How to Migrate from XFINIUM.PDF to IronPDF in C# Master the migration from XFINIUM.PDF to IronPDF with this complete C# guide. Switch from manual coordinate-based positioning to declarative HTML/CSS rendering. Includes code examples for replacing graphics primitives and automatic layout. 閱讀更多 How to Migrate from Easy PDF SDK to IronPDF in C#How to Migrate from DinkToPdf to Ir...
發表日期 2026年2月1日 How to Migrate from ZetPDF to IronPDF in C# Master the migration from ZetPDF to IronPDF with this complete C# guide. Switch from a coordinate-based library to a modern HTML-to-PDF solution. Includes code examples for HTML conversion, merging PDFs, and removing PDFSharp dependencies. 閱讀更多
發表日期 2026年2月1日 How to Migrate from Scryber.Core to IronPDF in C# Master the migration from Scryber.Core to IronPDF with this complete C# guide. Switch from custom XML/HTML parsing to a modern Chromium renderer. Includes code examples for HTML conversion, URL rendering, and replacing proprietary bindings. 閱讀更多
發表日期 2026年2月1日 How to Migrate from XFINIUM.PDF to IronPDF in C# Master the migration from XFINIUM.PDF to IronPDF with this complete C# guide. Switch from manual coordinate-based positioning to declarative HTML/CSS rendering. Includes code examples for replacing graphics primitives and automatic layout. 閱讀更多