Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

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 PDFdoIronPDF— 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 oparte na płótnie z pozycjonowaniem współrzędnych (canvas.DrawString(x, y, text)), podczas gdyIronPDFwykorzystuje HTML/CSS do tworzenia 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 licencyjnyIronPDF(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" .
SHELL

Zmiany wymagające dostosowania

Zmiana BitMiracle Docotic PDF IronPDF Wpływ
Renderowanie HTML Wymagany jest dodatek HtmlToPdf Wbudowane Usuń pakiet dodatków
Indeksowanie stron 0-based (Pages[0]) 0-based (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
SHELL

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;
using BitMiracle.Docotic.Pdf.HtmlToPdf;

// Add this
using IronPdf;
// Remove these
using BitMiracle.Docotic.Pdf;
using BitMiracle.Docotic.Pdf.Layout;
using BitMiracle.Docotic.Pdf.HtmlToPdf;

// Add this
using IronPdf;
Imports IronPdf
$vbLabelText   $csharpLabel

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

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 HtmlConverter.Create(html).ToPdf() renderer.RenderHtmlAsPdf(html)
Plik HTML do PDF HtmlConverter.Create(new Uri(filePath)).ToPdf() renderer.RenderHtmlFileAsPdf(path)
URL do pliku PDF HtmlConverter.Create(new Uri(url)).ToPdf() renderer.RenderUrlAsPdf(url)
Ustaw rozmiar strony options.PageSize = PageSize.A4 renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
Ustaw marginesy options.PageMargins = new Margins(20) renderer.RenderingOptions.MarginTop = 20

Operacje scalania i dzielenia

Zadanie BitMiracle Docotic PDF IronPDF
Połącz dokumenty doc1.Append(doc2) 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 bardzoIronPDFułatwia pracę.

Wdrożenie BitMiracle Docotic PDF:

// NuGet: Install-Package Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;

class Program
{
    static void Main()
    {
        using (var pdf = new PdfDocument())
        {
            string html = "<html><body><h1>Hello World</h1><p>This is HTML do PDF conversion.</p></body></html>";

            pdf.CreatePage(html);
            pdf.Save("output.pdf");
        }

        Console.WriteLine("PDF created successfully");
    }
}
// NuGet: Install-Package Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;

class Program
{
    static void Main()
    {
        using (var pdf = new PdfDocument())
        {
            string html = "<html><body><h1>Hello World</h1><p>This is HTML do PDF conversion.</p></body></html>";

            pdf.CreatePage(html);
            pdf.Save("output.pdf");
        }

        Console.WriteLine("PDF created successfully");
    }
}
Imports BitMiracle.Docotic.Pdf
Imports System

Class Program
    Shared Sub Main()
        Using pdf As New PdfDocument()
            Dim html As String = "<html><body><h1>Hello World</h1><p>This is HTML do PDF conversion.</p></body></html>"

            pdf.CreatePage(html)
            pdf.Save("output.pdf")
        End Using

        Console.WriteLine("PDF created successfully")
    End Sub
End Class
$vbLabelText   $csharpLabel

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

IronPDF eliminuje wymóg stosowania instrukcji using i udostępnia dedykowaną klasę ChromePdfRenderer, która wyraźnie wskazuje na możliwość renderowania opartego na silniku 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 Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;

class Program
{
    static void Main()
    {
        using (var pdf1 = new PdfDocument("document1.pdf"))
        using (var pdf2 = new PdfDocument("document2.pdf"))
        {
            pdf1.Append(pdf2);
            pdf1.Save("merged.pdf");
        }

        Console.WriteLine("PDFs merged successfully");
    }
}
// NuGet: Install-Package Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;

class Program
{
    static void Main()
    {
        using (var pdf1 = new PdfDocument("document1.pdf"))
        using (var pdf2 = new PdfDocument("document2.pdf"))
        {
            pdf1.Append(pdf2);
            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"), pdf2 As New PdfDocument("document2.pdf")
            pdf1.Append(pdf2)
            pdf1.Save("merged.pdf")
        End Using

        Console.WriteLine("PDFs merged successfully")
    End Sub
End Class
$vbLabelText   $csharpLabel

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

Statyczna metoda Merge bibliotekiIronPDFakceptuje bezpośrednio wiele dokumentów, zapewniając bardziej przejrzysty interfejs API niż iteracyjny wzorzec Append. Aby uzyskać więcej opcji, zapoznaj się z dokumentacją dotyczącą scalania plików PDF.

Wyodrębnianie tekstu

Wdrożenie BitMiracle Docotic PDF:

// NuGet: Install-Package 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 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

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

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

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

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

IronPDF obsługuje tokeny zastępcze, takie jak {page} i {total-pages}, służące 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!")
$vbLabelText   $csharpLabel

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

Indeksowanie tej samej strony

Obie biblioteki używają indeksowania od 0 (Pages[0] to pierwsza strona) — nie trzeba zmieniać kodu dostępu do stron.

Nie wymaga utylizacji

IronPDF nie wymaga instrukcji using do zarządzania pamięcią, co upraszcza 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
$vbLabelText   $csharpLabel

Obsługa asynchroniczna

Dodatek HtmlToPdf firmyBitMiracle Docotic PDFwymaga stosowania wzorców asynchronicznych we wszystkich miejscach.IronPDFobsł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)
$vbLabelText   $csharpLabel

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.Stream, "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.Stream, "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.Stream, "application/pdf", "report.pdf")
    End Function
End Class
$vbLabelText   $csharpLabel

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 wIronPDFmoż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

Zabezpieczenie infrastruktury PDF na przyszłość

W obliczu zbliżającej się premiery .NET 10 i wprowadzenia nowych funkcji językowych w C# 14, wybór biblioteki PDF o ujednoliconej architekturze upraszcza zarządzanie zależnościami i zapewnia spójną dostępność funkcji. PodejścieIronPDFoparte na jednym pakiecie oznacza, że nie będziesz musiał śledzić zgodności wielu wersji dodatków w miarę rozszerzania się projektów w latach 2025 i 2026.

Dodatkowe zasoby


Przejście zBitMiracle Docotic PDFnaIronPDFeliminuje 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.

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