Jak przeprowadzić migrację z BitMiracle Docotic PDF do IronPDF w języku C#
BitMiracle Docotic PDF to ceniona biblioteka .NET do obsługi plików PDF, znana ze swojej architektury opartej w 100% na kodzie zarządzanym oraz rozbudowanych możliwości programowej manipulacji plikami PDF. Jednak jego modułowa struktura dodatków — wymagająca oddzielnych pakietów do konwersji HTML na PDF, funkcji układu i innych funkcji — zwiększa złożoność zarządzania projektami i licencjonowania. Ten kompleksowy przewodnik przedstawia krok po kroku ścieżkę migracji zBitMiracle Docotic PDFdo IronPDF— ujednoliconej biblioteki .NET do obsługi plików PDF z wbudowanym renderowaniem HTML opartym na Chromium oraz wszystkimi funkcjami zawartymi w jednym pakiecie NuGet.
Dlaczego warto przejść zBitMiracle Docotic PDFna IronPDF?
ChociażBitMiracle Docotic PDFoferuje solidne funkcje manipulacji plikami PDF, kilka czynników skłania zespoły programistów do poszukiwania alternatyw o bardziej uproszczonej architekturze.
Porównanie architektury pakietów
BitMiracle Docotic PDF wykorzystuje modułowe podejście oparte na dodatkach, które wymaga wielu pakietów w celu uzyskania pełnej funkcjonalności:
| Aspekt | BitMiracle Docotic PDF | IronPDF |
|---|---|---|
| HTML do PDF | Wymaga oddzielnego dodatku (HtmlToPdf) | Wbudowana funkcja podstawowa |
| Struktura pakietu | Podstawowa wersja + wiele dodatków | Pojedynczy pakiet NuGet |
| Model licencyjny | Licencjonowanie poszczególnych dodatków | Wszystkie funkcje w zestawie |
| Złożoność API | Oddzielne przestrzenie nazw dla każdego dodatku | Ujednolicony interfejs API |
| Silnik HTML | Chromium (poprzez dodatek) | Chromium (wbudowane) |
| Wielkość społeczności | Mniejsze | Więcej zasobów |
| Dokumentacja | Informacje techniczne | Obszerne samouczki |
Równowaga funkcji
Obie biblioteki obsługują kompleksową funkcjonalność PDF:
| Funkcja | BitMiracle Docotic PDF | IronPDF |
|---|---|---|
| Utwórz plik PDF od podstaw | ✅ | ✅ |
| HTML do PDF | ✅(wymagany dodatek) | ✅(wbudowane) |
| URL do pliku PDF | ✅(wymagany dodatek) | ✅(wbudowane) |
| Manipulacja plikami PDF | ✅ | ✅ |
| Wyodrębnianie tekstu | ✅ | ✅ |
| Scal/Podziel | ✅ | ✅ |
| Podpisy cyfrowe | ✅ | ✅ |
| Szyfrowanie | ✅ | ✅ |
| Wypełnianie formularzy | ✅ | ✅ |
| Zgodność z PDF/A | ✅ | ✅ |
Kluczowe różnice w podejściu
BitMiracle Docotic PDF wykorzystuje rysowanie bazowane na płótnie z pozycjonowaniem współrzędnych (canvas.DrawString(x, y, text)), podczas gdy IronPDF korzysta z HTML/CSS do układu i pozycjonowania. Stanowi Shift paradygmatu, który upraszcza tworzenie treści dla programistów zaznajomionych z technologiami internetowymi.
Przygotowania przed migracją
Wymagania wstępne
Upewnij się, że Twoje środowisko spełnia następujące wymagania:
- .NET Framework 4.6.2+ lub .NET Core 3.1 / .NET 5-9
- Visual Studio 2019+ lub VS Code z rozszerzeniem C#
- Dostęp do menedżera pakietów NuGet
- Klucz licencyjny IronPDF(bezpłatna wersja próbna dostępna na stronie ironpdf.com)
Audyt wykorzystania plików PDF przez BitMiracle Docotic
Uruchom poniższe polecenia w katalogu rozwiązania, aby zidentyfikować wszystkie odwołania do Docotic.PDF:
# Find all Docotic.Pdf usages in your codebase
grep -r "using BitMiracle.Docotic" --include="*.cs" .
grep -r "PdfDocument\|PdfPage\|PdfCanvas" --include="*.cs" .
# Find NuGet package references
grep -r "Docotic.Pdf" --include="*.csproj" .
# Find all Docotic.Pdf usages in your codebase
grep -r "using BitMiracle.Docotic" --include="*.cs" .
grep -r "PdfDocument\|PdfPage\|PdfCanvas" --include="*.cs" .
# Find NuGet package references
grep -r "Docotic.Pdf" --include="*.csproj" .
Zmiany wymagające dostosowania
| Zmiana | BitMiracle Docotic PDF | IronPDF | Wpływ |
|---|---|---|---|
| Renderowanie HTML | Wymagany jest dodatek HtmlToPdf | Wbudowane | Usuń pakiet dodatków |
| Indeksowanie stron | Bazowane na 0 (Pages[0]) |
Bazowane na 0 (Pages[0]) |
Nie ma potrzeby wprowadzania zmian |
| Układ współrzędnych | Początek w lewym dolnym rogu | Struktura HTML/CSS | Użyj CSS do pozycjonowania |
| Rysowanie na płótnie | PdfCanvas.DrawText() |
Znaczniki HTML | Zmiana paradygmatu |
| Wyodrębnianie tekstu | page.GetText() |
pdf.ExtractAllText() |
Zmiana nazwy metody |
| Ładowanie dokumentów | new PdfDocument(path) |
PdfDocument.FromFile(path) |
Konstruktor → metoda statyczna |
| Zapisywanie | document.Save(path) |
pdf.SaveAs(path) |
Zmiana nazwy metody |
| Utylizacja | IDisposable wzorzec |
Nie jest wymagane | Prostsze zarządzanie zasobami |
Proces migracji krok po kroku
Krok 1: Zaktualizuj pakiety NuGet
Usuń pakietyBitMiracle Docotic PDFi zainstaluj IronPDF:
# Remove Docotic.Pdf packages
dotnet remove package BitMiracle.Docotic.Pdf
dotnet remove package BitMiracle.Docotic.Pdf.HtmlToPdf
dotnet remove package BitMiracle.Docotic.Pdf.Layout
# Install IronPDF
dotnet add package IronPdf
# Remove Docotic.Pdf packages
dotnet remove package BitMiracle.Docotic.Pdf
dotnet remove package BitMiracle.Docotic.Pdf.HtmlToPdf
dotnet remove package BitMiracle.Docotic.Pdf.Layout
# Install IronPDF
dotnet add package IronPdf
Krok 2: Aktualizacja odniesień do przestrzeni nazw
Zastąp nazwy przestrzeni nazwBitMiracle Docotic PDFnazwami IronPDF:
// Remove these
using BitMiracle.Docotic.Pdf;
using BitMiracle.Docotic.Pdf.Layout;
// HtmlConverter from the BitMiracle.Docotic.Pdf.HtmlToPdf NuGet package
// also lives in the BitMiracle.Docotic.Pdf namespace (no extra using needed).
// Add this
using IronPdf;
// Remove these
using BitMiracle.Docotic.Pdf;
using BitMiracle.Docotic.Pdf.Layout;
// HtmlConverter from the BitMiracle.Docotic.Pdf.HtmlToPdf NuGet package
// also lives in the BitMiracle.Docotic.Pdf namespace (no extra using needed).
// Add this
using IronPdf;
Imports IronPdf
Krok 3: Skonfiguruj licencję
// Add at application startup (Program.cs or Global.asax)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Global.asax)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Global.asax)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Kompletna dokumentacja API
Operacje na dokumentach
| Zadanie | BitMiracle Docotic PDF | IronPDF |
|---|---|---|
| Utwórz pusty dokument | new PdfDocument() |
new PdfDocument() |
| Wczytaj z pliku | new PdfDocument(path) |
PdfDocument.FromFile(path) |
| Wczytaj ze strumienia | PdfDocument.Load(stream) |
PdfDocument.FromStream(stream) |
| Wczytaj z bajtów | PdfDocument.Load(bytes) |
PdfDocument.FromBinaryData(bytes) |
| Zapisz do pliku | document.Save(path) |
pdf.SaveAs(path) |
| Sprawdź liczbę stron | document.PageCount |
pdf.PageCount |
| Zamknij/Usuń | document.Dispose() |
Nie jest wymagane |
Konwersja HTML do PDF
| Zadanie | BitMiracle Docotic PDF(dodatek HtmlToPdf) | IronPDF |
|---|---|---|
| Ciąg znaków HTML do pliku PDF | await converter.CreatePdfFromStringAsync(html) |
renderer.RenderHtmlAsPdf(html) |
| Plik HTML do PDF | await converter.CreatePdfAsync(filePath) |
renderer.RenderHtmlFileAsPdf(path) |
| URL do pliku PDF | await converter.CreatePdfAsync(new Uri(url)) |
renderer.RenderUrlAsPdf(url) |
| Ustaw rozmiar strony | options.Page.SetSize(PdfPaperSize.A4) |
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4 |
| Ustaw marginesy | options.Page.MarginTop = 20 (itd.) |
renderer.RenderingOptions.MarginTop = 20 |
Operacje scałania i dzielenia
| Zadanie | BitMiracle Docotic PDF | IronPDF |
|---|---|---|
| Połącz dokumenty | doc1.Append("file.pdf") (ścieżka/Strumień/bajty) |
PdfDocument.Merge(pdf1, pdf2) |
| Podziel dokument | document.CopyPage(index) do nowego dokumentu |
pdf.CopyPages(start, end) |
Przykłady migracji kodu
Konwersja HTML do PDF
Najczęstsza operacja pokazuje, jak bardzo IronPDF ułatwia pracę.
Wdrożenie BitMiracle Docotic PDF:
// NuGet: Install-Package BitMiracle.Docotic.Pdf
// NuGet: Install-Package BitMiracle.Docotic.Pdf.HtmlToPdf (separate add-on required)
using BitMiracle.Docotic.Pdf;
using System;
using System.Threading.Tasks;
class Program
{
static async Zadanie Main()
{
// HtmlConverter is async-only and downloads Chromium on first use
using var converter = await HtmlConverter.CreateAsync();
string html = "<html><body><h1>Hello World</h1><p>This is HTML do PDF conversion.</p></body></html>";
using var pdf = await converter.CreatePdfFromStringAsync(html);
pdf.Save("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
// NuGet: Install-Package BitMiracle.Docotic.Pdf
// NuGet: Install-Package BitMiracle.Docotic.Pdf.HtmlToPdf (separate add-on required)
using BitMiracle.Docotic.Pdf;
using System;
using System.Threading.Tasks;
class Program
{
static async Zadanie Main()
{
// HtmlConverter is async-only and downloads Chromium on first use
using var converter = await HtmlConverter.CreateAsync();
string html = "<html><body><h1>Hello World</h1><p>This is HTML do PDF conversion.</p></body></html>";
using var pdf = await converter.CreatePdfFromStringAsync(html);
pdf.Save("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
Imports BitMiracle.Docotic.Pdf
Imports System
Imports System.Threading.Tasks
Module Program
Async Function Main() As Task
' HtmlConverter is async-only and downloads Chromium on first use
Using converter = Await HtmlConverter.CreateAsync()
Dim html As String = "<html><body><h1>Hello World</h1><p>This is HTML to PDF conversion.</p></body></html>"
Using pdf = Await converter.CreatePdfFromStringAsync(html)
pdf.Save("output.pdf")
End Using
Console.WriteLine("PDF created successfully")
End Using
End Function
End Module
Wdrożenie IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1><p>This is HTML do PDF conversion.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
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();
string html = "<html><body><h1>Hello World</h1><p>This is HTML do PDF conversion.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim html As String = "<html><body><h1>Hello World</h1><p>This is HTML do PDF conversion.</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF created successfully")
End Sub
End Class
IronPDF eliminuje wymóg instrukcji using i zapewnia dedykowaną klasę ChromePdfRenderer, która jasno wskazuje na jego zdolność renderowania bazowaną na Chromium. Aby uzyskać więcej opcji konwersji HTML, zapoznaj się z dokumentacją dotyczącą konwersji HTML do PDF.
Łączenie wielu plików PDF
Wdrożenie BitMiracle Docotic PDF:
// NuGet: Install-Package BitMiracle.Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;
class Program
{
static void Main()
{
using (var pdf1 = new PdfDocument("document1.pdf"))
{
// PdfDocument.Append accepts a file path, Stream, or byte[] —
// not another PdfDocument instance.
pdf1.Append("document2.pdf");
pdf1.Save("merged.pdf");
}
Console.WriteLine("PDFs merged successfully");
}
}
// NuGet: Install-Package BitMiracle.Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;
class Program
{
static void Main()
{
using (var pdf1 = new PdfDocument("document1.pdf"))
{
// PdfDocument.Append accepts a file path, Stream, or byte[] —
// not another PdfDocument instance.
pdf1.Append("document2.pdf");
pdf1.Save("merged.pdf");
}
Console.WriteLine("PDFs merged successfully");
}
}
Imports BitMiracle.Docotic.Pdf
Imports System
Class Program
Shared Sub Main()
Using pdf1 As New PdfDocument("document1.pdf")
' PdfDocument.Append accepts a file path, Stream, or byte[] —
' not another PdfDocument instance.
pdf1.Append("document2.pdf")
pdf1.Save("merged.pdf")
End Using
Console.WriteLine("PDFs merged successfully")
End Sub
End Class
Wdrożenie IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });
merged.SaveAs("merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });
merged.SaveAs("merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}
Imports IronPdf
Imports System
Imports System.Collections.Generic
Module Program
Sub Main()
Dim pdf1 As PdfDocument = PdfDocument.FromFile("document1.pdf")
Dim pdf2 As PdfDocument = PdfDocument.FromFile("document2.pdf")
Dim merged As PdfDocument = PdfDocument.Merge(New List(Of PdfDocument) From {pdf1, pdf2})
merged.SaveAs("merged.pdf")
Console.WriteLine("PDFs merged successfully")
End Sub
End Module
Statyczna metoda MergeIronPDF akceptuje bezpośrednio wiele dokumentów, zapewniając czystsze API niż iteracyjny wzorzec Append. Aby uzyskać więcej opcji, zapoznaj się z dokumentacją dotyczącą scałania plików PDF.
Wyodrębnianie tekstu
Wdrożenie BitMiracle Docotic PDF:
// NuGet: Install-Package BitMiracle.Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;
class Program
{
static void Main()
{
using (var pdf = new PdfDocument("document.pdf"))
{
string allText = "";
foreach (var page in pdf.Pages)
{
allText += page.GetText();
}
Console.WriteLine("Extracted text:");
Console.WriteLine(allText);
}
}
}
// NuGet: Install-Package BitMiracle.Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;
class Program
{
static void Main()
{
using (var pdf = new PdfDocument("document.pdf"))
{
string allText = "";
foreach (var page in pdf.Pages)
{
allText += page.GetText();
}
Console.WriteLine("Extracted text:");
Console.WriteLine(allText);
}
}
}
Imports BitMiracle.Docotic.Pdf
Imports System
Class Program
Shared Sub Main()
Using pdf As New PdfDocument("document.pdf")
Dim allText As String = ""
For Each page In pdf.Pages
allText &= page.GetText()
Next
Console.WriteLine("Extracted text:")
Console.WriteLine(allText)
End Using
End Sub
End Class
Wdrożenie IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
string allText = pdf.ExtractAllText();
Console.WriteLine("Extracted text:");
Console.WriteLine(allText);
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
string allText = pdf.ExtractAllText();
Console.WriteLine("Extracted text:");
Console.WriteLine(allText);
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim pdf = PdfDocument.FromFile("document.pdf")
Dim allText As String = pdf.ExtractAllText()
Console.WriteLine("Extracted text:")
Console.WriteLine(allText)
End Sub
End Class
IronPDF redukuje proces wyodrębniania tekstu z wielowierszowej pętli do pojedynczego wywołania metody. Aby uzyskać więcej opcji ekstrakcji, zapoznaj się z dokumentacją dotyczącą ekstrakcji tekstu.
Ochrona hasłem i szyfrowanie
Wdrożenie IronPDF:
using IronPdf;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Document</h1>");
// Set security
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SaveAs("protected.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Document</h1>");
// Set security
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SaveAs("protected.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Document</h1>")
' Set security
pdf.SecuritySettings.UserPassword = "userPassword"
pdf.SecuritySettings.OwnerPassword = "ownerPassword"
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SaveAs("protected.pdf")
Aby uzyskać informacje na temat kompleksowych opcji bezpieczeństwa, zapoznaj się z dokumentacją dotyczącą szyfrowania.
Nagłówki i stopki
Wdrożenie IronPDF:
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-size:12px;'>
Company Header - Confidential
</div>",
DrawDividerLine = true,
MaxHeight = 30
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-size:10px;'>
Page {page} of {total-pages}
</div>",
DrawDividerLine = true,
MaxHeight = 25
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Document Content</h1>");
pdf.SaveAs("with_headers.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-size:12px;'>
Company Header - Confidential
</div>",
DrawDividerLine = true,
MaxHeight = 30
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-size:10px;'>
Page {page} of {total-pages}
</div>",
DrawDividerLine = true,
MaxHeight = 25
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Document Content</h1>");
pdf.SaveAs("with_headers.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
.HtmlFragment = "
<div style='text-align:center; font-size:12px;'>
Company Header - Confidential
</div>",
.DrawDividerLine = True,
.MaxHeight = 30
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = "
<div style='text-align:center; font-size:10px;'>
Page {page} of {total-pages}
</div>",
.DrawDividerLine = True,
.MaxHeight = 25
}
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Document Content</h1>")
pdf.SaveAs("with_headers.pdf")
IronPDF obsługuje tokeny zastępcze jak {page} i {total-pages} do dynamicznego numerowania stron. Aby uzyskać więcej opcji, zapoznaj się z dokumentacją dotyczącą nagłówków i stopek.
Ważne uwagi dotyczące migracji
Przejście z Canvas na HTML Shift
Podejście do rysowania oparte na płótnie wBitMiracle Docotic PDFmusi zostać przekonwertowane na HTML z pozycjonowaniem CSS:
Wzór pliku PDF BitMiracle Docotic:
var canvas = pdfPage.Canvas;
canvas.DrawString(50, 50, "Hello, World!");
var canvas = pdfPage.Canvas;
canvas.DrawString(50, 50, "Hello, World!");
Dim canvas = pdfPage.Canvas
canvas.DrawString(50, 50, "Hello, World!")
Wzór IronPDF:
var html = "<div style='position:absolute; left:50px; top:50px;'>Hello, World!</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
var html = "<div style='position:absolute; left:50px; top:50px;'>Hello, World!</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
Dim html As String = "<div style='position:absolute; left:50px; top:50px;'>Hello, World!</div>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
Indeksowanie tej samej strony
Obie biblioteki używają indeksowania bazowanego na 0 (Pages[0] to pierwsza strona) - nie ma potrzeby zmian w kodzie dostępu do stron.
Nie wymaga utylizacji
IronPDF nie wymaga instrukcji using do zarządzania pamięcią, upraszczając strukturę kodu:
//BitMiracle Docotic PDF- disposal required
using (var pdf = new PdfDocument("input.pdf"))
{
// operations
}
//IronPDF- disposal optional
var pdf = PdfDocument.FromFile("input.pdf");
// operations - no using statement needed
//BitMiracle Docotic PDF- disposal required
using (var pdf = new PdfDocument("input.pdf"))
{
// operations
}
//IronPDF- disposal optional
var pdf = PdfDocument.FromFile("input.pdf");
// operations - no using statement needed
Imports BitMiracle.Docotic.Pdf
' BitMiracle Docotic PDF - disposal required
Using pdf As New PdfDocument("input.pdf")
' operations
End Using
' IronPDF - disposal optional
Dim pdf = PdfDocument.FromFile("input.pdf")
' operations - no using statement needed
Obsługa asynchroniczna
Dodatek HtmlToPdf firmyBitMiracle Docotic PDFwymaga stosowania wzorców asynchronicznych we wszystkich miejscach.IronPDF obsługuje zarówno metody synchroniczne, jak i asynchroniczne:
// Synchronous
var pdf = renderer.RenderHtmlAsPdf(html);
// Asynchronous
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
// Synchronous
var pdf = renderer.RenderHtmlAsPdf(html);
// Asynchronous
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
' Synchronous
Dim pdf = renderer.RenderHtmlAsPdf(html)
' Asynchronous
Dim pdf = Await renderer.RenderHtmlAsPdfAsync(html)
Integracja z ASP.NET Core.NET Core
Wzór IronPDF:
[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
[HttpGet("generate")]
public IActionResult GeneratePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
[HttpGet("generate-async")]
public async Task<IActionResult> GeneratePdfAsync()
{
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
}
[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
[HttpGet("generate")]
public IActionResult GeneratePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
[HttpGet("generate-async")]
public async Task<IActionResult> GeneratePdfAsync()
{
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
}
Imports Microsoft.AspNetCore.Mvc
<ApiController>
<Route("[controller]")>
Public Class PdfController
Inherits ControllerBase
<HttpGet("generate")>
Public Function GeneratePdf() As IActionResult
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>")
Return File(pdf.BinaryData, "application/pdf", "report.pdf")
End Function
<HttpGet("generate-async")>
Public Async Function GeneratePdfAsync() As Task(Of IActionResult)
Dim renderer = New ChromePdfRenderer()
Dim pdf = Await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>")
Return File(pdf.BinaryData, "application/pdf", "report.pdf")
End Function
End Class
Lista kontrolna po migracji
Po zakończeniu migracji kodu sprawdź, czy:
- Uruchom wszystkie testy jednostkowe, aby sprawdzić, czy generowanie plików PDF działa poprawnie
- Porównaj jakość wydruku PDF (silnik Chromium w IronPDF może renderować nieco inaczej — zazwyczaj lepiej)
- Sprawdź dokładność wyodrębniania tekstu
- Testowanie funkcji wypełniania formularzy
- W razie potrzeby sprawdź poprawność podpisów cyfrowych
- Testy wydajności operacji wsadowych
- Przetestuj we wszystkich środowiskach docelowych
- Aktualizacja potoków CI/CD
- Usuń pliki licencji Docotic.PDF
Dodatkowe zasoby
- Dokumentacja IronPDF
- Samouczki dotyczące konwersji HTML do PDF
- Dokumentacja API
- Pakiet NuGet
- Opcje licencyjne
Przejście zBitMiracle Docotic PDFna IronPDF eliminuje złożoność zarządzania wieloma pakietami dodatków, zapewniając jednocześnie te same możliwości renderowania HTML oparte na Chromium. Przejście od rysowania na płótnie do pozycjonowania za pomocą HTML/CSS wykorzystuje umiejętności tworzenia stron internetowych, które posiada już większość programistów .NET, co skutkuje łatwiejszym w utrzymaniu kodem generującym pliki PDF.

