Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

Jak przeprowadzić migrację z iText do IronPDF w języku C#

Przejście z iText naIronPDFzmienia proces pracy z plikami PDF w środowisku .NET z programowego API wymagającego ręcznego tworzenia obiektów Paragraph, Table i Cell na nowoczesne podejście oparte na HTML z pełną obsługą CSS3 i JavaScript. Niniejszy przewodnik zawiera kompleksową, szczegółową ścieżkę migracji, która eliminuje obawy związane z licencją AGPL oraz konieczność stosowania oddzielnych dodatków pdfHTML dla profesjonalnych programistów .NET.

Dlaczego warto przejść z iText na IronPDF

Pułapka licencji AGPL

iText stwarza poważne ryzyko prawne i biznesowe dla aplikacji komercyjnych, o czym wiele zespołów programistycznych dowiaduje się zbyt późno:

  1. Licencja wirusowa AGPL: Jeśli używasz iText w aplikacji internetowej, licencja AGPL wymaga, abyś udostępnił na zasadach open source CAŁĄ swoją aplikację — nie tylko kod PDF, ale całą bazę kodu. Dla większości komercyjnego oprogramowania jest to rozwiązanie nie do przyjęcia.

  2. Brak licencji wieczystej: iText zrezygnował z licencji wieczystych, wprowadzając obowiązkowe coroczne odnawianie subskrypcji, co zwiększa całkowity koszt posiadania.

  3. Koszt dodatku pdfHTML: Funkcja konwersji HTML na PDF wymaga dodatku pdfHTML, sprzedawanego oddzielnie za dodatkową opłatą oprócz ceny licencji podstawowej.

  4. Złożone audyty licencyjne: Wdrożenia w przedsiębiorstwach wiążą się ze złożonością licencji i ryzykiem audytów, które mogą opóźniać projekty i stwarzać ryzyko prawne.

  5. API wyłącznie programowe: iText wymaga ręcznego tworzenia plików PDF na niskim poziomie za pomocą obiektów Paragraph, Table, Cell — jest to żmudne i podatne na błędy w przypadku złożonych układów.

  6. Ograniczone renderowanie nowoczesnych stron internetowych: Nawet przy użyciu pdfHTML złożone treści CSS iJavaScriptwymagają znacznego dodatkowego wysiłku.

Porównanie iText i IronPDF

Funkcja iText 7 / iTextSharp IronPDF
Licencja AGPL (wirusowa) lub kosztowna subskrypcja Opcja komercyjna, bezterminowa
HTML do PDF Oddzielny dodatek pdfHTML Wbudowany renderer Chromium
Obsługa CSS Podstawy CSS Pełna obsługa CSS3, Flexbox, Grid
JavaScript None Pełna realizacja
Paradygmat API Programowo (akapit, tabela, komórka) Najpierw HTML, potem CSS
Krzywa uczenia się Steep (układ współrzędnych PDF) Przyjazne dla programistów stron internetowych
Ryzyko związane z oprogramowaniem open source Aplikacje internetowe typu open source Brak wymagań dotyczących wirusowości
Model cenowy Tylko w ramach subskrypcji Licencja wieczysta lub subskrypcja

Dla zespołów planujących wdrożenie .NET 10 i C# 14 w latach 2025 i 2026,IronPDFzapewnia przyszłościową podstawę dzięki podejściu "HTML-first", które wykorzystuje umiejętności tworzenia stron internetowych, które Twój zespół już posiada.


Ocena złożoności migracji

Szacowany nakład pracy według funkcji

Funkcja Złożoność migracji
HTML do PDF Bardzo niski
Łączenie plików PDF Low
Tekst i obrazy Low
Tabele Medium
Nagłówki/stopki Medium
Bezpieczeństwo/Szyfrowanie Low

Zmiana paradygmatu

Podstawową zmianą w tej migracji iText jest przejście od programowego tworzenia plików PDF do renderowania opartego na HTML:

iText:    PdfWriter → PdfDocument → Document → Add(Paragraph) → Add(Table)
IronPDF:  ChromePdfRenderer → RenderHtmlAsPdf(htmlString) → SaveAs()

Ta zmiana paradygmatu jest wyzwalająca: zamiast uczyć się modelu obiektowego iText, wykorzystujesz umiejętności HTML i CSS, które programiści stron internetowych już posiadają.


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 pakiecie NuGet

# Remove iText packages
dotnet remove package itext7
dotnet remove package itext7.pdfhtml
dotnet remove package itextsharp

# Install IronPDF
dotnet add package IronPdf
# Remove iText packages
dotnet remove package itext7
dotnet remove package itext7.pdfhtml
dotnet remove package itextsharp

# 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 użycie iText

# Find all iText references
grep -r "using iText\|using iTextSharp" --include="*.cs" .
grep -r "PdfWriter\|PdfDocument\|Document\|Paragraph\|Table\|Cell" --include="*.cs" .
grep -r "HtmlConverter\|ConverterProperties" --include="*.cs" .
# Find all iText references
grep -r "using iText\|using iTextSharp" --include="*.cs" .
grep -r "PdfWriter\|PdfDocument\|Document\|Paragraph\|Table\|Cell" --include="*.cs" .
grep -r "HtmlConverter\|ConverterProperties" --include="*.cs" .
SHELL

Kompletna dokumentacija API

Mapowania klas

Klasa iText 7 Klasa iTextSharp OdpowiednikIronPDF
PdfWriter PdfWriter ChromePdfRenderer
PdfDocument Document PdfDocument
Document Document ChromePdfRenderer.RenderHtmlAsPdf()
Paragraph Paragraph HTML <p>, <h1> itp.
Table PdfPTable HTML <table>
Cell PdfPCell HTML <td>, <th>
Image Image HTML <img>
PdfReader PdfReader PdfDocument.FromFile()
PdfMerger Nie dotyczy PdfDocument.Merge()

Mapowanie przestrzeni nazw

Przestrzeń nazw iText 7 OdpowiednikIronPDF
iText.Kernel.Pdf IronPdf
iText.Layout IronPdf
iText.Layout.Element Użyj elementów HTML
iText.Html2Pdf IronPdf (wbudowane)
iText.IO.Image Użyj HTML <img>
iText.Kernel.Utils IronPdf

Przykłady migracji kodu

Przykład 1: Konwersja HTML do PDF

Przed (iText 7):

// NuGet: Install-Package itext7
using iText.Html2pdf;
using System.IO;

class Program
{
    static void Main()
    {
        string html = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>";
        string outputPath = "output.pdf";

        using (FileStream fs = new FileStream(outputPath, FileMode.Create))
        {
            HtmlConverter.ConvertToPdf(html, fs);
        }
    }
}
// NuGet: Install-Package itext7
using iText.Html2pdf;
using System.IO;

class Program
{
    static void Main()
    {
        string html = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>";
        string outputPath = "output.pdf";

        using (FileStream fs = new FileStream(outputPath, FileMode.Create))
        {
            HtmlConverter.ConvertToPdf(html, fs);
        }
    }
}
Imports iText.Html2pdf
Imports System.IO

Class Program
    Shared Sub Main()
        Dim html As String = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>"
        Dim outputPath As String = "output.pdf"

        Using fs As FileStream = New FileStream(outputPath, FileMode.Create)
            HtmlConverter.ConvertToPdf(html, fs)
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

Po (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim html As String = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>"

        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Podejście iText wymaga oddzielnego pakietu iText.Html2pdf (dodatek pdfHTML, sprzedawany oddzielnie), utworzenia FileStream oraz zawarcia wszystkiego w instrukcjach using w celu prawidłowego usunięcia. Metoda HtmlConverter.ConvertToPdf() zapisuje dane bezpośrednio do strumienia.

PodejścieIronPDFjest prostsze: utwórz ChromePdfRenderer, wywołaj RenderHtmlAsPdf() z ciągiem HTML i wywołaj SaveAs() na wynikowym PdfDocument. Brak oddzielnych pakietów, brak zarządzania strumieniami oraz silnik renderujący Chromium zapewniają doskonałą obsługę CSS3 i JavaScript. Dodatkowe opcje renderowania można znaleźć w dokumentacji dotyczącej konwersji HTML do PDF.

Przykład 2: Scalanie wielu plików PDF

Przed (iText 7):

// NuGet: Install-Package itext7
using iText.Kernel.Pdf;
using iText.Kernel.Utils;
using System.IO;

class Program
{
    static void Main()
    {
        string outputPath = "merged.pdf";
        string[] inputFiles = { "document1.pdf", "document2.pdf", "document3.pdf" };

        using (PdfWriter writer = new PdfWriter(outputPath))
        using (PdfDocument pdfDoc = new PdfDocument(writer))
        {
            PdfMerger merger = new PdfMerger(pdfDoc);

            foreach (string file in inputFiles)
            {
                using (PdfDocument sourcePdf = new PdfDocument(new PdfReader(file)))
                {
                    merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages());
                }
            }
        }
    }
}
// NuGet: Install-Package itext7
using iText.Kernel.Pdf;
using iText.Kernel.Utils;
using System.IO;

class Program
{
    static void Main()
    {
        string outputPath = "merged.pdf";
        string[] inputFiles = { "document1.pdf", "document2.pdf", "document3.pdf" };

        using (PdfWriter writer = new PdfWriter(outputPath))
        using (PdfDocument pdfDoc = new PdfDocument(writer))
        {
            PdfMerger merger = new PdfMerger(pdfDoc);

            foreach (string file in inputFiles)
            {
                using (PdfDocument sourcePdf = new PdfDocument(new PdfReader(file)))
                {
                    merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages());
                }
            }
        }
    }
}
Imports iText.Kernel.Pdf
Imports iText.Kernel.Utils
Imports System.IO

Class Program
    Shared Sub Main()
        Dim outputPath As String = "merged.pdf"
        Dim inputFiles As String() = {"document1.pdf", "document2.pdf", "document3.pdf"}

        Using writer As New PdfWriter(outputPath)
            Using pdfDoc As New PdfDocument(writer)
                Dim merger As New PdfMerger(pdfDoc)

                For Each file As String In inputFiles
                    Using sourcePdf As New PdfDocument(New PdfReader(file))
                        merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages())
                    End Using
                Next
            End Using
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

Po (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdfDocuments = new List<PdfDocument>
        {
            PdfDocument.FromFile("document1.pdf"),
            PdfDocument.FromFile("document2.pdf"),
            PdfDocument.FromFile("document3.pdf")
        };

        var merged = PdfDocument.Merge(pdfDocuments);
        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdfDocuments = new List<PdfDocument>
        {
            PdfDocument.FromFile("document1.pdf"),
            PdfDocument.FromFile("document2.pdf"),
            PdfDocument.FromFile("document3.pdf")
        };

        var merged = PdfDocument.Merge(pdfDocuments);
        merged.SaveAs("merged.pdf");
    }
}
Imports IronPdf
Imports System.Collections.Generic

Class Program
    Shared Sub Main()
        Dim pdfDocuments As New List(Of PdfDocument) From {
            PdfDocument.FromFile("document1.pdf"),
            PdfDocument.FromFile("document2.pdf"),
            PdfDocument.FromFile("document3.pdf")
        }

        Dim merged = PdfDocument.Merge(pdfDocuments)
        merged.SaveAs("merged.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Operacja scalania iText wymaga znacznej ilości kodu szablonowego: utworzenia PdfWriter dla danych wyjściowych, zawarcia go w PdfDocument, utworzenia PdfMerger, a następnie iterowanie przez pliki źródłowe z zagnieżdżonymi instrukcjami using dla każdego PdfDocument i PdfReader. Należy również określić zakresy stron za pomocą merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages()).

IronPDF sprowadza to do trzech kroków: załaduj dokumenty za pomocą PdfDocument.FromFile(), wywołaj statyczną metodę PdfDocument.Merge() z listą i zapisz. Cała operacja scalania staje się czytelna i łatwa w utrzymaniu. Dowiedz się więcej o łączeniu i dzieleniu plików PDF.

Przykład 3: Tworzenie pliku PDF z tekstem i obrazami

Przed (iText 7):

// NuGet: Install-Package itext7
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.IO.Image;

class Program
{
    static void Main()
    {
        string outputPath = "document.pdf";

        using (PdfWriter writer = new PdfWriter(outputPath))
        using (PdfDocument pdf = new PdfDocument(writer))
        using (Document document = new Document(pdf))
        {
            document.Add(new Paragraph("Sample PDF Document"));
            document.Add(new Paragraph("This document contains text and an image."));

            Image img = new Image(ImageDataFactory.Create("image.jpg"));
            img.SetWidth(200);
            document.Add(img);
        }
    }
}
// NuGet: Install-Package itext7
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.IO.Image;

class Program
{
    static void Main()
    {
        string outputPath = "document.pdf";

        using (PdfWriter writer = new PdfWriter(outputPath))
        using (PdfDocument pdf = new PdfDocument(writer))
        using (Document document = new Document(pdf))
        {
            document.Add(new Paragraph("Sample PDF Document"));
            document.Add(new Paragraph("This document contains text and an image."));

            Image img = new Image(ImageDataFactory.Create("image.jpg"));
            img.SetWidth(200);
            document.Add(img);
        }
    }
}
Imports iText.Kernel.Pdf
Imports iText.Layout
Imports iText.Layout.Element
Imports iText.IO.Image

Class Program
    Shared Sub Main()
        Dim outputPath As String = "document.pdf"

        Using writer As New PdfWriter(outputPath),
              pdf As New PdfDocument(writer),
              document As New Document(pdf)

            document.Add(New Paragraph("Sample PDF Document"))
            document.Add(New Paragraph("This document contains text and an image."))

            Dim img As New Image(ImageDataFactory.Create("image.jpg"))
            img.SetWidth(200)
            document.Add(img)
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

Po (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string html = @"
            <h1>Sample PDF Document</h1>
            <p>This document contains text and an image.</p>
            <img src='image.jpg' width='200' />";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("document.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string html = @"
            <h1>Sample PDF Document</h1>
            <p>This document contains text and an image.</p>
            <img src='image.jpg' width='200' />";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("document.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()

        Dim html As String = "
            <h1>Sample PDF Document</h1>
            <p>This document contains text and an image.</p>
            <img src='image.jpg' width='200' />"

        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("document.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Ten przykład najlepiej ilustruje Shift paradygmatu. iText wymaga:

  • Potrójnie zagnieżdżone instrukcje using (PdfWriter, PdfDocument, Document)
  • Tworzenie obiektów Paragraph dla każdego elementu tekstowego za pomocą new Paragraph()
  • Użycie ImageDataFactory.Create() do wczytania obrazów
  • Tworzenie obiektu Image i wywoływanie SetWidth() oddzielnie
  • Wywołanie document.Add() dla każdego elementu

IronPDF używa standardowego kodu HTML: <h1> dla nagłówków, <p> dla akapitów oraz <img> dla obrazów z atrybutem width. Programiści stron internetowych mogą od razu wykorzystać swoje dotychczasowe umiejętności, a projektanci mogą stylizować dokumenty przy użyciu znanego im już CSS.


Ważne uwagi dotyczące migracji

Zmiana paradygmatu: od programowania do HTML-First

Najważniejsza zmiana w tej migracji iText ma charakter koncepcyjny. iText tworzy pliki PDF programowo:

// iText approach
document.Add(new Paragraph("Title")
    .SetTextAlignment(TextAlignment.CENTER)
    .SetFontSize(24)
    .SetBold());

var table = new Table(UnitValue.CreatePercentArray(3)).UseAllAvailableWidth();
table.AddHeaderCell(new Cell().Add(new Paragraph("ID")));
table.AddHeaderCell(new Cell().Add(new Paragraph("Name")));
// ... many more lines
// iText approach
document.Add(new Paragraph("Title")
    .SetTextAlignment(TextAlignment.CENTER)
    .SetFontSize(24)
    .SetBold());

var table = new Table(UnitValue.CreatePercentArray(3)).UseAllAvailableWidth();
table.AddHeaderCell(new Cell().Add(new Paragraph("ID")));
table.AddHeaderCell(new Cell().Add(new Paragraph("Name")));
// ... many more lines
' iText approach
document.Add(New Paragraph("Title") _
    .SetTextAlignment(TextAlignment.CENTER) _
    .SetFontSize(24) _
    .SetBold())

Dim table = New Table(UnitValue.CreatePercentArray(3)).UseAllAvailableWidth()
table.AddHeaderCell(New Cell().Add(New Paragraph("ID")))
table.AddHeaderCell(New Cell().Add(New Paragraph("Name")))
' ... many more lines
$vbLabelText   $csharpLabel

IronPDF wykorzystuje HTML i CSS:

//IronPDFapproach
string html = @"
    <style>
        h1 { text-align: center; font-size: 24px; font-weight: bold; }
        table { width: 100%; border-collapse: collapse; }
        th { background-color: #4CAF50; color: white; padding: 8px; }
    </style>
    <h1>Title</h1>
    <table>
        <tr><th>ID</th><th>Name</th></tr>
    </table>";

var pdf = renderer.RenderHtmlAsPdf(html);
//IronPDFapproach
string html = @"
    <style>
        h1 { text-align: center; font-size: 24px; font-weight: bold; }
        table { width: 100%; border-collapse: collapse; }
        th { background-color: #4CAF50; color: white; padding: 8px; }
    </style>
    <h1>Title</h1>
    <table>
        <tr><th>ID</th><th>Name</th></tr>
    </table>";

var pdf = renderer.RenderHtmlAsPdf(html);
'IronPDFapproach
Dim html As String = "
    <style>
        h1 { text-align: center; font-size: 24px; font-weight: bold; }
        table { width: 100%; border-collapse: collapse; }
        th { background-color: #4CAF50; color: white; padding: 8px; }
    </style>
    <h1>Title</h1>
    <table>
        <tr><th>ID</th><th>Name</th></tr>
    </table>"

Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

Licencja AGPL wyeliminowana

Licencja AGPL firmy iText wymaga udostępnienia całej aplikacji internetowej na zasadach open source lub zakupu kosztownej licencji komercyjnej. Licencja komercyjnaIronPDFpozwala na wdrażanie w oprogramowaniu własnościowym bez wymagań dotyczących licencji wirusowej.

Nie jest wymagany dodatek pdfHTML

iText wymaga oddzielnego dodatku pdfHTML do konwersji HTML na PDF, sprzedawanego za dodatkową opłatą.IronPDFzawiera pełne renderowanie HTML oparte na Chromium w pakiecie podstawowym.

Wzorce zastępowania metod

Wzór iText ZamiennikIronPDF
SetTextAlignment(TextAlignment.CENTER) CSS text-align: center
SetFontSize(24) CSS font-size: 24px
SetBold() CSS font-weight: bold
new Table(3) HTML <table>
AddHeaderCell(new Cell().Add(new Paragraph())) HTML <th>
AddCell(new Cell().Add(new Paragraph())) HTML <td>

Rozwiązywanie problemów

Problem 1: PdfWriter/Wzorzec dokumentu

Problem: Kod wykorzystuje wzorzec zagnieżdżania PdfWriterPdfDocumentDocument.

Rozwiązanie: Zastąp przez ChromePdfRenderer:

// Delete this iText pattern:
// using (var writer = new PdfWriter(outputPath))
// using (var pdfDoc = new PdfDocument(writer))
// using (var document = new Document(pdfDoc))

// Replace with:
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(outputPath);
// Delete this iText pattern:
// using (var writer = new PdfWriter(outputPath))
// using (var pdfDoc = new PdfDocument(writer))
// using (var document = new Document(pdfDoc))

// Replace with:
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(outputPath);
Imports IronPdf

Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs(outputPath)
$vbLabelText   $csharpLabel

Problem 2: Nie znaleziono HtmlConverter

Problem: Kod wykorzystuje iText.Html2pdf.HtmlConverter, co wymaga dodatku pdfHTML.

Rozwiązanie: Wykorzystaj wbudowaną funkcję renderowania HTML w IronPDF:

// iText (requires pdfHTML add-on)
HtmlConverter.ConvertToPdf(html, fileStream);

//IronPDF(built-in)
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(outputPath);
// iText (requires pdfHTML add-on)
HtmlConverter.ConvertToPdf(html, fileStream);

//IronPDF(built-in)
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(outputPath);
' iText (requires pdfHTML add-on)
HtmlConverter.ConvertToPdf(html, fileStream)

' IronPDF(built-in)
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs(outputPath)
$vbLabelText   $csharpLabel

Problem 3: Złożoność PdfMerger

Problem: PdfMerger w iText wymaga zagnieżdżonych czytników i określenia zakresu stron.

Rozwiązanie: Użyj metody statycznego scalania IronPDF:

// iText merger pattern (delete this)
// using (PdfDocument pdfDoc = new PdfDocument(writer))
// {
//     PdfMerger merger = new PdfMerger(pdfDoc);
//     foreach (string file in inputFiles)
//     {
//         using (PdfDocument sourcePdf = new PdfDocument(new PdfReader(file)))
//         {
//             merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages());
//         }
//     }
// }

//IronPDF(simple)
var merged = PdfDocument.Merge(pdfDocuments);
merged.SaveAs("merged.pdf");
// iText merger pattern (delete this)
// using (PdfDocument pdfDoc = new PdfDocument(writer))
// {
//     PdfMerger merger = new PdfMerger(pdfDoc);
//     foreach (string file in inputFiles)
//     {
//         using (PdfDocument sourcePdf = new PdfDocument(new PdfReader(file)))
//         {
//             merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages());
//         }
//     }
// }

//IronPDF(simple)
var merged = PdfDocument.Merge(pdfDocuments);
merged.SaveAs("merged.pdf");
Imports System.Collections.Generic

' iText merger pattern (delete this)
' Using pdfDoc As New PdfDocument(writer)
'     Dim merger As New PdfMerger(pdfDoc)
'     For Each file As String In inputFiles
'         Using sourcePdf As New PdfDocument(New PdfReader(file))
'             merger.Merge(sourcePdf, 1, sourcePdf.GetNumberOfPages())
'         End Using
'     Next
' End Using

' IronPDF(simple)
Dim merged = PdfDocument.Merge(pdfDocuments)
merged.SaveAs("merged.pdf")
$vbLabelText   $csharpLabel

Lista kontrolna migracji

Przed migracją

  • Sporządź spis wszystkich wywołań API iText w kodzie źródłowym
  • Zidentyfikuj programowe wzorce tworzenia plików PDF (akapit, tabela, komórka)
  • Dokument dotyczący korzystania z HtmlConverter (dodatek pdfHTML)
  • Ocena ryzyka związanego z zgodnością z licencją AGPL
  • Uzyskaj klucz licencyjny IronPDF

Migracja kodu

  • Usuń pakiety iText NuGet: dotnet remove package itext7
  • Zainstaluj pakiet IronPdf NuGet: dotnet add package IronPdf
  • Zaktualizuj importy przestrzeni nazw (using iText.*using IronPdf)
  • Zastąp wzorzec Document wzorcem ChromePdfRenderer
  • Przekonwertuj Cell na elementy HTML
  • Zastąp HtmlConverter.ConvertToPdf() przez RenderHtmlAsPdf()
  • Zaktualizuj operacje scalania do PdfDocument.Merge()
  • Dodaj inicjalizację klucza licencyjnego podczas uruchamiania

Testowanie

  • Przetestuj wszystkie ścieżki generowania plików PDF
  • Sprawdź, czy wygląd końcowy odpowiada oczekiwaniom
  • Test z wykorzystaniem złożonej treści HTML/CSS
  • Porównanie wydajności

Po migracji

  • Usuń pliki licencji i odniesienia do iText
  • Aktualizacja dokumentacji
  • Anuluj subskrypcję iText (jeśli dotyczy)
  • Archiwizacja starszego kodu iText

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

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie