如何使用 C# 在 PDF 文件中嵌入 UTF-8 字元
從PDF Duo .NET遷移到IronPDF將您的.NET PDF工作流從一個小眾、文件稀少且沒有最新發行的程式庫轉移到一個穩定、文件詳實並積極維護的解決方案。 本指南提供了一個逐步的遷移路徑,解決了依賴非活動組件的風險,並獲得PDF Duo文件API未涵蓋的功能的存取權限。
為何從PDF Duo遷移到IronPDF
PDF Duo風險問題
PDF Duo .NET(DuoDimension Software)是一個小眾的HTML到PDF的.NET組件。 儘管它可能吸引那些尋求自成一體DLL的團隊,但有幾個特點使其不適合當前的生產應用:
-
供應商和來源:由DuoDimension Software(duodimension.com)發布,一個沒有公開路線圖和沒有GitHub倉庫的小ISV。
-
文件稀少:一個供應商產品頁、一小部分範例片段和一篇2010年的新聞稿。 沒有API參考網站,也沒有有意義的Stack Overflow存在。
-
基本被遺棄:最後一次公開發布是v2.4,日期是2010年12月10日——大約15年沒有新版本。
-
狹窄的文件表面:公共API實質上是
SavePDF(...)一起。 沒有為水印、加密、簽名、表單填寫、文字提取或PDF合併提供本地API文件。 -
未披露的渲染引擎:供應商材料描述了一個不依賴於Office或Acrobat的自成一體的組件,但不知道使用了什麼HTML/CSS引擎。 未聲稱支持CSS3、現代JavaScript、網頁字體,以及flex/grid佈局。
- 預現代.NET目標:文件支持在Windows XP / Vista / 7 / 2000 / 2003上運行的.NET Framework 1.1至3.5。沒有文件記錄支持.NET Framework 4.x、.NET Core、.NET 5+、Linux或Docker。
PDF Duo與IronPDF比較
| 方面 | PDF Duo .NET | IronPDF |
|---|---|---|
| 最後發行 | v2.4(2010年12月) | 主動、定期發布 |
| 分發 | dll下載自duodimension.com(無NuGet) | NuGet IronPdf |
| 運行時支持 | .NET Framework 1.1 – 3.5,僅限Windows | .NET FX 4.6.2+、.NET 6/7/8/9/10、Linux、macOS、Docker |
| 文件 | 一個供應商產品頁 | 詳盡的文件 + API參考 |
| 支持 | 無可見 | 專業支持團隊 |
| 社區支持 | 微不足道 | 41M+次NuGet下載(Iron Software堆棧) |
| 渲染 | 未披露引擎 | 現代 Chromium |
| 功能 | 只有HTML到PDF | HTML到PDF、合併、安全性、簽名、OCR、表單、水印 |
| 授權 | 按供應商定價頁 | 商用,永久或訂閱 |
對於現代.NET上的團隊來說,IronPDF提供了一個穩定的基礎,具有積極的開發和詳盡的文件,而不是最後在2010年12月發布的v2.4的組件。
開始之前
前提條件
- .NET環境:.NET Framework 4.6.2+ 或.NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet存取: 有能力安裝NuGet套件
- IronPDF授權: 從ironpdf.com獲取您的授權金鑰
包 / 參考變更
PDF Duo .NET 不透過NuGet分發。 移除了它是一個手動步驟:
# In Visual Studio: References -> remove PDFDuo.dll (and any associated
# PDF Duo files) and delete the vendored binary from your /lib folder.
# Install IronPDF
dotnet add package IronPdf
# In Visual Studio: References -> remove PDFDuo.dll (and any associated
# PDF Duo files) and delete the vendored binary from your /lib folder.
# 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 "DuoDimension\|HtmlToPdf\b\|OpenHTML\|SavePDF" --include="*.cs" .
# Find all PDF Duo references
grep -r "DuoDimension\|HtmlToPdf\b\|OpenHTML\|SavePDF" --include="*.cs" .
API參考
供應商的已記錄的根名稱空間是DuoDimension。 公共表面實際上是SavePDF(...)一起。 下方顯示的子名稱空間反映了IronPDF的結構; PDF Duo .NET不記錄子名稱空間。
名稱空間變更
| PDF Duo .NET | IronPDF |
|---|---|
using DuoDimension; |
using IronPdf; |
| (無文件子名稱空間) | using IronPdf.Rendering; |
HTML到PDF轉換映射
| PDF Duo .NET | IronPDF |
|---|---|
new DuoDimension.HtmlToPdf() |
new ChromePdfRenderer() |
conv.OpenHTML(htmlFile); conv.SavePDF(path); |
renderer.RenderHtmlFileAsPdf(htmlFile).SaveAs(path) |
conv.OpenHTML(url); conv.SavePDF(path); |
renderer.RenderUrlAsPdf(url).SaveAs(path) |
(將字串寫到臨時.html,然後OpenHTML) |
renderer.RenderHtmlAsPdf(html).SaveAs(path) |
頁面配置映射
DuoDimension.HtmlToPdf沒有記錄紙張大小、方向或邊距的設置物件。 下面的IronPDF專欄顯示了明確的RenderingOptions等效項。
| PDF Duo .NET | IronPDF |
|---|---|
| (無文件頁面大小選項) | RenderingOptions.PaperSize = PdfPaperSize.A4 |
| (無文件頁面大小選項) | RenderingOptions.PaperSize = PdfPaperSize.Letter |
| (無文件方向選項) | RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape |
| (無文件邊距物件) | 個別邊距屬性 |
邊距映射
| PDF Duo .NET | IronPDF |
|---|---|
| (無文件邊距物件) | 個別屬性 |
| (無等價物) | RenderingOptions.MarginTop |
| (無等價物) | RenderingOptions.MarginRight |
| (無等價物) | RenderingOptions.MarginBottom |
| (無等價物) | RenderingOptions.MarginLeft |
文件操作映射
PDF Duo .NET僅是HTML到PDF的轉換器。 供應商產品頁不記錄DuoDimension.HtmlToPdf上的載入、字節或合併API。 以下行顯示了團隊在使用PDF Duo時通常在相鄰庫中尋找的東西,IronPDF呼叫將其整合到了這項工作。
| 需要 | PDF Duo .NET | IronPDF |
|---|---|---|
| 載入現有 PDF | 非本地的——與iTextSharp 4.x或類似的配對 | PdfDocument.FromFile(path) |
| 保存PDF | conv.SavePDF(path) |
pdf.SaveAs(path) |
| 獲取PDF字節 | not native | pdf.BinaryData |
| 合併PDF | 非本地的——與iTextSharp 4.x或類似的配對 | PdfDocument.Merge(pdf1, pdf2) |
PDF Duo文件API中不可用的新功能
| 功能 | 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):
// PDF Duo .NET is not on NuGet — reference PDFDuo.dll from the vendor download.
using DuoDimension;
using System;
using System.IO;
class Program
{
static void Main()
{
// OpenHTML accepts a file path, URL, or stream; there is no documented
// "convert HTML string" call, so write the markup to a temp file first.
var tempHtml = Path.GetTempFileName() + ".html";
File.WriteAllText(tempHtml, "<h1>Hello World</h1><p>This is a PDF document.</p>");
var conv = new HtmlToPdf();
conv.OpenHTML(tempHtml);
conv.SavePDF("output.pdf");
Console.WriteLine("PDF created successfully!");
}
}
// PDF Duo .NET is not on NuGet — reference PDFDuo.dll from the vendor download.
using DuoDimension;
using System;
using System.IO;
class Program
{
static void Main()
{
// OpenHTML accepts a file path, URL, or stream; there is no documented
// "convert HTML string" call, so write the markup to a temp file first.
var tempHtml = Path.GetTempFileName() + ".html";
File.WriteAllText(tempHtml, "<h1>Hello World</h1><p>This is a PDF document.</p>");
var conv = new HtmlToPdf();
conv.OpenHTML(tempHtml);
conv.SavePDF("output.pdf");
Console.WriteLine("PDF created successfully!");
}
}
Imports DuoDimension
Imports System
Imports System.IO
Module Program
Sub Main()
' OpenHTML accepts a file path, URL, or stream; there is no documented
' "convert HTML string" call, so write the markup to a temp file first.
Dim tempHtml As String = Path.GetTempFileName() & ".html"
File.WriteAllText(tempHtml, "<h1>Hello World</h1><p>This is a PDF document.</p>")
Dim conv As New HtmlToPdf()
conv.OpenHTML(tempHtml)
conv.SavePDF("output.pdf")
Console.WriteLine("PDF created successfully!")
End Sub
End Module
之後(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的SavePDF(path)寫入磁碟。 IronPDF的SaveAs()保存它。
這種面向物件的方法提供了額外的靈活性:您可以在保存之前操作PDF(新增水印、合併文件、增加安全性、提取文字)——這些都是PDF Duo .NET的文件API的一部分。 查看HTML到PDF文件以獲取其他渲染選項。
範例2:URL轉PDF轉換
之前(PDF Duo):
// PDF Duo .NET is not on NuGet — reference PDFDuo.dll from the vendor download.
using DuoDimension;
using System;
class Program
{
static void Main()
{
var conv = new HtmlToPdf();
conv.OpenHTML("https://www.example.com");
conv.SavePDF("webpage.pdf");
Console.WriteLine("Webpage converted to PDF!");
}
}
// PDF Duo .NET is not on NuGet — reference PDFDuo.dll from the vendor download.
using DuoDimension;
using System;
class Program
{
static void Main()
{
var conv = new HtmlToPdf();
conv.OpenHTML("https://www.example.com");
conv.SavePDF("webpage.pdf");
Console.WriteLine("Webpage converted to PDF!");
}
}
Imports DuoDimension
Imports System
Class Program
Shared Sub Main()
Dim conv As New HtmlToPdf()
conv.OpenHTML("https://www.example.com")
conv.SavePDF("webpage.pdf")
Console.WriteLine("Webpage converted to PDF!")
End Sub
End Class
之後(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使用相同的SavePDF(path)進行URL轉換。 IronPDF使用PdfDocument物件。
一個關鍵優勢是IronPDF基於Chromium的渲染引擎提供了現代的CSS3和JavaScript支持,而PDF Duo的供應商材料未公開所使用的HTML/CSS引擎。 了解有關URL到PDF轉換的更多資訊。
範例3:PDF合併
之前(PDF Duo):
PDF Duo .NET不提供本地PDF合併API。 記錄表面僅是HTML到PDF,因此需要合併的團隊通常使用PDF Duo呈現每個PDF,然後使用另一個程式庫(通常是2010年代項目中的iTextSharp 4.x)將它們拼接在一起:
// PDF Duo .NET is not on NuGet — reference PDFDuo.dll from the vendor download.
using DuoDimension;
using System;
class Program
{
static void Main()
{
// Render each source HTML to its own PDF
var conv = new HtmlToPdf();
conv.OpenHTML("page1.html");
conv.SavePDF("document1.pdf");
conv = new HtmlToPdf();
conv.OpenHTML("page2.html");
conv.SavePDF("document2.pdf");
// Merging into a single PDF requires another library (e.g., iTextSharp).
Console.WriteLine("PDF Duo has no native merge — combine output with another library.");
}
}
// PDF Duo .NET is not on NuGet — reference PDFDuo.dll from the vendor download.
using DuoDimension;
using System;
class Program
{
static void Main()
{
// Render each source HTML to its own PDF
var conv = new HtmlToPdf();
conv.OpenHTML("page1.html");
conv.SavePDF("document1.pdf");
conv = new HtmlToPdf();
conv.OpenHTML("page2.html");
conv.SavePDF("document2.pdf");
// Merging into a single PDF requires another library (e.g., iTextSharp).
Console.WriteLine("PDF Duo has no native merge — combine output with another library.");
}
}
Imports DuoDimension
Imports System
Module Program
Sub Main()
' Render each source HTML to its own PDF
Dim conv As New HtmlToPdf()
conv.OpenHTML("page1.html")
conv.SavePDF("document1.pdf")
conv = New HtmlToPdf()
conv.OpenHTML("page2.html")
conv.SavePDF("document2.pdf")
' Merging into a single PDF requires another library (e.g., iTextSharp).
Console.WriteLine("PDF Duo has no native merge — combine output with another library.")
End Sub
End Module
之後(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 .NET完全沒有合併API—在PDF Duo工作流程中合併歷史上意味著將其與其他程式庫如iTextSharp 4.x配對。
IronPDF將此整合為一個單一的依賴項:用PdfDocument.Merge()方法將其合併。 這會返回一個新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的HtmlToPdf上沒有頁面佈局選項
DuoDimension.HtmlToPdf未記錄涵蓋紙張大小、方向或邊距的設置物件。 IronPDF在RenderingOptions上明確地暴露了它們:
// PDF Duo: no documented per-instance settings — OpenHTML / SavePDF only.
// IronPDF:
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginRight = 15;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 15;
// PDF Duo: no documented per-instance settings — OpenHTML / SavePDF only.
// IronPDF:
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginRight = 15;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 15;
' PDF Duo: no documented per-instance settings — OpenHTML / SavePDF only.
' IronPDF:
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 20
renderer.RenderingOptions.MarginRight = 15
renderer.RenderingOptions.MarginBottom = 20
renderer.RenderingOptions.MarginLeft = 15
保存方法命名
為寫入文件提供不同的方法名稱:
// PDF Duo:
conv.SavePDF("output.pdf");
// IronPDF:
pdf.SaveAs("output.pdf");
// PDF Duo:
conv.SavePDF("output.pdf");
// IronPDF:
pdf.SaveAs("output.pdf");
' PDF Duo:
conv.SavePDF("output.pdf")
' IronPDF:
pdf.SaveAs("output.pdf")
載入現有PDF
PDF Duo .NET僅編寫PDF—沒有記錄的"載入現有PDF"調用。 要操作現有的PDF,您必須轉向IronPDF(或其他程式庫):
// PDF Duo: no equivalent.
// IronPDF:
var pdf = PdfDocument.FromFile("document.pdf");
// PDF Duo: no equivalent.
// IronPDF:
var pdf = PdfDocument.FromFile("document.pdf");
Imports IronPdf
Dim pdf = PdfDocument.FromFile("document.pdf")
HTML字串輸入
PDF Duo的OpenHTML不記錄"渲染此HTML字串"的調用; 團隊先將標記寫到一個臨時文件中。IronPDF直接渲染字串:
// PDF Duo:
File.WriteAllText("temp.html", html);
var conv = new DuoDimension.HtmlToPdf();
conv.OpenHTML("temp.html");
conv.SavePDF("output.pdf");
// IronPDF:
var renderer = new ChromePdfRenderer();
renderer.RenderHtmlAsPdf(html).SaveAs("output.pdf");
// PDF Duo:
File.WriteAllText("temp.html", html);
var conv = new DuoDimension.HtmlToPdf();
conv.OpenHTML("temp.html");
conv.SavePDF("output.pdf");
// IronPDF:
var renderer = new ChromePdfRenderer();
renderer.RenderHtmlAsPdf(html).SaveAs("output.pdf");
' PDF Duo:
File.WriteAllText("temp.html", html)
Dim conv = New DuoDimension.HtmlToPdf()
conv.OpenHTML("temp.html")
conv.SavePDF("output.pdf")
' IronPDF:
Dim renderer = New ChromePdfRenderer()
renderer.RenderHtmlAsPdf(html).SaveAs("output.pdf")
功能比較
| 功能 | PDF Duo .NET | IronPDF |
|---|---|---|
| HTML轉PDF | 是的(未披露引擎) | 完整CSS3,JavaScript |
| URL到PDF | 是 | 完整,具有身份驗證支持 |
| PDF合併 | 不在記錄API中 | 是 |
| 頁眉/頁腳 | 不在記錄API中 | 完整的HTML支持 |
| 頁碼 | 不在記錄API中 | 內建佔位符 |
| 浮水印 | 不在記錄API中 | 基於HTML |
| 密碼保護 | 不在記錄API中 | 完整的安全選項 |
| 表單填寫 | 不在記錄API中 | 是 |
| 數位簽名 | 不在記錄API中 | 是 |
| 文字提取 | 不在記錄API中 | 是 |
| PDF轉圖像 | 不在記錄API中 | 是 |
| 異步支援 | 不在記錄API中 | 完全支持 async/await |
| .NET Core/5+ | 不在記錄運行時列表中 | 支援 |
遷移檢查表
遷移前
- 在程式碼庫中找到所有PDF Duo引用
- 記錄當前設置(頁面大小,邊距等)
- 列出使用的所有PDF操作
- 確定新功能的機會(頁眉、水印、安全)
- 獲得IronPDF授權金鑰
套件變更
- 移除項目對
PDFDuo.dll的引用(PDF Duo .NET不在NuGet上)並刪除受贈的二進制文件 - 安裝
dotnet add package IronPdf - 將名稱空間導入從
using IronPdf;
程式碼變更
- 在啟動時加入授權金鑰配置
- 將
ChromePdfRenderer - 將
RenderHtmlFileAsPdf(path).SaveAs(path) - 用
RenderHtmlAsPdf(html).SaveAs(path)替換HTML字串的臨時文件繞路 - 將
RenderUrlAsPdf(url).SaveAs(path) - 將任何外部合併步驟替換為
PdfDocument.Merge() - 通過
RenderingOptions明確設置頁面大小和邊距(無PDF Duo等效項) - 將
SaveAs() - 對於任何"載入現有PDF"工作流程,請使用
PdfDocument.FromFile()(沒有PDF Duo等效項)
遷移後
- 執行回歸測試比較 PDF 輸出
- 驗證頁面大小和邊距是否匹配
- 用複雜的HTML/CSS進行測試(IronPDF的現代引擎應該能更好地處理它)
- 新增新功能(頁眉、頁腳、水印、安全)
- 更新文件
- 請注意PDF Duo .NET是其各自所有者的註冊商標。) 本網站不隸屬於、非DuoDimension之推薦或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供參考,反映撰寫時公開可用的資訊。

