Comment intégrer des caractères UTF-8 dans des fichiers PDF à l'aide de C#
Migrer de PDF Duo .NETà IronPDF transfère votre flux de travail PDF .NET d'une bibliothèque de niche, peu documentée et sans nouvelles versions récentes vers une solution stable, bien documentée et activement maintenue. Ce guide fournit un chemin de migration étape par étape qui aborde les risques de dépendance à un composant inactif tout en accédant à des fonctionnalités non couvertes par l'API documentée de PDF Duo.
Pourquoi migrer de PDF Duo vers IronPDF
Le problème du risque de double PDF
PDF Duo .NET (DuoDimension Software) est un composant de niche HTML vers PDF for .NET. Bien qu'il ait pu séduire les équipes recherchant une DLL autonome, plusieurs traits en font un mauvais choix pour les applications de production actuelles :
-
Vendeur et provenance : Publié par DuoDimension Software (duodimension.com), un petit éditeur de logiciels avec aucune feuille de route publique et aucun dépôt GitHub.
-
Documentation rare : Une page produit du fournisseur, quelques extraits d'exemple, et un communiqué de presse de 2010. Aucune référence d'API et aucune présence significative sur Stack Overflow.
-
Abandon effectif : La dernière version publique est v2.4, datée du 10 décembre 2010 — environ 15 ans sans une nouvelle version.
-
Surface documentée étroite : L'API publique est essentiellement
DuoDimension.HtmlToPdfavecOpenHTML(...)etSavePDF(...). Il n'existe aucune API native documentée pour le marquage, le cryptage, la signature, le remplissage de formulaires, l'extraction de texte ou la fusion de PDF. -
Moteur de rendu non divulgué : Les matériaux du vendeur décrivent un composant autonome sans dépendance à Office ou Acrobat, mais ne publient pas quel moteur HTML/CSS est utilisé. CSS3, JavaScript moderne, polices web, et mise en page flex/grid ne sont pas revendiqués.
- Ciblage .NET prémoderne : Le support documenté concerne le .NET Framework 1.1 à 3.5 sur Windows XP / Vista / 7 / 2000 / 2003. Aucun support documenté pour .NET Framework 4.x, .NET Core, .NET 5+, Linux, ou Docker.
Comparaison PDF Duo vs IronPDF
| Aspect | PDF Duo .NET | IronPDF |
|---|---|---|
| Dernière version publiée | v2.4 (décembre 2010) | Publications régulières et actives |
| Distribution | Téléchargement DLL depuis duodimension.com (pas de NuGet) | NuGet IronPdf |
| Support d'exécution | .NET Framework 1.1 – 3.5, uniquement pour Windows | .NET FX 4.6.2+, .NET 6/7/8/9/10, Linux, macOS, Docker |
| Documentation | Une page produit du fournisseur | Documents complets + Référence API |
| Support | Aucune visible | Équipe d'assistance professionnelle |
| Communauté | Négligeable | Plus de 41 millions de téléchargements NuGet (pile Iron Software) |
| Rendu | Moteur non divulgué | Chrome moderne |
| Caractéristiques | Uniquement HTML vers PDF | HTML-to-PDF, fusion, sécurité, signatures, OCR, formulaires, filigranes |
| Licence d'utilisation | Selon la page de tarification du fournisseur | Commercial, perpétuel ou par abonnement |
Pour les équipes sur .NET moderne,IronPDF offre une base stable avec développement actif et une documentation complète à la place d'un composant dont la dernière version publiée était v2.4 en décembre 2010.
Avant de commencer
Prérequis
- Environnement .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
- Accès à NuGet : possibilité d'installer des packages NuGet
- Licence IronPDF : Obtenez votre clé de licence sur IronPDF
Modifications du package/références
PDF Duo .NET is not distributed via NuGet. Le supprimer est une étape manuelle :
# 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
Configuration de la licence
// 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"
Identifier l'utilisation de 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" .
Référence API
Le namespace racine documenté du fournisseur est DuoDimension. La surface publique est essentiellement la classe HtmlToPdf avec OpenHTML(...) et SavePDF(...). Les sous-namespaces présentés ci-dessous pour IronPDF reflètent la structure de IronPDF; PDF Duo .NETne documente pas les sous-namespaces.
Modifications de l'espace de nommage
| PDF Duo .NET | IronPDF |
|---|---|
using DuoDimension; |
using IronPdf; |
| (aucun sous-namespace documenté) | using IronPdf.Rendering; |
Mappages de conversion HTML vers 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) |
(écrire une chaîne dans un fichier temporaire .html, puis OpenHTML) |
renderer.RenderHtmlAsPdf(html).SaveAs(path) |
Mappages de configuration de page
DuoDimension.HtmlToPdf ne documente pas d'objet de paramètres pour le format de papier, l'orientation ou les marges. La colonne IronPDF ci-dessous montre les équivalents explicites RenderingOptions.
| PDF Duo .NET | IronPDF |
|---|---|
| (aucune option de taille de page documentée) | RenderingOptions.PaperSize = PdfPaperSize.A4 |
| (aucune option de taille de page documentée) | RenderingOptions.PaperSize = PdfPaperSize.Letter |
| (aucune option d'orientation documentée) | RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape |
| (aucun objet marges documenté) | Propriétés des marges individuelles |
Margines Mappings
| PDF Duo .NET | IronPDF |
|---|---|
| (aucun objet marges documenté) | Propriétés individuelles |
| (pas d'équivalent)(pas d'équivalent)(pas d'équivalent)_(pas d'équivalent) | RenderingOptions.MarginTop |
| (pas d'équivalent)(pas d'équivalent)(pas d'équivalent)_(pas d'équivalent) | RenderingOptions.MarginRight |
| (pas d'équivalent)(pas d'équivalent)(pas d'équivalent)_(pas d'équivalent) | RenderingOptions.MarginBottom |
| (pas d'équivalent)(pas d'équivalent)(pas d'équivalent)_(pas d'équivalent) | RenderingOptions.MarginLeft |
Mise en correspondance des opérations sur les documents
PDF Duo .NET est uniquement un convertisseur HTML vers PDF. La page produit du fournisseur ne documente pas les APIs de chargement, d'octet ou de fusion sur DuoDimension.HtmlToPdf. Les lignes ci-dessous montrent ce que les équipes recherchaient typiquement dans les bibliothèques adjacentes lors de l'utilisation de PDF Duo, et l'appel IronPDF qui consolide ce travail.
| Besoin | PDF Duo .NET | IronPDF |
|---|---|---|
| Charger le PDF existant | pas natif — jumelé avec iTextSharp 4.x ou équivalent | PdfDocument.FromFile(path) |
| Sauvegarder le PDF | conv.SavePDF(path) |
pdf.SaveAs(path) |
| Obtenez des octets PDF | not native | pdf.BinaryData |
| Fusionner des PDF | pas natif — jumelé avec iTextSharp 4.x ou équivalent | PdfDocument.Merge(pdf1, pdf2) |
Nouvelles fonctionnalités non disponibles dans l'API documentée de PDF Duo
| Fonction | IronPDF |
|---|---|
| En-têtes/Pieds de page | RenderingOptions.HtmlHeader, HtmlFooter |
| Nombre de pages | {page}, placeholders {total-pages} |
| Filigranes | pdf.ApplyWatermark(html) |
| Protection par mot de passe | pdf.SecuritySettings |
| Remplissage de formulaires | pdf.Form.Fields |
| Signatures numériques | pdf.SignWithFile() |
| Extraction de texte | pdf.ExtractAllText() |
| PDF vers image | pdf.RasterizeToImageFiles() |
Exemples de migration de code
Exemple 1 : Conversion HTML vers PDF
Avant (PDF Duo):
// PDF Duo .NETis 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 .NETis 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
Après (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
La différence fondamentale ici est le modèle d'API. L'HtmlToPdf.OpenHTML(...) de PDF Duo accepte un chemin de fichier, une URL ou un flux — il ne documente pas un appel "rendre cette chaîne HTML", donc les équipes écrivent d'abord le balisage dans un fichier temporaire, puis appellent SavePDF(path) pour écrire sur le disque. L'ChromePdfRenderer.RenderHtmlAsPdf() de IronPDF rend directement la chaîne et renvoie un objet PdfDocument, que vous enregistrez ensuite avec SaveAs().
Cet approche orientée objet fournit une flexibilité supplémentaire : vous pouvez manipuler le PDF (ajouter des filigranes, fusionner des documents, ajouter la sécurité, extraire du texte) avant de l'enregistrer — aucun de ces éléments ne fait partie de l'API documentée de PDF Duo .NET. Voir la documentation HTML vers PDF pour des options de rendu supplémentaires.
Exemple 2 : Conversion d'une URL en PDF
Avant (PDF Duo):
// PDF Duo .NETis 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 .NETis 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
Après (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 utilise la même classe DuoDimension.HtmlToPdf pour la conversion d'URL en passant l'URL à OpenHTML(...) suivi par SavePDF(path).IronPDF utilise ChromePdfRenderer avec la méthode dédiée RenderUrlAsPdf(url), renvoyant un objet PdfDocument.
Un avantage clé est que le moteur de rendu basé sur Chromium d'IronPDF offre un support CSS3 et JavaScript moderne, alors que les matériaux du fournisseur PDF Duo ne divulguent pas quel moteur HTML/CSS est utilisé. En savoir plus sur la conversion d'URL en PDF.
Exemple 3 : fusion de fichiers PDF
Avant (PDF Duo):
PDF Duo .NET ne fournit pas d'API de fusion de PDF native. La surface documentée est uniquement HTML vers PDF, donc les équipes qui devaient fusionner rendaient typiquement chaque PDF avec PDF Duo puis les concaténer avec une bibliothèque séparée (communément iTextSharp 4.x dans les projets de l'ère 2010) :
// PDF Duo .NETis 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 .NETis 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
Après (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
Cet exemple montre une différence architecturale fondamentale. PDF Duo .NETn'a pas d'API de fusion du tout — fusionner dans les flux de travail PDF Duo signifiait historiquement le jumeler avec une seconde bibliothèque telle que iTextSharp 4.x.
IronPDF consolide cela en une seule dépendance : chargez chaque PDF comme un PdfDocument en utilisant PdfDocument.FromFile(), puis utilisez la méthode statique PdfDocument.Merge() pour les combiner. Cela renvoie un nouvel objet PdfDocument que vous sauvegardez séparément avec SaveAs().
L'approche IronPDF vous permet aussi de manipuler n'importe lequel des PDF avant la fusion, d'ajouter des filigranes au résultat fusionné, d'appliquer des paramètres de sécurité, et plus. Pour fusionner de nombreux fichiers, vous pouvez utiliser 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")
En savoir plus sur la fusion et la division de PDF.
Nouvelles capacités après la migration
Après avoir migré vers IronPDF, vous bénéficiez de fonctionnalités que PDF Duo ne peut tout simplement pas vous offrir :
En-têtes et pieds de page avec numéros de page
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 ne prend pas en charge les en-têtes et les pieds de page - il n'existe pas de fonctionnalité équivalente.IronPDF offre une prise en charge complète du HTML/CSS avec des espaces réservés intégrés pour le contenu dynamique comme les numéros de page. Voir le guide des en-têtes et pieds de page.
Marques de fond
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 ne prend pas en charge les filigranes.IronPDF fournit des filigranes basés sur HTML avec une prise en charge complète du style CSS.
Protection par mot de passe
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 ne prend pas en charge la protection par mot de passe ou les paramètres de sécurité.
Extraction de texte
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 ne prend pas en charge l'extraction de texte.
Notes de migration essentielles
Aucune option de mise en page sur l'HtmlToPdf de PDF Duo
DuoDimension.HtmlToPdf ne documente pas d'objet de paramètres couvrant le format de papier, l'orientation, ou les marges.IronPDF les expose explicitement sur 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
Enregistrement des noms de méthodes
Noms de méthodes différents pour écrire le fichier :
// 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")
Chargement de PDF existants
PDF Duo .NET n'écrit que des PDFs — il n'existe pas d'appel documenté pour " charger un PDF existant ". Pour travailler sur un PDF existant, vous devez passer à IronPDF(ou une autre bibliothèque) :
// 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")
Entrée de chaîne HTML
L'OpenHTML de PDF Duo ne documente pas d'appel "rendre cette chaîne HTML" ; les équipes écrivent d'abord le balisage dans un fichier temporaire.IronPDF rend les chaînes directement :
// 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")
Comparaison des fonctionnalités
| Fonction | PDF Duo .NET | IronPDF |
|---|---|---|
| HTML vers PDF | Oui (moteur non divulgué) | CSS3 complet, JavaScript |
| URL vers PDF | Oui | Complet avec prise en charge de l'authentification |
| Fusion de PDF | Pas dans l'API documentée | Oui |
| En-têtes/Pieds de page | Pas dans l'API documentée | Prise en charge complète du HTML |
| Numéros de page | Pas dans l'API documentée | Caractères génériques intégrés |
| Filigranes | Pas dans l'API documentée | Basé sur HTML |
| Protection par mot de passe | Pas dans l'API documentée | Options de sécurité complètes |
| Remplissage de formulaires | Pas dans l'API documentée | Oui |
| Signatures numériques | Pas dans l'API documentée | Oui |
| Extraction de texte | Pas dans l'API documentée | Oui |
| PDF vers images | Pas dans l'API documentée | Oui |
| Prise en charge de l'asynchronisme | Pas dans l'API documentée | Async/await complet |
| .NET Core/5+ | Pas dans la liste d'exécution documentée | Prise en charge |
Liste de contrôle de la migration
Pré-migration
- Trouvez toutes les références à PDF Duo dans le code source
- Paramètres actuels du document (format de page, marges, etc.)
- Lister toutes les opérations PDF utilisées
- Identifier les opportunités pour de nouvelles fonctionnalités (en-têtes, filigranes, sécurité)
- Obtenir une clé de licence IronPDF
Modifications du paquet
- Supprimez la référence de projet à
PDFDuo.dll(PDF Duo .NET n'est pas sur NuGet) et supprimez le binaire du fournisseur - Installez le packageNuGet
IronPdf:dotnet add package IronPdf - Mettez à jour les imports de namespaces de
using DuoDimension;àusing IronPdf;
Modifications du code
- Ajouter la configuration de la clé de licence au démarrage
- Remplacez
DuoDimension.HtmlToPdfparChromePdfRenderer - Remplacez
OpenHTML(path) + SavePDF(path)parRenderHtmlFileAsPdf(path).SaveAs(path) - Remplacez le détour par fichier temporaire pour les chaînes HTML par
RenderHtmlAsPdf(html).SaveAs(path) - Remplacez
OpenHTML(url) + SavePDF(path)parRenderUrlAsPdf(url).SaveAs(path) - Remplacez toute étape de fusion externe par
PdfDocument.Merge() - Définissez explicitement le format de page et les marges via
RenderingOptions(pas d'équivalent PDF Duo) - Remplacez
SavePDF()parSaveAs() - Pour tout flux de travail "charger un PDF existant", utilisez
PdfDocument.FromFile()(pas d'équivalent PDF Duo)
Après la migration
- Effectuer des tests de régression comparant les résultats PDF
- Vérifiez que les dimensions et les marges des pages correspondent.
- Test avec du HTML/CSS complexe (le moteur moderne d'IronPDF devrait mieux le gérer)
- Ajouter de nouvelles fonctionnalités (en-têtes, pieds de page, filigranes, sécurité)
- Mise à jour de la documentation

