Wie man UTF-8-Zeichen in PDF-Dateien mit C# einbettet
Der Umstieg von PDF Duo .NET zu IronPDF verlagert Ihren .NET PDF-Workflow von einer Nischenbibliothek mit spärlicher Dokumentation und keinen aktuellen Releases zu einer stabilen, gut dokumentierten und aktiv gewarteten Lösung. Dieser Leitfaden bietet einen schrittweisen Migrationspfad, der die Risiken aufzeigt, auf einem inaktiven Komponenten zu basieren, während der Zugriff auf Funktionen erweitert wird, die von PDF Duo's dokumentierter API nicht abgedeckt werden.
Warum von PDF Duo zu IronPDF migrieren
Das PDF-Duo-Risiko-Problem
PDF Duo .NET (DuoDimension Software) ist eine Nischenkomponente für HTML zu PDF für .NET. Auch wenn es an Teams appelliert haben mag, die nach einer selbst enthaltenen DLL gesucht haben, machen mehrere Merkmale es für aktuelle Produktionsanwendungen ungeeignet:
-
Verkäufer und Herkunft: Veröffentlicht von DuoDimension Software (duodimension.com), einem kleinen ISV ohne öffentliche Roadmap und ohne GitHub-Repository.
-
Spärliche Dokumentation: Eine Anbieterproduktseite, ein Dutzend Beispielausschnitte und eine Pressemitteilung von 2010. Keine API-Referenzseite und keine bedeutende Stack Overflow Präsenz.
-
Praktisch aufgegeben: Letztes öffentliches Release ist v2.4, datiert auf den 10. Dezember 2010 — etwa 15 Jahre ohne neue Version.
-
Schmal dokumentierte Oberfläche: Die öffentliche API ist im Wesentlichen
DuoDimension.HtmlToPdfmitOpenHTML(...)undSavePDF(...). Es gibt keine dokumentierte native API für Wasserzeichen, Verschlüsselung, Signierung, Formularfüllung, Textextraktion oder PDF-Zusammenführung. -
Rendering-Engine nicht offenbart: Anbieterinformationen beschreiben eine selbstenthaltene Komponente ohne Office- oder Acrobat-Abhängigkeit, veröffentlichen jedoch nicht, welcher HTML/CSS-Engine verwendet wird. CSS3, modernes JavaScript, Web-Schriftarten und flex/grid-Layout werden nicht beansprucht.
- Vor-moderne .NET-Zielsetzung: Dokumentierte Unterstützung ist .NET Framework 1.1 bis 3.5 auf Windows XP / Vista / 7 / 2000 / 2003. Keine dokumentierte Unterstützung für .NET Framework 4.x, .NET Core, .NET 5+, Linux oder Docker.
Vergleich zwischen PDF Duo und IronPDF
| Aspekt | PDF Duo .NET | IronPDF |
|---|---|---|
| Letzte Veröffentlichung | v2.4 (Dezember 2010) | Aktive, regelmäßige Releases |
| Verteilung | DLL-Download von duodimension.com (kein NuGet) | NuGet IronPdf |
| Laufzeitunterstützung | .NET Framework 1.1 – 3.5, Windows only | .NET FX 4.6.2+, .NET 6/7/8/9/10, Linux, macOS, Docker |
| Dokumentation | Eine Anbieterproduktseite | Umfassende Dokumente + API-Referenz |
| Unterstützung | Keine sichtbar | Professionelles Support-Team |
| Gemeinschaft | Vernachlässigbar | 41M+ NuGet downloads (Iron Software stack) |
| Rendering | Engine nicht offenbart | Modernes Chromium |
| Merkmale | Nur HTML-zu-PDF | HTML-zu-PDF, zusammenführen, Sicherheit, Signaturen, OCR, Formulare, Wasserzeichen |
| Lizenzierung | Pro Anbieterpreis-Seite | Kommerziell, unbefristet oder abonnieren |
Für Teams auf modernem .NET bietet IronPDF eine stabile Grundlage mit aktiver Entwicklung und umfassender Dokumentation anstelle einer Komponente, deren letzte veröffentlichte Version v2.4 im Dezember 2010 war.
Bevor Sie beginnen
Voraussetzungen
- .NET -Umgebung: .NET Framework 4.6.2+ oder .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet -Zugriff: Möglichkeit zur Installation von NuGet -Paketen
- IronPDF -Lizenz: Ihren Lizenzschlüssel erhalten Sie unter IronPDF.
Paket-/Referenzänderungen
PDF Duo .NET wird nicht über NuGet vertrieben. Das Entfernen ist ein manueller Schritt:
# 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
Lizenz-Konfiguration
// 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"
Identifizieren Sie die Verwendung von 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-Referenz
Das dokumentierte Root-Namespace des Anbieters ist DuoDimension. Die öffentliche Oberfläche ist im Wesentlichen die HtmlToPdf-Klasse mit OpenHTML(...) und SavePDF(...). Die unten gezeigten Sub-Namespaces für IronPDF spiegeln die Struktur von IronPDF wider; PDF Duo .NET dokumentiert keine Sub-Namespaces.
Namensraumänderungen
| PDF Duo .NET | IronPDF |
|---|---|
using DuoDimension; |
using IronPdf; |
| (keine dokumentierten Sub-Namespaces) | using IronPdf.Rendering; |
HTML zu PDF Konvertierung Zuordnungen
| 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) |
(Schreiben Sie den String in eine temporäre .html, dann OpenHTML) |
renderer.RenderHtmlAsPdf(html).SaveAs(path) |
Zuordnungen der Seitenkonfiguration
DuoDimension.HtmlToPdf dokumentiert kein Einstellungsobjekt für Papiergröße, Ausrichtung oder Ränder. Die IronPDF-Spalte unten zeigt die expliziten RenderingOptions-Äquivalente.
| PDF Duo .NET | IronPDF |
|---|---|
| (keine dokumentierte Seitengrößenoption) | RenderingOptions.PaperSize = PdfPaperSize.A4 |
| (keine dokumentierte Seitengrößenoption) | RenderingOptions.PaperSize = PdfPaperSize.Letter |
| (keine dokumentierte Ausrichtungsoption) | RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape |
| (kein dokumentiertes Randobjekt) | Einzelne Randeigenschaften |
Margins-Zuordnungen
| PDF Duo .NET | IronPDF |
|---|---|
| (kein dokumentiertes Randobjekt) | Einzelne Eigenschaften |
| (keine Entsprechung) | RenderingOptions.MarginTop |
| (keine Entsprechung) | RenderingOptions.MarginRight |
| (keine Entsprechung) | RenderingOptions.MarginBottom |
| (keine Entsprechung) | RenderingOptions.MarginLeft |
Zuordnungen von Dokumentenoperationen
PDF Duo .NET ist nur ein HTML-zu-PDF-Konverter. Die Produktseite des Anbieters dokumentiert keine Lade-, Byte- oder Zusammenführungs-APIs auf DuoDimension.HtmlToPdf. Die unten gezeigten Zeilen zeigen, wofür Teams typischerweise auf benachbarte Bibliotheken zurückgriffen, als sie PDF Duo verwendeten, und den IronPDF-Aufruf, der diese Arbeit konsolidiert.
| Bedarf | PDF Duo .NET | IronPDF |
|---|---|---|
| Vorhandene PDF-Datei laden | nicht nativ — kombinieren Sie es mit iTextSharp 4.x oder ähnlich | PdfDocument.FromFile(path) |
| PDF speichern | conv.SavePDF(path) |
pdf.SaveAs(path) |
| Erhalten Sie PDF-Bytes | not native | pdf.BinaryData |
| PDFs zusammenführen | nicht nativ — kombinieren Sie es mit iTextSharp 4.x oder ähnlich | PdfDocument.Merge(pdf1, pdf2) |
Neue Funktionen, die in der dokumentierten API von PDF Duo nicht verfügbar sind
| Feature | IronPDF |
|---|---|
| Kopf-/Fußzeilen | RenderingOptions.HtmlHeader, HtmlFooter |
| Seitenzahlen | {page}, {total-pages} Platzhalter |
| Wasserzeichen | pdf.ApplyWatermark(html) |
| Passwortschutz | pdf.SecuritySettings |
| Ausfüllen von Formularen | pdf.Form.Fields |
| Digitale Signaturen | pdf.SignWithFile() |
| Textextraktion | pdf.ExtractAllText() |
| PDF zu Bild | pdf.RasterizeToImageFiles() |
Beispiele für die Code-Migration
Beispiel 1: Konvertierung von HTML in PDF
Vor (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
Nach (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
Der grundlegende Unterschied ist hier das API-Muster. PDF Duo's HtmlToPdf.OpenHTML(...) akzeptiert einen Dateipfad, eine URL oder einen Stream – es dokumentiert keinen "rendere diesen HTML-String"-Aufruf, daher schreiben Teams das Markup zuerst in eine temporäre Datei und rufen dann SavePDF(path) auf, um auf die Festplatte zu schreiben. IronPDF's ChromePdfRenderer.RenderHtmlAsPdf() rendert den String direkt und gibt ein PdfDocument-Objekt zurück, das Sie dann mit SaveAs() speichern.
Dieser objektorientierte Ansatz bietet zusätzliche Flexibilität: Sie können das PDF manipulieren (Wasserzeichen hinzufügen, Dokumente zusammenführen, Sicherheit hinzufügen, Text extrahieren), bevor Sie speichern — nichts davon ist Teil der dokumentierten API von PDF Duo .NET. Weitere Rendering-Optionen finden Sie in der HTML to PDF Dokumentation.
Beispiel 2: Konvertierung von URL in PDF
Vor (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
Nach (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 verwendet die gleiche DuoDimension.HtmlToPdf-Klasse für die URL-Konvertierung, indem die URL an OpenHTML(...) übergeben wird, gefolgt von SavePDF(path). IronPDF verwendet ChromePdfRenderer mit der dedizierten RenderUrlAsPdf(url)-Methode, die ein PdfDocument-Objekt zurückgibt.
Ein wesentlicher Vorteil ist, dass der Chromium-basierte Rendermotor von IronPDF Unterstützung für modernes CSS3 und JavaScript bietet, wohingegen das Verkäufermaterial von PDF Duo nicht offenbart, welcher HTML/CSS-Engine verwendet wird. Erfahren Sie mehr über die URL in PDF Konvertierung.
Beispiel 3: PDF-Zusammenführung
Vor (PDF Duo):
PDF Duo .NET bietet keine native PDF-Zusammenführungs-API an. Die dokumentierte Oberfläche ist nur HTML-zu-PDF, daher haben Teams, die zusammenführen mussten, typischerweise jedes PDF mit PDF Duo gerendert und sie dann mit einer separaten Bibliothek (häufig iTextSharp 4.x in Projekten um 2010) zusammengefügt:
// 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
Nach (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
Dieses Beispiel zeigt einen grundlegenden architektonischen Unterschied. PDF Duo .NET hat keine Zusammenführungs-API — das Zusammenführen in PDF-Duo-Workflows bedeutete historisch, es mit einer zweiten Bibliothek wie iTextSharp 4.x zu kombinieren.
IronPDF konsolidiert dies in einer einzigen Abhängigkeit: Laden Sie jedes PDF als PdfDocument mit PdfDocument.FromFile(), dann verwenden Sie die statische PdfDocument.Merge()-Methode, um sie zu kombinieren. Dies gibt ein neues PdfDocument-Objekt zurück, das Sie separat mit SaveAs() speichern.
Der IronPDF-Ansatz erlaubt es auch, eines der PDFs vor dem Zusammenführen zu manipulieren, Wasserzeichen zum kombinierten Ergebnis hinzuzufügen, Sicherheitseinstellungen anzuwenden und mehr. Um viele Dateien zusammenzuführen, können Sie LINQ verwenden:
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")
Erfahren Sie mehr über das Zusammenführen und Aufteilen von PDFs.
Neue Funktionen nach der Migration
Nach der Migration zu IronPDF erhalten Sie Funktionen, die PDF Duo einfach nicht bieten kann:
Kopf- und Fußzeilen mit Seitenzahlen
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 unterstützt keine Kopf- oder Fußzeilen - es gibt keine entsprechende Funktionalität. IronPDF bietet vollständige HTML/CSS-Unterstützung mit integrierten Platzhaltern für dynamische Inhalte wie Seitenzahlen. Siehe den Headers and Footers Guide.
Wasserzeichen
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 unterstützt keine Wasserzeichen. IronPDF bietet HTML-basierte Wasserzeichen mit vollständiger CSS-Styling-Unterstützung.
Passwortschutz
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 unterstützt keinen Passwortschutz und keine Sicherheitseinstellungen.
Textextraktion
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 unterstützt keine Textextraktion.
Kritische Hinweise zur Migration
Keine Seitenlayout-Optionen auf PDF Duo's HtmlToPdf
DuoDimension.HtmlToPdf dokumentiert kein Einstellungsobjekt für Papiergröße, Ausrichtung oder Ränder.IronPDF stellt diese explizit auf RenderingOptions bereit:
// 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
Benennung von Methoden speichern
Verschiedene Methodennamen zum Schreiben der Datei:
// 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")
Vorhandene PDFs laden
PDF Duo .NET schreibt nur PDFs - es gibt keinen dokumentierten "vorhandenes PDF laden"-Aufruf. Um auf ein bestehendes PDF zuzugreifen, müssen Sie auf IronPDF (oder eine andere Bibliothek) umsteigen:
// 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-String-Eingabe
PDF Duo's OpenHTML dokumentiert keinen "rendere diesen HTML-String"-Aufruf; Teams schreiben die Markup zuerst in eine temporäre Datei. IronPDF rendert Strings direkt:
// 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")
Funktionsvergleich
| Feature | PDF Duo .NET | IronPDF |
|---|---|---|
| HTML zu PDF | Ja (Engine nicht bekanntgegeben) | Vollständig CSS3, JavaScript |
| URL zu PDF | Ja | Vollständig mit Autorisierungsunterstützung |
| PDF-Zusammenführung | Nicht in dokumentierter API | Ja |
| Kopf-/Fußzeilen | Nicht in dokumentierter API | Volle HTML-Unterstützung |
| Seitenzahlen | Nicht in dokumentierter API | Eingebaute Platzhalter |
| Wasserzeichen | Nicht in dokumentierter API | HTML-basiert |
| Passwortschutz | Nicht in dokumentierter API | Vollständige Sicherheitsoptionen |
| Formular ausfüllen | Nicht in dokumentierter API | Ja |
| Digitale Signaturen | Nicht in dokumentierter API | Ja |
| Textextraktion | Nicht in dokumentierter API | Ja |
| PDF in Bilder | Nicht in dokumentierter API | Ja |
| Async-Unterstützung | Nicht in dokumentierter API | Vollständig async/await |
| .NET Core/5+ | Nicht in dokumentierter Ausführungsliste | Unterstützt |
Migrations-Checkliste
Vor der Migration
- Finde alle PDF Duo-Referenzen im Quellcode
- Dokumentieren Sie die aktuellen Einstellungen (Seitengröße, Ränder usw.).
- Liste aller verwendeten PDF-Operationen
- Möglichkeiten für neue Funktionen identifizieren (Header, Wasserzeichen, Sicherheit) -IronPDF-Lizenzschlüssel erhalten
Paketänderungen
- Entfernen Sie den Projektverweis auf
PDFDuo.dll(PDF Duo .NET ist nicht auf NuGet) und löschen Sie die mitgelieferte Binärdatei - Installieren Sie das
IronPdfNuGet-Paket:dotnet add package IronPdf - Aktualisieren Sie die Namespace-Importe von
using DuoDimension;zuusing IronPdf;
Code-Änderungen
- Lizenzschlüsselkonfiguration beim Start hinzufügen
- Ersetzen Sie
DuoDimension.HtmlToPdfdurchChromePdfRenderer - Ersetzen Sie
OpenHTML(path) + SavePDF(path)durchRenderHtmlFileAsPdf(path).SaveAs(path) - Ersetzen Sie den Umweg über die temporäre Datei für HTML-Strings durch
RenderHtmlAsPdf(html).SaveAs(path) - Ersetzen Sie
OpenHTML(url) + SavePDF(path)durchRenderUrlAsPdf(url).SaveAs(path) - Ersetzen Sie jeden externen Zusammenführungsschritt durch
PdfDocument.Merge() - Setzen Sie die Seitengröße und Ränder explizit über
RenderingOptions(kein PDF Duo-Äquivalent) - Ersetzen Sie
SavePDF()durchSaveAs() - Für jeden "lade bestehendes PDF"-Workflow verwenden Sie
PdfDocument.FromFile()(kein PDF Duo-Äquivalent)
Nach der Migration
- Führen Sie Regressionstests durch, um die PDF-Ausgabe zu vergleichen.
- Überprüfen Sie, ob Seitengrößen und Ränder übereinstimmen.
- Test mit komplexem HTML/CSS (die moderne Engine von IronPDF sollte damit besser zurechtkommen)
- Neue Funktionen hinzufügen (Kopf- und Fußzeilen, Wasserzeichen, Sicherheit)
- Dokumentation aktualisieren

