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:
-
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.
-
Brak licencji wieczystej: iText zrezygnował z licencji wieczystych, wprowadzając obowiązkowe coroczne odnawianie subskrypcji, co zwiększa całkowity koszt posiadania.
-
Koszt dodatku pdfHTML: Funkcja konwersji HTML na PDF wymaga dodatku pdfHTML, sprzedawanego oddzielnie za dodatkową opłatą oprócz ceny licencji podstawowej.
-
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.
-
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. - 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
- Ś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 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
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 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" .
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
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
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
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
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
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
Ten przykład najlepiej ilustruje Shift paradygmatu. iText wymaga:
- Potrójnie zagnieżdżone instrukcje
using(PdfWriter,PdfDocument,Document) - Tworzenie obiektów
Paragraphdla każdego elementu tekstowego za pomocąnew Paragraph() - Użycie
ImageDataFactory.Create()do wczytania obrazów - Tworzenie obiektu
Imagei wywoływanieSetWidth()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
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)
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 PdfWriter → PdfDocument → Document.
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)
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)
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")
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
DocumentwzorcemChromePdfRenderer - Przekonwertuj
Cellna elementy HTML - Zastąp
HtmlConverter.ConvertToPdf()przezRenderHtmlAsPdf() - 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

