如何在 C# 中從 PDF Duo 遷移到 IronPDF
從 PDF Duo 轉移到 IronPDF:完整的 C# 遷移指南。
從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.Abandoned or Inactive Status(廢棄或不活躍狀態):顯然有疏於維護的跡象,零星或完全沒有更新。 支援論壇顯示的是 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 提供了一個穩定的基礎,具有積極的開發和全面的說明文件,消除了依賴廢棄程式庫的不確定性。
開始之前
先決條件
1..NET 環境:.NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+ 2.NuGet存取:安裝 NuGet 套件的能力 3.IronPDF 授權:從IronPdf.com取得您的授權金鑰。
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";IRON VB CONVERTER ERROR developers@ironsoftware.com辨識 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 |
|---|---|
使用 PDFDuo; | 使用 IronPdf;。 |
使用 PDFDuo.Document; | 使用 IronPdf;。 |
使用 PDFDuo.Rendering; | 使用 IronPdf.Rendering;。 |
使用 PDFDuo.Settings;。 | 使用 IronPdf;。 |
HTML 到 PDF 的轉換映射
| PDF Duo .NET | IronPDF | 筆記 |
|---|---|---|
新的 HtmlToPdfConverter() | 新的 ChromePdfRenderer() | 主要呈現器 |
converter.ConvertHtmlString(html,path)。 | renderer.RenderHtmlAsPdf(html).SaveAs(path)。 | HTML 字串 |
converter.ConvertUrl(url,path)。 | renderer.RenderUrlAsPdf(url).SaveAs(path)。 | URL 轉換 |
converter.ConvertFile(htmlPath, pdfPath) | renderer.RenderHtmlFileAsPdf(htmlPath).SaveAs(pdfPath)。 | HTML 檔案 |
頁面組態對應
| 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 | 上邊距離 (mm) |
| <編碼>margins.Right</編碼 | <編碼>RenderingOptions.MarginRight</編碼 | 右邊距 (mm) |
margins.Bottom | RenderingOptions.MarginBottom | 底邊距離 (mm) |
margins.Left | RenderingOptions.MarginLeft | 左邊距離 (mm) |
文件操作映射
| PDF Duo .NET | IronPDF | 筆記 |
|---|---|---|
PDFDocument.Load(path) | PdfDocument.FromFile(path) | 載入 PDF |
| <編碼>document.Save(路徑)</編碼 | <代碼>pdf.SaveAs(路徑)</代碼 | 儲存 PDF |
| <編碼>document.ToBytes()</編碼 | <編碼>pdf.BinaryData</編碼 | 取得位元組 |
| <代碼>new PdfMerger()</ 代碼 | <代碼>PdfDocument.Merge()</代碼 | 靜態方法 |
| <編碼>merger.AddFile(路徑)</編碼 | PdfDocument.FromFile(path) | 載入然後合併 |
| <編碼>merger.Merge(輸出)</編碼 | 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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com這裡的根本差異在於 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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comPDF Duo 使用相同的 HtmlToPdfConverter 類與 ConvertUrl(url, outputPath) 進行 URL 轉換。IronPDF使用 ChromePdfRenderer 與專用的 RenderUrlAsPdf(url) 方法,返回一個 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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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!");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com此範例顯示了基本的架構差異。 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");IRON VB CONVERTER ERROR developers@ironsoftware.com進一步瞭解 合併與分割 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");IRON VB CONVERTER ERROR developers@ironsoftware.comPDF 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");IRON VB CONVERTER ERROR developers@ironsoftware.comPDF 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");IRON VB CONVERTER ERROR developers@ironsoftware.comPDF Duo 不支援密碼保護或安全設定。
文字萃取
var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText();var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText();IRON VB CONVERTER ERROR developers@ironsoftware.comPDF 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;IRON VB CONVERTER ERROR developers@ironsoftware.com儲存方法命名
不同的儲存方法名稱:
// PDF Duo:
document.Save("output.pdf");
// IronPDF:
pdf.SaveAs("output.pdf");// PDF Duo:
document.Save("output.pdf");
// IronPDF:
pdf.SaveAs("output.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.com載入 PDFs
載入的不同方法名稱:
// PDF Duo:
PDFDocument.Load("document.pdf")
// IronPDF:
PdfDocument.FromFile("document.pdf")// PDF Duo:
PDFDocument.Load("document.pdf")
// IronPDF:
PdfDocument.FromFile("document.pdf")IRON VB CONVERTER ERROR developers@ironsoftware.com設定物件到屬性
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;IRON VB CONVERTER ERROR developers@ironsoftware.com功能比較
| 特點 | 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。 - [ ] 更新命名空間匯入,從
使用 PDFDuo;改為using IronPdf;
程式碼變更
- [ ] 在啟動時加入授權金鑰組態
- [ ] 將
HtmlToPdfConverter替換為ChromePdfRenderer - [ ] 將
ConvertHtmlString(html, path)替換為RenderHtmlAsPdf(html).SaveAs(path) - [ ] 將
ConvertUrl(url, path)改為RenderUrlAsPdf(url).SaveAs(path) - [ ] 將
PdfMerger模式替換為<代碼>PdfDocument.Merge()</代碼模式 - [ ] 將
Margins物件轉換為個別 margin 屬性 - [ ] 將
Save()改為SaveAs() - [ ] 將
Load()替換為FromFile()
後遷移
- [ ] 執行比較 PDF 輸出的回歸測試
- [驗證頁面大小和頁邊空白是否相符
- [ ] 使用複雜的 HTML/CSS 進行測試(IronPdf 的現代引擎應該可以處理得更好)
- [ ] 新增功能(頁首、頁尾、水印、安全性)
- [ ] 更新文件
結論
從 PDF Duo 轉移到 IronPDF,可以消除依賴於晦澀不明、文件不全、維護狀態不清的函式庫所帶來的重大風險。 遷移提供了一個穩定、經生產驗證的基礎,具有全面的文件、專業的支援和積極的開發。
本次轉換的主要變更如下 1.穩定性:未知/棄用 → 正活躍開發,下載量達 41M+ 2.文件:稀疏/遺漏 → 全面的指南和 API 參考 3.渲染:未知引擎 → 基於現代 Chromium 4.類別:HtmlToPdfConverter → ChromePdfRenderer. 5.方法:ConvertHtmlString()/ConvertUrl() → RenderHtmlAsPdf()/RenderUrlAsPdf() 6.合併:PdfMerger 類 →<代碼>PdfDocument.Merge()</代碼靜態方法 7.邊界:Margins 物件 → 個別 RenderingOptions 屬性 8.新功能: 標頭/頁腳、水印、安全性、文字萃取等功能






