如何在 C# 中從 PDF Duo 遷移到 IronPDF
從PDF Duo .NET遷移到 IronPDF,可將您的 .NET PDF 工作流程從晦澀不明、記錄不詳且維護狀態不明確的函式庫,轉換為穩定、記錄詳盡且積極維護的解決方案。 本指南提供全面、逐步的遷移路徑,可消除與廢棄程式庫相關的風險,同時獲得 PDF Duo 無法提供的進階功能。
為什麼要從 PDF Duo 轉移到 IronPDF?
PDF Duo 的風險問題
PDF Duo .NET 是 .NET 生態系統中一個難以捉摸、較少為人所知的函式庫。 雖然它可能對追求簡單的開發人員很有吸引力,但資料庫的晦澀不明對生產應用程式而言卻是重大的挑戰:
1.來源不明:開發者身分不明,沒有可驗證的公司支援。 沒有可見的 GitHub 儲存庫或原始碼、有限的 NuGet 下載統計,以及不確定的授權條款。
2.缺少文件:幾乎不可能找到可靠的資訊。 目前沒有官方 API 參考資料、社群範例稀少,也沒有官方教學或指南。 任何利用 PDF Duo 的嘗試都會因為可靠文件的稀少而受阻。
3.已棄用或不活躍狀態:有明顯的疏於管理跡象,更新斷斷續續或根本沒有更新。 支援論壇顯示的是 2019 年的文章,沒有任何回應。 對於重要的專案而言,非常真實的棄用風險使其可行性大打折扣。
4.功能有限:僅提供基本功能-簡單的 HTML 轉 PDF 和基本的 PDF 合併,沒有表單、安全或浮水印等進階功能。
5.未知渲染引擎:對底層工作原理一無所知。 CSS/JavaScript 支援未知,呈現品質無法預測,現代網路功能支援也不確定。
6.支援風險:設備損壞時沒有補救措施。 沒有專業支援、沒有社群協助,完全有被遺棄的風險。
PDF Duo 與IronPDF的比較
| 範疇 | PDF Duo .NET | IronPDF |
|---|---|---|
| 維護 | 未知/無活動 | 積極、定期更新 |
| 文件 | 稀疏/遺漏 | 全面性 |
| 支援 | 無 | 專業的支援團隊 |
| 社區 | ~0 位使用者 | 41M+ NuGet 下載次數 |
| 渲染 | 未知引擎 | 現代 Chromium |
| 特點 | 基本的 | 全功能 |
| 穩定性 | 未知 | 經過生產驗證 |
| 授權 | 不清楚 | 透明 |
對於計劃在 2025 年和 2026 年之前採用 .NET 10 和 C# 14 的團隊而言,IronPDF 提供了一個穩定的基礎,具有積極的開發和全面的說明文件,消除了依賴廢棄程式庫的不確定性。
開始之前
先決條件
- .NET環境: .NET Framework 4.6.2+ 或.NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet存取權限:能夠安裝NuGet套件
- IronPDF許可證:請從IronPDF取得您的許可證密鑰。
NuGet 套件變更
# RemovePDF Duo .NET(if you can find the correct package name)
dotnet remove package PDFDuo.NET
dotnet remove package PDFDuo
dotnet remove package PDF-Duo
# Install IronPDF
dotnet add package IronPdf
# RemovePDF Duo .NET(if you can find the correct package name)
dotnet remove package PDFDuo.NET
dotnet remove package PDFDuo
dotnet remove package PDF-Duo
# Install IronPDF
dotnet add package IronPdf
授權組態
// 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";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
辨識 PDF Duo 使用方式
# Find all PDF Duo references
grep -r "PDFDuo\|HtmlToPdfConverter\|PdfMerger" --include="*.cs" .
# Find all PDF Duo references
grep -r "PDFDuo\|HtmlToPdfConverter\|PdfMerger" --include="*.cs" .
完整的 API 參考資料
命名空間變更
| PDF Duo .NET | IronPDF |
|---|---|
using PDFDuo; |
using IronPdf; |
using PDFDuo.Document; |
using IronPdf; |
using PDFDuo.Rendering; |
using IronPdf.Rendering; |
using PDFDuo.Settings; |
using IronPdf; |
HTML 到 PDF 的轉換映射
| PDF Duo .NET | IronPDF |
|---|---|
new HtmlToPdfConverter() |
new ChromePdfRenderer() |
converter.ConvertHtmlString(html, path) |
renderer.RenderHtmlAsPdf(html).SaveAs(path) |
converter.ConvertUrl(url, path) |
renderer.RenderUrlAsPdf(url).SaveAs(path) |
converter.ConvertFile(htmlPath, pdfPath) |
renderer.RenderHtmlFileAsPdf(htmlPath).SaveAs(pdfPath) |
頁面組態對應
| PDF Duo .NET | IronPDF |
|---|---|
settings.PageSize = PageSize.A4 |
RenderingOptions.PaperSize = PdfPaperSize.A4 |
settings.PageSize = PageSize.Letter |
RenderingOptions.PaperSize = PdfPaperSize.Letter |
settings.Orientation = Landscape |
RenderingOptions.PaperOrientation = Landscape |
new Margins(top, right, bottom, left) |
個別邊界屬性 |
邊界對應
| PDF Duo .NET | IronPDF |
|---|---|
new Margins(top, right, bottom, left) |
個別屬性 |
margins.Top |
RenderingOptions.MarginTop |
margins.Right |
RenderingOptions.MarginRight |
margins.Bottom |
RenderingOptions.MarginBottom |
margins.Left |
RenderingOptions.MarginLeft |
文件操作映射
| PDF Duo .NET | IronPDF |
|---|---|
PDFDocument.Load(path) |
PdfDocument.FromFile(path) |
document.Save(path) |
pdf.SaveAs(path) |
document.ToBytes() |
pdf.BinaryData |
new PdfMerger() |
PdfDocument.Merge() |
merger.AddFile(path) |
PdfDocument.FromFile(path) |
merger.Merge(output) |
merged.SaveAs(output) |
PDF Duo 中不提供的新功能
| 特點 | IronPDF |
|---|---|
| 頁首/頁尾 | RenderingOptions.HtmlHeader, HtmlFooter |
| 頁數 | {page},{total-pages} 佔位符 |
| 水印 | pdf.ApplyWatermark(html) |
| 密碼保護 | pdf.SecuritySettings |
| 表格填寫 | pdf.Form.Fields |
| 數位簽名 | pdf.SignWithFile() |
| 文字擷取 | pdf.ExtractAllText() |
| PDF 至圖片 | pdf.RasterizeToImageFiles() |
程式碼遷移範例
範例 1:HTML 到 PDF 的轉換
之前 (PDF Duo):
// NuGet: Install-Package PDFDuo.NET
using PDFDuo;
using System;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>";
converter.ConvertHtmlString(htmlContent, "output.pdf");
Console.WriteLine("PDF created successfully!");
}
}
// NuGet: Install-Package PDFDuo.NET
using PDFDuo;
using System;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>";
converter.ConvertHtmlString(htmlContent, "output.pdf");
Console.WriteLine("PDF created successfully!");
}
}
Imports PDFDuo
Imports System
Module Program
Sub Main()
Dim converter As New HtmlToPdfConverter()
Dim htmlContent As String = "<h1>Hello World</h1><p>This is a PDF document.</p>"
converter.ConvertHtmlString(htmlContent, "output.pdf")
Console.WriteLine("PDF created successfully!")
End Sub
End Module
After (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully!");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully!");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF created successfully!")
End Sub
End Class
這裡的根本差異在於 API 模式。 PDF Duo 的 HtmlToPdfConverter.ConvertHtmlString() 功能可在一次呼叫中同時接收 HTML 和輸出路徑,並同時處理轉換和儲存。IronPDF的 ChromePdfRenderer.RenderHtmlAsPdf() 先傳回一個 PdfDocument 對象,然後您可以使用 SaveAs() 儲存該物件。
這種物件導向的方式提供了顯著的優勢:您可以在儲存之前對 PDF 進行操作(新增水印、合併文件、新增安全性、抽取文字)- 這些都是 PDF Duo 的直接到檔案方式所無法做到的。 請參閱 HTML to PDF 文件,以瞭解其他渲染選項。
範例 2:URL 到 PDF 的轉換
之前 (PDF Duo):
// NuGet: Install-Package PDFDuo.NET
using PDFDuo;
using System;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
converter.ConvertUrl("https://www.example.com", "webpage.pdf");
Console.WriteLine("Webpage converted to PDF!");
}
}
// NuGet: Install-Package PDFDuo.NET
using PDFDuo;
using System;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
converter.ConvertUrl("https://www.example.com", "webpage.pdf");
Console.WriteLine("Webpage converted to PDF!");
}
}
Imports PDFDuo
Imports System
Module Program
Sub Main()
Dim converter As New HtmlToPdfConverter()
converter.ConvertUrl("https://www.example.com", "webpage.pdf")
Console.WriteLine("Webpage converted to PDF!")
End Sub
End Module
After (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
Console.WriteLine("Webpage converted to PDF!");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
Console.WriteLine("Webpage converted to PDF!");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
pdf.SaveAs("webpage.pdf")
Console.WriteLine("Webpage converted to PDF!")
End Sub
End Class
PDF Duo 使用相同的 HtmlToPdfConverter 類別進行 URL 轉換,與 ConvertUrl(url, outputPath) 類別相同。IronPDF使用專用的 ChromePdfRenderer 方法,傳回一個 PdfDocument 物件。
其主要優勢在於IronPDF基於 Chromium 的渲染引擎提供現代化的 CSS3 和 JavaScript 支援,而 PDF Duo 的未知渲染引擎使得 CSS/JavaScript 支援不確定,渲染品質難以預測。 進一步了解 URL 至 PDF 轉換。
範例 3:PDF 合併
之前 (PDF Duo):
// NuGet: Install-Package PDFDuo.NET
using PDFDuo;
using System;
class Program
{
static void Main()
{
var merger = new PdfMerger();
merger.AddFile("document1.pdf");
merger.AddFile("document2.pdf");
merger.Merge("merged.pdf");
Console.WriteLine("PDFs merged successfully!");
}
}
// NuGet: Install-Package PDFDuo.NET
using PDFDuo;
using System;
class Program
{
static void Main()
{
var merger = new PdfMerger();
merger.AddFile("document1.pdf");
merger.AddFile("document2.pdf");
merger.Merge("merged.pdf");
Console.WriteLine("PDFs merged successfully!");
}
}
Imports PDFDuo
Imports System
Class Program
Shared Sub Main()
Dim merger As New PdfMerger()
merger.AddFile("document1.pdf")
merger.AddFile("document2.pdf")
merger.Merge("merged.pdf")
Console.WriteLine("PDFs merged successfully!")
End Sub
End Class
After (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
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");
Console.WriteLine("PDFs merged successfully!");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
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");
Console.WriteLine("PDFs merged successfully!");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
Console.WriteLine("PDFs merged successfully!")
End Sub
End Class
此範例顯示了基本的架構差異。 PDF Duo 使用專用的 PdfMerger 類,透過 AddFile() 方法將檔案放入佇列,然後 Merge() 一步合併並儲存。
IronPDF 使用不同的模式:使用 PdfDocument.FromFile() 將每個 PDF 載入為 PdfDocument,然後使用靜態 PdfDocument.Merge() 方法將它們合併。 這將返回一個新的 PdfDocument 對象,您可以將其與 SaveAs() 單獨保存。
IronPDF 方法提供了更大的靈活性-您可以在合併前對任何 PDF 進行操作,為合併後的結果添加水印,應用安全設置等。 若要合併許多檔案,可以使用 LINQ:
var paths = new[] { "document1.pdf", "document2.pdf", "document3.pdf" };
var pdfs = paths.Select(PdfDocument.FromFile).ToList();
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs("merged.pdf");
var paths = new[] { "document1.pdf", "document2.pdf", "document3.pdf" };
var pdfs = paths.Select(PdfDocument.FromFile).ToList();
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs("merged.pdf");
Dim paths = {"document1.pdf", "document2.pdf", "document3.pdf"}
Dim pdfs = paths.Select(AddressOf PdfDocument.FromFile).ToList()
Dim merged = PdfDocument.Merge(pdfs)
merged.SaveAs("merged.pdf")
進一步瞭解 合併與分割 PDF 的相關資訊。
遷移後的新功能
轉移到IronPDF之後,您將獲得 PDF Duo 完全無法提供的功能:
帶有頁碼的頁首和頁尾
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:center; font-size:10px;'>Company Report</div>",
MaxHeight = 25
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:center; font-size:10px;'>Page {page} of {total-pages}</div>",
MaxHeight = 25
};
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("report.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:center; font-size:10px;'>Company Report</div>",
MaxHeight = 25
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:center; font-size:10px;'>Page {page} of {total-pages}</div>",
MaxHeight = 25
};
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("report.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
.HtmlFragment = "<div style='text-align:center; font-size:10px;'>Company Report</div>",
.MaxHeight = 25
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = "<div style='text-align:center; font-size:10px;'>Page {page} of {total-pages}</div>",
.MaxHeight = 25
}
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("report.pdf")
PDF Duo 不支援頁首或頁尾 - 沒有對應的功能。IronPDF提供完整的 HTML/CSS 支援,內建頁碼等動態內容的占位符。 請參閱頁首和頁尾指南。
水印。
using IronPdf;
using IronPdf.Editing;
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark(
"<h1 style='color:red; opacity:0.3;'>CONFIDENTIAL</h1>",
45,
VerticalAlignment.Middle,
HorizontalAlignment.Center);
pdf.SaveAs("watermarked.pdf");
using IronPdf;
using IronPdf.Editing;
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark(
"<h1 style='color:red; opacity:0.3;'>CONFIDENTIAL</h1>",
45,
VerticalAlignment.Middle,
HorizontalAlignment.Center);
pdf.SaveAs("watermarked.pdf");
Imports IronPdf
Imports IronPdf.Editing
Dim pdf = PdfDocument.FromFile("document.pdf")
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>CONFIDENTIAL</h1>", 45, VerticalAlignment.Middle, HorizontalAlignment.Center)
pdf.SaveAs("watermarked.pdf")
PDF Duo 不支援水印。IronPDF提供基於 HTML 的水印,並支援完整的 CSS 設定。
密碼保護
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("secured.pdf");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("secured.pdf");
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SecuritySettings.UserPassword = "userpassword"
pdf.SecuritySettings.OwnerPassword = "ownerpassword"
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights
pdf.SaveAs("secured.pdf")
PDF Duo 不支援密碼保護或安全設定。
文字萃取
var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText();
var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText();
Dim pdf = PdfDocument.FromFile("document.pdf")
Dim text As String = pdf.ExtractAllText()
PDF Duo 不支援文字擷取。
關鍵遷移注意事項
個別屬性的邊界物件
PDF Duo 使用單一 Margins 物件;IronPDF使用個別屬性:
// PDF Duo:
new Margins(top: 20, right: 15, bottom: 20, left: 15)
// IronPDF:
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginRight = 15;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 15;
// PDF Duo:
new Margins(top: 20, right: 15, bottom: 20, left: 15)
// IronPDF:
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginRight = 15;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 15;
' PDF Duo:
New Margins(top:=20, right:=15, bottom:=20, left:=15)
' IronPDF:
renderer.RenderingOptions.MarginTop = 20
renderer.RenderingOptions.MarginRight = 15
renderer.RenderingOptions.MarginBottom = 20
renderer.RenderingOptions.MarginLeft = 15
儲存方法命名
不同的儲存方法名稱:
// PDF Duo:
document.Save("output.pdf");
// IronPDF:
pdf.SaveAs("output.pdf");
// PDF Duo:
document.Save("output.pdf");
// IronPDF:
pdf.SaveAs("output.pdf");
' PDF Duo:
document.Save("output.pdf")
' IronPDF:
pdf.SaveAs("output.pdf")
載入 PDFs
載入的不同方法名稱:
// PDF Duo:
PDFDocument.Load("document.pdf")
// IronPDF:
PdfDocument.FromFile("document.pdf")
// PDF Duo:
PDFDocument.Load("document.pdf")
// IronPDF:
PdfDocument.FromFile("document.pdf")
' PDF Duo:
PDFDocument.Load("document.pdf")
' IronPDF:
PdfDocument.FromFile("document.pdf")
設定物件到屬性
PDF Duo 使用傳送到構建器的設定物件;IronPDF使用屬性:
// PDF Duo:
var settings = new PDFSettings { PageSize = PageSize.A4 };
var converter = new HtmlToPdfConverter(settings);
// IronPDF:
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
// PDF Duo:
var settings = new PDFSettings { PageSize = PageSize.A4 };
var converter = new HtmlToPdfConverter(settings);
// IronPDF:
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
' PDF Duo:
Dim settings As New PDFSettings With {.PageSize = PageSize.A4}
Dim converter As New HtmlToPdfConverter(settings)
' IronPDF:
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
功能比較
| 特點 | PDF Duo .NET | IronPDF |
|---|---|---|
| HTML 至 PDF | 基本的 | 完整的 CSS3、JavaScript |
| URL 至 PDF | 基本的 | 完整的認證支援 |
| PDF 合併 | 是 | 是 |
| 頁首/頁尾 | 無 | 完整的 HTML 支援 |
| 頁數 | 無 | 內建占位符 |
| 水印 | 無 | 基於 HTML |
| 密碼保護 | 無 | 完整的安全選項 |
| 表格填寫 | 無 | 是 |
| 數位簽名 | 無 | 是 |
| 文字擷取 | 無 | 是 |
| PDF 至圖片 | 無 | 是 |
| 同步支援 | 未知 | 完整的 async/await |
| .NET Core/5+ | 未知 | 支援 |
遷移清單
預遷移
- 在程式碼庫中尋找所有 PDF Duo 引用
- 記錄目前設定(頁面大小、頁邊距等) 列出所有已使用的 PDF 操作
- 尋找新功能(標題、浮水印、安全)的機會
- 取得IronPDF許可證密鑰
套件變更
- 刪除
PDFDuo.NETNuGet 套件 安裝IronPdfNuGet 套件:dotnet add package IronPdf - 將命名空間匯入從
using PDFDuo;更新為using IronPdf;
程式碼變更
- 在啟動時新增許可證金鑰配置
- 將
HtmlToPdfConverter替換為ChromePdfRenderer - 將
ConvertHtmlString(html, path)替換為RenderHtmlAsPdf(html).SaveAs(path) - 將
ConvertUrl(url, path)替換為RenderUrlAsPdf(url).SaveAs(path) - 將
PdfMerger模式替換為PdfDocument.Merge()模式 將Margins物件轉換為單獨的邊距屬性 - 將
Save()替換為SaveAs() - 將
Load()替換為FromFile()
後遷移
- 執行迴歸測試,比較 PDF 輸出
- 核實頁面尺寸和邊距是否一致
- 使用複雜的 HTML/CSS 進行測試(IronPDF 的現代引擎應該可以更好地處理這種情況)
- 新增功能(頁首、頁尾、浮水印、安全功能)
- 更新文件

