Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

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:

  1. Dostawca i pochodzenie: Wydawany przez DuoDimension Software (duodimension.com), mały ISV bez publicznej mapy drogowej i bez repozytorium GitHub.

  2. 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.

  3. Efektywnie porzucony: Ostatnia publiczna wersja to v2.4, datowana na 10 grudnia 2010 — około 15 lat bez nowej wersji.

  4. Waska dokumentowana powierzchnia: Publiczne API to zasadniczo DuoDimension.HtmlToPdf z OpenHTML(...) i SavePDF(...). Nie ma udokumentowanego natywnego API dla znakowania wodnego, szyfrowania, podpisywania, wypełniania formularzy, wydobywania tekstu czy scalania PDF.

  5. 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.

  6. 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

  1. Środowisko .NET: .NET Framework 4.6.2+ lub .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Dostęp do NuGet: Możliwość instalowania pakietów NuGet
  3. 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
SHELL

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"
$vbLabelText   $csharpLabel

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" .
SHELL

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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()
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

Ł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")
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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; do using IronPdf;

Zmiany w kodzie

  • Dodaj konfigurację klucza licencyjnego podczas uruchamiania
  • Zamień DuoDimension.HtmlToPdf z ChromePdfRenderer
  • Zamień OpenHTML(path) + SavePDF(path) z RenderHtmlFileAsPdf(path).SaveAs(path)
  • Zamień objazd z plikiem tymczasowym dla stringów HTML z RenderHtmlAsPdf(html).SaveAs(path)
  • Zamień OpenHTML(url) + SavePDF(path) z RenderUrlAsPdf(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() z SaveAs()
  • 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

Zwróć uwagęPDF Duo .NET jest zarejestrowanym znakiem towarowym jego właściciela. Ta strona nie jest związana ani popierana przez DuoDimension. Wszystkie nazwy produktów, logo i marki są własnością ich odpowiednich właścicieli. Porównania mają charakter wyłącznie informacyjny i odzwierciedlają informacje dostępne publicznie w momencie pisania.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie