Jak przeprowadzić migrację z PDF Duo do IronPDF w języku C#
Migracja zPDF Duo .NETdo IronPDF przemieszcza przepływ pracy PDF w .NET z niszowej, słabo udokumentowanej biblioteki bez aktualnych wydań do stabilnego, dobrze udokumentowanego i aktywnie utrzymywanego rozwiązania. Ten przewodnik zapewnia krok po kroku ścieżkę migracji, która rozwiązuje ryzyka polegania na nieaktywnym komponencie, jednocześnie dając dostęp do funkcji, których udokumentowane API PDF Duo nie obejmuje.
Dlaczego warto przejść z PDF Duo na IronPDF
Problem ryzyka związany z PDF Duo
PDF Duo .NET (DuoDimension Software) to niszowy komponent HTML-to-PDF dla .NET. Chociaż mógł spodobać się zespołom szukającym samodzielnego DLL, kilka cech czyni go niewłaściwym wyborem do obecnych aplikacji produkcyjnych:
-
Dostawca i pochodzenie: Wydawany przez DuoDimension Software (duodimension.com), mały ISV bez publicznej mapy drogowej i bez repozytorium GitHub.
-
Słaba dokumentacja: Jedna strona produktu dostawcy, kilka fragmentów kodu próbnego i komunika prasowa z 2010 roku. Brak dokumentacji API i brak znaczącej obecności w Stack Overflow.
-
Efektywnie porzucony: Ostatnia publiczna wersja to v2.4, datowana na 10 grudnia 2010 — około 15 lat bez nowej wersji.
-
Waska dokumentowana powierzchnia: Publiczne API to zasadniczo
DuoDimension.HtmlToPdfzOpenHTML(...)iSavePDF(...). Nie ma udokumentowanego natywnego API dla znakowania wodnego, szyfrowania, podpisywania, wypełniania formularzy, wydobywania tekstu czy scalania PDF. -
Silnik renderowania nie jest ujawniony: Materiały dostawcy opisują samodzielny komponent bez zależności od Office lub Acrobat, ale nie publikują, jaki silnik HTML/CSS jest używany. CSS3, nowoczesny JavaScript, czcionki webowe i układ flex/grid nie są wymieniane.
- Celowanie w pre-nowoczesny .NET: Udokumentowane wsparcie to .NET Framework 1.1 do 3.5 na Windows XP / Vista / 7 / 2000 / 2003. Brak udokumentowanego wsparcia dla .NET Framework 4.x, .NET Core, .NET 5+, Linuxa czy Dockera.
Porównanie PDF Duo i IronPDF
| Aspekt | PDF Duo .NET | IronPDF |
|---|---|---|
| Ostatnia wersja | v2.4 (grudzień 2010) | Aktywne, regularne wydania |
| Dystrybucja | Pobieranie DLL z duodimension.com (brak NuGet) | NuGet IronPdf |
| Wsparcie dla środowisk uruchomieniowych | .NET Framework 1.1 – 3.5, tylko Windows | .NET FX 4.6.2+, .NET 6/7/8/9/10, Linux, macOS, Docker |
| Dokumentacja | Jedna strona produktu dostawcy | Kompleksowa dokumentacja + dokumentacja API |
| Wsparcie | Brak widocznych | Profesjonalny zespół wsparcia |
| Społeczność | Nieznaczące | 41M+ pobrań NuGet (stos Iron Software) |
| Renderowanie | Silnik nieujawniony | Nowoczesny Chromium |
| Funkcje | Tylko HTML-to-PDF | HTML-to-PDF, scalanie, bezpieczeństwo, podpisy, OCR, formularze, znaki wodne |
| Licencjonowanie | Na stronie cenowej dostawcy | Komercyjna, bezterminowa lub subskrypcyjna |
Dla zespołów na nowoczesnym .NET,IronPDF zapewnia stabilną podstawę z aktywnym rozwojem i kompleksową dokumentacją w miejsce komponentu, którego ostatnie publikowane wydanie było v2.4 w grudniu 2010 roku.
Zanim zaczniesz
Wymagania wstępne
- Środowisko .NET: .NET Framework 4.6.2+ lub .NET Core 3.1+ / .NET 5/6/7/8/9+
- Dostęp do NuGet: Możliwość instalowania pakietów NuGet
- Licencja IronPDF: Uzyskaj klucz licencyjny na stronie ironpdf.com
Zmiany w pakietach / odniesieniach
PDF Duo .NET jest nie rozprowadzane przez NuGet. Usunięcie go to krok ręczny:
# 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
Konfiguracja licencji
// 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"
Zidentyfikuj zastosowanie 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" .
Dokumentacja API
Dokumentowany root namespace dostawcy to DuoDimension. Publiczna powierzchnia to zasadniczo klasa HtmlToPdf z OpenHTML(...) i SavePDF(...). Pokazane poniżej podprzestrzenie nazw dla IronPDF odzwierciedlają strukturę IronPDF;PDF Duo .NETnie dokumentuje podprzestrzeni nazw.
Zmiany w przestrzeni nazw
| PDF Duo .NET | IronPDF |
|---|---|
using DuoDimension; |
using IronPdf; |
| (brak udokumentowanych podprzestrzeni nazw) | using IronPdf.Rendering; |
Mapowania konwersji HTML do 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) |
(zapisz string do tymczasowego .html, potem OpenHTML) |
renderer.RenderHtmlAsPdf(html).SaveAs(path) |
Mapowania konfiguracji stron
DuoDimension.HtmlToPdf nie dokumentuje obiektu ustawień dotyczącego rozmiaru papieru, orientacji lub marginesów. Kolumna IronPDF poniżej pokazuje jawne odpowiedniki RenderingOptions.
| PDF Duo .NET | IronPDF |
|---|---|
| (brak udokumentowanej opcji rozmiaru strony) | RenderingOptions.PaperSize = PdfPaperSize.A4 |
| (brak udokumentowanej opcji rozmiaru strony) | RenderingOptions.PaperSize = PdfPaperSize.Letter |
| (brak udokumentowanej opcji orientacji) | RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape |
| (brak udokumentowanego obiektu marginesów) | Właściwości poszczególnych marginesów |
Mapowanie marginesów
| PDF Duo .NET | IronPDF |
|---|---|
| (brak udokumentowanego obiektu marginesów) | Poszczególne właściwości |
| (brak odpowiednika) | RenderingOptions.MarginTop |
| (brak odpowiednika) | RenderingOptions.MarginRight |
| (brak odpowiednika) | RenderingOptions.MarginBottom |
| (brak odpowiednika) | RenderingOptions.MarginLeft |
Mapowania operacji na dokumentach
PDF Duo .NET to wyłącznie konwerter HTML-to-PDF. Strona produktu dostawcy nie dokumentuje API do ładowania, byte, ani łączenia na DuoDimension.HtmlToPdf. Poniższe wiersze pokazują, do czego zespoły zazwyczaj sięgały w sąsiednich bibliotekach przy użyciu PDF Duo, oraz wywołanie IronPDF, które konsoliduje tę pracę.
| Potrzeba | PDF Duo .NET | IronPDF |
|---|---|---|
| Wczytaj istniejący plik PDF | nie natywne — połącz z iTextSharp 4.x lub podobnym | PdfDocument.FromFile(path) |
| Zapisz jako PDF | conv.SavePDF(path) |
pdf.SaveAs(path) |
| Pobierz bajty PDF | not native | pdf.BinaryData |
| Łączenie plików PDF | nie natywne — połącz z iTextSharp 4.x lub podobnym | PdfDocument.Merge(pdf1, pdf2) |
Nowe funkcje niedostępne w udokumentowanym API PDF Duo
| Funkcja | IronPDF |
|---|---|
| Nagłówki/stopki | RenderingOptions.HtmlHeader, HtmlFooter |
| Numery stron | {page}, {total-pages} placeholders |
| Znaki wodne | pdf.ApplyWatermark(html) |
| Ochrona hasłem | pdf.SecuritySettings |
| Wypełnianie formularzy | pdf.Form.Fields |
| Podpisy cyfrowe | pdf.SignWithFile() |
| Wyodrębnianie tekstu | pdf.ExtractAllText() |
| PDF na obraz | pdf.RasterizeToImageFiles() |
Przykłady migracji kodu
Przykład 1: Konwersja HTML do PDF
Przed (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
Po (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
Podstawową różnicą jest tutaj wzorzec API. HtmlToPdf.OpenHTML(...) PDF Duo przyjmuje ścieżkę pliku, URL, lub strumień — nie dokumentuje wywołania "renderuj ten HTML string", dlatego zespoły zapisują markup do tymczasowego pliku najpierw, a potem wywołują SavePDF(path), aby zapisać na dysku. ChromePdfRenderer.RenderHtmlAsPdf()IronPDF renderuje string bezpośrednio i zwraca obiekt PdfDocument, który następnie zapisujesz używając SaveAs().
To podejscie obiektowe zapewnia dodatkowa elastycznosc: mozna manipulowac PDF-em (dodawac znaki wodne, łączyc dokumenty, dodawac zabezpieczenia, wyodrebiac tekst) przed zapisaniem — zadna z tych funkcji nie jest czescia dokumentowanej API PDF Duo .NET. Dodatkowe opcje renderowania można znaleźć w dokumentacji dotyczącej konwersji HTML do PDF.
Przykład 2: Konwersja adresów URL do formatu PDF
Przed (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
Module Program
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 Module
Po (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
DuoDimension.HtmlToPdf PDF Duo używa tej samej klasy dla konwersji URL poprzez przekazanie URL do OpenHTML(...) a następnie SavePDF(path).IronPDF używa ChromePdfRenderer z przeznaczoną metodą RenderUrlAsPdf(url), zwracając obiekt PdfDocument.
Kluczową zaletą jest to, że silnik renderowania IronPDF oparty na Chromium zapewnia nowoczesne wsparcie dla CSS3 i JavaScript, podczas gdy materialy dostawcy PDF Duo nie ujawniają, który silnik HTML/CSS jest używany. Dowiedz się więcej o konwersji adresów URL do formatu PDF.
Przykład 3: Łączenie plików PDF
Przed (PDF Duo):
PDF Duo .NET nie zapewnia natywnego API do łączenia PDF. Dokumentowana powierzchnia to tylko zamiana HTML na PDF, więc zespoły, które potrzebowały połączeń, zwykle renderowały każdy PDF za pomocą PDF Duo, a następnie łączyły je za pomocą oddzielnej biblioteki (często iTextSharp 4.x w projektach z ery 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
Po (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
Ten przykład pokazuje fundamentalną różnicę architektoniczną.PDF Duo .NETw ogóle nie ma API scalenia — łączenie w przepływach pracy PDF Duo historycznie oznaczało parowanie go z drugą biblioteką, taką jak iTextSharp 4.x.
IronPDF konsoliduje to w pojedynczą zależność: załaduj każdy PDF jako PdfDocument używając PdfDocument.FromFile(), a następnie użyj statycznej metody PdfDocument.Merge(), aby je połączyć. To zwraca nowy obiekt PdfDocument, który zapisujesz osobno używając SaveAs().
Podejście IronPDF również pozwala manipulować dowolnym z PDF-ów przed łączeniem, dodawać znaki wodne do scalonego wyniku, stosować ustawienia bezpieczeństwa i więcej. Do scałania wielu plików można użyć 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")
Dowiedz się więcej o łączeniu i dzieleniu plików PDF.
Nowe możliwości po migracji
Po migracji do IronPDF zyskujesz możliwości, których PDF Duo po prostu nie jest w stanie zapewnić:
Nagłówki i stopki z numerami stron
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 nie obsługuje nagłówków ani stopek — nie ma odpowiednika tej funkcji.IronPDF zapewnia pełną obsługę HTML/CSS z wbudowanymi symbolami zastępczymi dla treści dynamicznych, takich jak numery stron. Zobacz przewodnik dotyczący nagłówków i stopek.
Znaki wodne
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 nie obsługuje znaków wodnych.IronPDF zapewnia znaki wodne oparte na HTML z pełną obsługą stylów CSS.
Ochrona hasłem
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 nie obsługuje ochrony hasłem ani ustawień zabezpieczeń.
Wyodrębnianie tekstu
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 nie obsługuje wyodrębniania tekstu.
Ważne uwagi dotyczące migracji
Brak opcji układu strony na HtmlToPdf w PDF Duo
DuoDimension.HtmlToPdf nie dokumentuje obiektu ustawień obejmującego rozmiar papieru, orientację, czy marginesy.IronPDF ujawnia je jawnie na 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
Nazewnictwo metod zapisywania
Różne nazwy metod do zapisywania pliku:
// 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")
Ładowanie istniejących PDF-ów
PDF Duo .NET zapisuje tylko PDF-y — nie ma udokumentowanego wywołania "załaduj istniejący PDF". Aby operować na istniejącym PDF-ie, musisz przejść na IronPDF(lub inną bibliotekę):
// 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")
Wejście ciągu HTML
OpenHTML PDF Duo nie dokumentuje wywołania "renderuj ten HTML string"; zespoły najpierw zapisują znacznik w pliku tymczasowym.IronPDF renderuje ciągi bezpośrednio:
// 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")
Porównanie funkcji
| Funkcja | PDF Duo .NET | IronPDF |
|---|---|---|
| HTML do PDF | Tak (silnik nie ujawniony) | Pełna obsługa CSS3, JavaScript |
| URL do pliku PDF | Tak | Pełna wersja z obsługą autoryzacji |
| Łączenie plików PDF | Nie w udokumentowanym API | Tak |
| Nagłówki/stopki | Nie w udokumentowanym API | Pełna obsługa HTML |
| Numery stron | Nie w udokumentowanym API | Wbudowane symbole zastępcze |
| Znaki wodne | Nie w udokumentowanym API | Oparty na HTML |
| Ochrona hasłem | Nie w udokumentowanym API | Pełne opcje bezpieczeństwa |
| Wypełnianie formularzy | Nie w udokumentowanym API | Tak |
| Podpisy cyfrowe | Nie w udokumentowanym API | Tak |
| Ekstrakcja tekstu | Nie w udokumentowanym API | Tak |
| PDF na obrazy | Nie w udokumentowanym API | Tak |
| Obsługa asynchroniczna | Nie w udokumentowanym API | Pełna obsługa async/await |
| .NET Core/5+ | Nie na liście udokumentowanego środowiska uruchomieniowego | Obsługiwane |
Lista kontrolna migracji
Przed migracją
- Znajdź wszystkie odniesienia do PDF Duo w kodzie źródłowym
- Odzwierciedl aktualne ustawienia (rozmiar strony, marginesy itp.)
- Wymień wszystkie używane operacje na plikach PDF
- Zidentyfikuj możliwości wprowadzenia nowych funkcji (nagłówki, znaki wodne, zabezpieczenia)
- Uzyskaj klucz licencyjny IronPDF
Zmiany w pakiecie
- Usuń odwołanie do projektu
PDFDuo.dll(PDF Duo .NET nie jest na NuGet) i usuń dołączony binarny plik - Zainstaluj pakiet NuGet
IronPdf:dotnet add package IronPdf - Zaktualizuj importy namespace z
using DuoDimension;dousing IronPdf;
Zmiany w kodzie
- Dodaj konfigurację klucza licencyjnego podczas uruchamiania
- Zamień
DuoDimension.HtmlToPdfzChromePdfRenderer - Zamień
OpenHTML(path) + SavePDF(path)zRenderHtmlFileAsPdf(path).SaveAs(path) - Zamień objazd z plikiem tymczasowym dla stringów HTML z
RenderHtmlAsPdf(html).SaveAs(path) - Zamień
OpenHTML(url) + SavePDF(path)zRenderUrlAsPdf(url).SaveAs(path) - Zamień każdy zewnętrzny krok scalania z
PdfDocument.Merge() - Ustaw rozmiar strony i marginesy jawnie przez
RenderingOptions(brak odpowiednika w PDF Duo) - Zamień
SavePDF()zSaveAs() - Dla każdego workflow "załaduj istniejący PDF", użyj
PdfDocument.FromFile()(brak odpowiednika w PDF Duo)
Po migracji
- Przeprowadź testy regresji porównujące wynik w formacie PDF
- Sprawdź, czy rozmiary stron i marginesy są zgodne
- Przetestuj z użyciem złożonego kodu HTML/CSS (nowoczesny silnik IronPDF powinien sobie z tym lepiej poradzić)
- Dodaj nowe funkcje (nagłówki, stopki, znaki wodne, zabezpieczenia)
- Aktualizacja dokumentacji

