Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

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

HiQPdf to komercyjna biblioteka do konwersji HTML na PDF, która ma kilka istotnych ograniczeń wpływających na aplikacje produkcyjne:

  1. Ograniczona wersja "Free": Wersja bezpłatna nakłada limit 3 stron z uciążliwymi znakami wodnymi — w zasadzie nie nadaje się do zadań produkcyjnych wymagających generowania kompletnych dokumentów.

  2. Starszy silnik WebKit:HiQPdfwykorzystuje starszy silnik renderujący oparty na WebKit, który ma trudności z obsługą nowoczesnych frameworków JavaScript, takich jak React, Angular i Vue.

  3. Niejasna obsługa .NET Core: Dokumentacja nie wyjaśnia jednoznacznie obsługi .NET Core / .NET 5+, co powoduje niepewność w zakresie tworzenia nowoczesnych aplikacji.

  4. Rozdrobnione pakiety: Liczne pakiety NuGet dla różnych platform (HiQPdf, HiQPdf.Free, HiQPdf.NetCore, HiQPdf.NetCore.x64, HiQPdf.Client) komplikują zarządzanie zależnościami.

  5. Złożony interfejs API: Wymaga rozbudowanej konfiguracji poprzez łańcuchy właściwości Document, Header, Footer zamiast płynnych, intuicyjnych metod.

  6. Ograniczona obsługa JavaScript: Silnik WebKit ma trudności z renderowaniem treści generowanych przez nowoczesne frameworki JavaScript oraz złożonych układów dynamicznych.

PorównanieHiQPdfi IronPDF

Aspekt HiQPdf IronPDF
Silnik renderujący Oparte na WebKit (starsze) Nowoczesny Chromium
Poziom bezpłatny Limit 3 stron + znak wodny 30-dniowy okres próbny
Obsługa nowoczesnego JS Ograniczone Pełna (React, Angular, Vue)
Obsługa .NET Core/5+ Potrzebnych jest kilka pakietów Pojedynczy, ujednolicony pakiet
Projektowanie API Złożone łańcuchy właściwości Przejrzyste i płynne API
Obsługa CSS3 Częściowe Obsługiwane
Dokumentacja Fragmentaryczny Kompleksowe
Pakiet NuGet Wiele wariantów Pojedynczy pakiet

Dla zespołów planujących wdrożenie .NET 10 i C# 14 w latach 2025 i 2026,IronPDFzapewnia przyszłościową podstawę z udokumentówaną obsługą najnowszych wersji .NET oraz nowoczesnym silnikiem renderującym Chromium.


Ocena złożoności migracji

Szacowany nakład pracy według funkcji

Funkcja Złożoność migracji
HTML do PDF Bardzo niski
URL do pliku PDF Bardzo niski
Łączenie plików PDF Low
Nagłówki/stopki Medium
Rozmiar strony/marginesy Low
TriggerMode/Delays Low

Zmiana paradygmatu

Podstawową zmianą w tej migracjiHiQPdfjest Shift od konfiguracji łańcucha właściwości do opcji płynnego renderowania:

HiQPdf:   converter.Document.Header.Height = 50;
          converter.Document.Header.Add(new HtmlToPdfVariableElement(...));

IronPDF:  renderer.RenderingOptions.TextHeader = new TextHeaderFooter() { ... };

Zanim zaczniesz

Wymagania wstępne

  1. Wersja .NET:IronPDFobsługuje .NET Framework 4.6.2+ oraz .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Klucz licencyjny: Uzyskaj klucz licencyjnyIronPDFna stronie ironpdf.com
  3. Usunięcie HiQPdf: Planowane jest usunięcie wszystkich wariantów pakietu NuGet HiQPdf

Zidentyfikuj wszystkie użycia HiQPdf

# FindHiQPdfnamespace usage
grep -r "using HiQPdf\|HtmlToPdf\|PdfDocument" --include="*.cs" .

# Find header/footer usage
grep -r "\.Header\.\|\.Footer\.\|HtmlToPdfVariableElement" --include="*.cs" .

# Find placeholder syntax
grep -r "CrtPage\|PageCount" --include="*.cs" .

# Find NuGet references
grep -r "HiQPdf" --include="*.csproj" .
# FindHiQPdfnamespace usage
grep -r "using HiQPdf\|HtmlToPdf\|PdfDocument" --include="*.cs" .

# Find header/footer usage
grep -r "\.Header\.\|\.Footer\.\|HtmlToPdfVariableElement" --include="*.cs" .

# Find placeholder syntax
grep -r "CrtPage\|PageCount" --include="*.cs" .

# Find NuGet references
grep -r "HiQPdf" --include="*.csproj" .
SHELL

Zmiany w pakiecie NuGet

# Remove allHiQPdfvariants
dotnet remove package HiQPdf
dotnet remove package HiQPdf.Free
dotnet remove package HiQPdf.NetCore
dotnet remove package HiQPdf.NetCore.x64
dotnet remove package HiQPdf.Client

# InstallIronPDF(single package for all platforms)
dotnet add package IronPdf
# Remove allHiQPdfvariants
dotnet remove package HiQPdf
dotnet remove package HiQPdf.Free
dotnet remove package HiQPdf.NetCore
dotnet remove package HiQPdf.NetCore.x64
dotnet remove package HiQPdf.Client

# InstallIronPDF(single package for all platforms)
dotnet add package IronPdf
SHELL

Szybki start – migracja

Krok 1: Zaktualizuj konfigurację licencji

Przed (HiQPdf):

HtmlToPdf converter = new HtmlToPdf();
converter.SerialNumber = "HIQPDF-SERIAL-NUMBER";
HtmlToPdf converter = new HtmlToPdf();
converter.SerialNumber = "HIQPDF-SERIAL-NUMBER";
Dim converter As New HtmlToPdf()
converter.SerialNumber = "HIQPDF-SERIAL-NUMBER"
$vbLabelText   $csharpLabel

Po (IronPDF):

// Set globally at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
// Set globally at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
$vbLabelText   $csharpLabel

Krok 2: Zaktualizuj importy przestrzeni nazw

// Before (HiQPdf)
using HiQPdf;

// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;
// Before (HiQPdf)
using HiQPdf;

// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;
Imports IronPdf
Imports IronPdf.Rendering
$vbLabelText   $csharpLabel

Kompletna dokumentacija API

Mapowanie głównych klas

KlasaHiQPdf KlasaIronPDF
HtmlToPdf ChromePdfRenderer
PdfDocument PdfDocument
HtmlToPdfVariableElement TextHeaderFooter lub HtmlHeaderFooter

Mapowanie metod konwersji

MetodaHiQPdf MetodaIronPDF
ConvertHtmlToMemory(html, baseUrl) RenderHtmlAsPdf(html)
ConvertUrlToMemory(url) RenderUrlAsPdf(url)
File.WriteAllBytes(path, bytes) pdf.SaveAs(path)

Mapowanie metod dokumentu PDF

MetodaHiQPdf MetodaIronPDF
PdfDocument.FromFile(path) PdfDocument.FromFile(path)
document1.AddDocument(document2) PdfDocument.Merge(pdf1, pdf2)
document.WriteToFile(path) pdf.SaveAs(path)

Mapowanie symboli zastępczych nagłówków/stopek

HiQPdfPlaceholder IronPDF Placeholder Opis
{CrtPage} {page} Numer bieżącej strony
{PageCount} {total-pages} Łączna liczba stron

Przykłady migracji kodu

Przykład 1: Konwersja HTML do PDF

Przed (HiQPdf):

// NuGet: Install-Package HiQPdf
using HiQPdf;
using System;

class Program
{
    static void Main()
    {
        HtmlToPdf htmlToPdfConverter = new HtmlToPdf();
        byte[] pdfBuffer = htmlToPdfConverter.ConvertUrlToMemory("https://example.com");
        System.IO.File.WriteAllBytes("output.pdf", pdfBuffer);

        // Convert HTML string
        string html = "<h1>Hello World</h1><p>This is a PDF document.</p>";
        byte[] pdfFromHtml = htmlToPdfConverter.ConvertHtmlToMemory(html, "");
        System.IO.File.WriteAllBytes("fromhtml.pdf", pdfFromHtml);
    }
}
// NuGet: Install-Package HiQPdf
using HiQPdf;
using System;

class Program
{
    static void Main()
    {
        HtmlToPdf htmlToPdfConverter = new HtmlToPdf();
        byte[] pdfBuffer = htmlToPdfConverter.ConvertUrlToMemory("https://example.com");
        System.IO.File.WriteAllBytes("output.pdf", pdfBuffer);

        // Convert HTML string
        string html = "<h1>Hello World</h1><p>This is a PDF document.</p>";
        byte[] pdfFromHtml = htmlToPdfConverter.ConvertHtmlToMemory(html, "");
        System.IO.File.WriteAllBytes("fromhtml.pdf", pdfFromHtml);
    }
}
Imports HiQPdf
Imports System

Class Program
    Shared Sub Main()
        Dim htmlToPdfConverter As New HtmlToPdf()
        Dim pdfBuffer As Byte() = htmlToPdfConverter.ConvertUrlToMemory("https://example.com")
        System.IO.File.WriteAllBytes("output.pdf", pdfBuffer)

        ' Convert HTML string
        Dim html As String = "<h1>Hello World</h1><p>This is a PDF document.</p>"
        Dim pdfFromHtml As Byte() = htmlToPdfConverter.ConvertHtmlToMemory(html, "")
        System.IO.File.WriteAllBytes("fromhtml.pdf", pdfFromHtml)
    End Sub
End Class
$vbLabelText   $csharpLabel

Po (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("output.pdf");

        // Convert HTML string
        string html = "<h1>Hello World</h1><p>This is a PDF document.</p>";
        var pdfFromHtml = renderer.RenderHtmlAsPdf(html);
        pdfFromHtml.SaveAs("fromhtml.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("output.pdf");

        // Convert HTML string
        string html = "<h1>Hello World</h1><p>This is a PDF document.</p>";
        var pdfFromHtml = renderer.RenderHtmlAsPdf(html);
        pdfFromHtml.SaveAs("fromhtml.pdf");
    }
}
Imports IronPdf
Imports System

Module Program
    Sub Main()
        Dim renderer As New ChromePdfRenderer()
        Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
        pdf.SaveAs("output.pdf")

        ' Convert HTML string
        Dim html As String = "<h1>Hello World</h1><p>This is a PDF document.</p>"
        Dim pdfFromHtml = renderer.RenderHtmlAsPdf(html)
        pdfFromHtml.SaveAs("fromhtml.pdf")
    End Sub
End Module
$vbLabelText   $csharpLabel

PodejścieHiQPdfwymaga utworzenia instancji HtmlToPdf, wywołania ConvertUrlToMemory() lub ConvertHtmlToMemory() w celu uzyskania tablicy bajtów, a następnie ręcznego zapisania bajtów do pliku. Funkcja ChromePdfRenderer bibliotekiIronPDFzwraca obiekt PdfDocument z bezpośrednią metodą SaveAs(), eliminując konieczność ręcznego zapisywania pliku. Nowoczesny silnik Chromium zapewnia również lepsze renderowanie złożonych treści HTML/CSS/JavaScript. Dodatkowe opcje renderowania można znaleźć w dokumentacji dotyczącej konwersji HTML do PDF.

Przykład 2: Scalanie wielu plików PDF

Przed (HiQPdf):

// NuGet: Install-Package HiQPdf
using HiQPdf;
using System;

class Program
{
    static void Main()
    {
        // Create first PDF
        HtmlToPdf converter1 = new HtmlToPdf();
        byte[] pdf1 = converter1.ConvertHtmlToMemory("<h1>First Document</h1>", "");
        System.IO.File.WriteAllBytes("doc1.pdf", pdf1);

        // Create second PDF
        HtmlToPdf converter2 = new HtmlToPdf();
        byte[] pdf2 = converter2.ConvertHtmlToMemory("<h1>Second Document</h1>", "");
        System.IO.File.WriteAllBytes("doc2.pdf", pdf2);

        // Merge PDFs
        PdfDocument document1 = PdfDocument.FromFile("doc1.pdf");
        PdfDocument document2 = PdfDocument.FromFile("doc2.pdf");
        document1.AddDocument(document2);
        document1.WriteToFile("merged.pdf");
    }
}
// NuGet: Install-Package HiQPdf
using HiQPdf;
using System;

class Program
{
    static void Main()
    {
        // Create first PDF
        HtmlToPdf converter1 = new HtmlToPdf();
        byte[] pdf1 = converter1.ConvertHtmlToMemory("<h1>First Document</h1>", "");
        System.IO.File.WriteAllBytes("doc1.pdf", pdf1);

        // Create second PDF
        HtmlToPdf converter2 = new HtmlToPdf();
        byte[] pdf2 = converter2.ConvertHtmlToMemory("<h1>Second Document</h1>", "");
        System.IO.File.WriteAllBytes("doc2.pdf", pdf2);

        // Merge PDFs
        PdfDocument document1 = PdfDocument.FromFile("doc1.pdf");
        PdfDocument document2 = PdfDocument.FromFile("doc2.pdf");
        document1.AddDocument(document2);
        document1.WriteToFile("merged.pdf");
    }
}
Imports HiQPdf
Imports System

Module Program
    Sub Main()
        ' Create first PDF
        Dim converter1 As New HtmlToPdf()
        Dim pdf1 As Byte() = converter1.ConvertHtmlToMemory("<h1>First Document</h1>", "")
        System.IO.File.WriteAllBytes("doc1.pdf", pdf1)

        ' Create second PDF
        Dim converter2 As New HtmlToPdf()
        Dim pdf2 As Byte() = converter2.ConvertHtmlToMemory("<h1>Second Document</h1>", "")
        System.IO.File.WriteAllBytes("doc2.pdf", pdf2)

        ' Merge PDFs
        Dim document1 As PdfDocument = PdfDocument.FromFile("doc1.pdf")
        Dim document2 As PdfDocument = PdfDocument.FromFile("doc2.pdf")
        document1.AddDocument(document2)
        document1.WriteToFile("merged.pdf")
    End Sub
End Module
$vbLabelText   $csharpLabel

Po (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

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

        // Create first PDF
        var pdf1 = renderer.RenderHtmlAsPdf("<h1>First Document</h1>");
        pdf1.SaveAs("doc1.pdf");

        // Create second PDF
        var pdf2 = renderer.RenderHtmlAsPdf("<h1>Second Document</h1>");
        pdf2.SaveAs("doc2.pdf");

        // Merge PDFs
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

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

        // Create first PDF
        var pdf1 = renderer.RenderHtmlAsPdf("<h1>First Document</h1>");
        pdf1.SaveAs("doc1.pdf");

        // Create second PDF
        var pdf2 = renderer.RenderHtmlAsPdf("<h1>Second Document</h1>");
        pdf2.SaveAs("doc2.pdf");

        // Merge PDFs
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
Imports IronPdf
Imports System

Module Program
    Sub Main()
        Dim renderer = New ChromePdfRenderer()

        ' Create first PDF
        Dim pdf1 = renderer.RenderHtmlAsPdf("<h1>First Document</h1>")
        pdf1.SaveAs("doc1.pdf")

        ' Create second PDF
        Dim pdf2 = renderer.RenderHtmlAsPdf("<h1>Second Document</h1>")
        pdf2.SaveAs("doc2.pdf")

        ' Merge PDFs
        Dim merged = PdfDocument.Merge(pdf1, pdf2)
        merged.SaveAs("merged.pdf")
    End Sub
End Module
$vbLabelText   $csharpLabel

PodejścieHiQPdfwymaga wczytania dokumentów z plików za pomocą PdfDocument.FromFile(), wywołania AddDocument() na pierwszym dokumencie w celu dołączenia drugiego, a następnie użycia WriteToFile() do zapisania.IronPDFzapewnia bardziej przejrzystą metodę statyczną PdfDocument.Merge(), która akceptuje bezpośrednio wiele obiektów PdfDocument — bez konieczności wykonywania operacji na plikach pośrednich. Dowiedz się więcej o łączeniu i dzieleniu plików PDF.

Przykład 3: Nagłówki i stopki w plikach PDF z numerami stron

Przed (HiQPdf):

// NuGet: Install-Package HiQPdf
using HiQPdf;
using System;

class Program
{
    static void Main()
    {
        HtmlToPdf htmlToPdfConverter = new HtmlToPdf();

        // Add header
        htmlToPdfConverter.Document.Header.Height = 50;
        HtmlToPdfVariableElement headerHtml = new HtmlToPdfVariableElement("<div style='text-align:center'>Page Header</div>", "");
        htmlToPdfConverter.Document.Header.Add(headerHtml);

        // Add footer with page number
        htmlToPdfConverter.Document.Footer.Height = 50;
        HtmlToPdfVariableElement footerHtml = new HtmlToPdfVariableElement("<div style='text-align:center'>Page {CrtPage} of {PageCount}</div>", "");
        htmlToPdfConverter.Document.Footer.Add(footerHtml);

        byte[] pdfBuffer = htmlToPdfConverter.ConvertHtmlToMemory("<h1>Document with Headers and Footers</h1>", "");
        System.IO.File.WriteAllBytes("header-footer.pdf", pdfBuffer);
    }
}
// NuGet: Install-Package HiQPdf
using HiQPdf;
using System;

class Program
{
    static void Main()
    {
        HtmlToPdf htmlToPdfConverter = new HtmlToPdf();

        // Add header
        htmlToPdfConverter.Document.Header.Height = 50;
        HtmlToPdfVariableElement headerHtml = new HtmlToPdfVariableElement("<div style='text-align:center'>Page Header</div>", "");
        htmlToPdfConverter.Document.Header.Add(headerHtml);

        // Add footer with page number
        htmlToPdfConverter.Document.Footer.Height = 50;
        HtmlToPdfVariableElement footerHtml = new HtmlToPdfVariableElement("<div style='text-align:center'>Page {CrtPage} of {PageCount}</div>", "");
        htmlToPdfConverter.Document.Footer.Add(footerHtml);

        byte[] pdfBuffer = htmlToPdfConverter.ConvertHtmlToMemory("<h1>Document with Headers and Footers</h1>", "");
        System.IO.File.WriteAllBytes("header-footer.pdf", pdfBuffer);
    }
}
Imports HiQPdf
Imports System

Class Program
    Shared Sub Main()
        Dim htmlToPdfConverter As New HtmlToPdf()

        ' Add header
        htmlToPdfConverter.Document.Header.Height = 50
        Dim headerHtml As New HtmlToPdfVariableElement("<div style='text-align:center'>Page Header</div>", "")
        htmlToPdfConverter.Document.Header.Add(headerHtml)

        ' Add footer with page number
        htmlToPdfConverter.Document.Footer.Height = 50
        Dim footerHtml As New HtmlToPdfVariableElement("<div style='text-align:center'>Page {CrtPage} of {PageCount}</div>", "")
        htmlToPdfConverter.Document.Footer.Add(footerHtml)

        Dim pdfBuffer As Byte() = htmlToPdfConverter.ConvertHtmlToMemory("<h1>Document with Headers and Footers</h1>", "")
        System.IO.File.WriteAllBytes("header-footer.pdf", pdfBuffer)
    End Sub
End Class
$vbLabelText   $csharpLabel

Po (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;

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

        // Configure header and footer
        renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
        {
            CenterText = "Page Header",
            FontSize = 12
        };

        renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
        {
            CenterText = "Page {page} of {total-pages}",
            FontSize = 10
        };

        var pdf = renderer.RenderHtmlAsPdf("<h1>Document with Headers and Footers</h1>");
        pdf.SaveAs("header-footer.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;

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

        // Configure header and footer
        renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
        {
            CenterText = "Page Header",
            FontSize = 12
        };

        renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
        {
            CenterText = "Page {page} of {total-pages}",
            FontSize = 10
        };

        var pdf = renderer.RenderHtmlAsPdf("<h1>Document with Headers and Footers</h1>");
        pdf.SaveAs("header-footer.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System

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

        ' Configure header and footer
        renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
            .CenterText = "Page Header",
            .FontSize = 12
        }

        renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With {
            .CenterText = "Page {page} of {total-pages}",
            .FontSize = 10
        }

        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Document with Headers and Footers</h1>")
        pdf.SaveAs("header-footer.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

PodejścieHiQPdfwymaga ustawienia Document.Header.Height, utworzenia obiektów HtmlToPdfVariableElement oraz wywołania Add() w sekcjach nagłówka/stopki. Zastępcze oznaczenia numerów stron wykorzystują składnię {CrtPage} oraz {PageCount}.IronPDFzapewnia bardziej przejrzystą konfigurację TextHeaderFooter z właściwościami CenterText i inną składnią symboli zastępczych: {page} oraz {total-pages}. Dodatkowe opcje, w tym nagłówki oparte na HTML, można znaleźć w dokumentacji dotyczącej nagłówków i stopek.


Ważne uwagi dotyczące migracji

Zmiana składni symboli zastępczych

Najważniejszą zmianą w dokumentach z numerami stron jest składnia symboli zastępczych:

//HiQPdfplaceholders
"Page {CrtPage} of {PageCount}"

//IronPDFplaceholders
"Page {page} of {total-pages}"
//HiQPdfplaceholders
"Page {CrtPage} of {PageCount}"

//IronPDFplaceholders
"Page {page} of {total-pages}"
'HiQPdfplaceholders
"Page {CrtPage} of {PageCount}"

'IronPDFplaceholders
"Page {page} of {total-pages}"
$vbLabelText   $csharpLabel

Pełne mapowanie symboli zastępczych:

  • {CrtPage}{page}
  • {PageCount}{total-pages}

Różnica między metodami scalania

HiQPdf modyfikuje pierwszy dokument w miejscu:

// HiQPdf: Modifies document1
document1.AddDocument(document2);
document1.WriteToFile("merged.pdf");
// HiQPdf: Modifies document1
document1.AddDocument(document2);
document1.WriteToFile("merged.pdf");
' HiQPdf: Modifies document1
document1.AddDocument(document2)
document1.WriteToFile("merged.pdf")
$vbLabelText   $csharpLabel

IronPDF zwraca nowy, scalony dokument:

// IronPDF: Returns new document
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
// IronPDF: Returns new document
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
' IronPDF: Returns new document
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
$vbLabelText   $csharpLabel

Brak ograniczenia do 3 stron

Wersja darmowaHiQPdfogranicza wydruk do 3 stron z znakami wodnymi.IronPDFgeneruje kompletne dokumenty bez sztucznych ograniczeń w okresie próbnym.

Ponowne użycie ChromePdfRenderer

W przeciwieństwie do HiQPdf, gdzie można tworzyć nowe instancje HtmlToPdf dla każdej konwersji, ChromePdfRenderer wIronPDFpowinno być ponownie wykorzystywane:

// IronPDF: Create once, reuse
var renderer = new ChromePdfRenderer();
var pdf1 = renderer.RenderHtmlAsPdf(html1);
var pdf2 = renderer.RenderHtmlAsPdf(html2);
// IronPDF: Create once, reuse
var renderer = new ChromePdfRenderer();
var pdf1 = renderer.RenderHtmlAsPdf(html1);
var pdf2 = renderer.RenderHtmlAsPdf(html2);
' IronPDF: Create once, reuse
Dim renderer As New ChromePdfRenderer()
Dim pdf1 = renderer.RenderHtmlAsPdf(html1)
Dim pdf2 = renderer.RenderHtmlAsPdf(html2)
$vbLabelText   $csharpLabel

Rozwiązywanie problemów

Problem 1: Nie znaleziono HtmlToPdf

Problem: Klasa HtmlToPdf nie istnieje w IronPDF.

Rozwiązanie: Zastąp przez ChromePdfRenderer:

// HiQPdf
HtmlToPdf htmlToPdfConverter = new HtmlToPdf();

// IronPDF
var renderer = new ChromePdfRenderer();
// HiQPdf
HtmlToPdf htmlToPdfConverter = new HtmlToPdf();

// IronPDF
var renderer = new ChromePdfRenderer();
' HiQPdf
Dim htmlToPdfConverter As New HtmlToPdf()

' IronPDF
Dim renderer As New ChromePdfRenderer()
$vbLabelText   $csharpLabel

Problem 2: Nie znaleziono ConvertHtmlToMemory

Problem: metoda ConvertHtmlToMemory() nie istnieje.

Rozwiązanie: Użyj RenderHtmlAsPdf():

// HiQPdf
byte[] pdfBytes = converter.ConvertHtmlToMemory(html, "");

// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
byte[] pdfBytes = pdf.BinaryData;
// HiQPdf
byte[] pdfBytes = converter.ConvertHtmlToMemory(html, "");

// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
byte[] pdfBytes = pdf.BinaryData;
' HiQPdf
Dim pdfBytes As Byte() = converter.ConvertHtmlToMemory(html, "")

' IronPDF
Dim pdf = renderer.RenderHtmlAsPdf(html)
Dim pdfBytes As Byte() = pdf.BinaryData
$vbLabelText   $csharpLabel

Problem 3: Nie działają symbole zastępcze numerów stron

Problem: {CrtPage} i {PageCount} pojawiają się dosłownie w wynikach.

Rozwiązanie: Zaktualizuj do składni symboli zastępczych IronPDF:

//HiQPdfsyntax (won't work)
"Page {CrtPage} of {PageCount}"

//IronPDFsyntax
"Page {page} of {total-pages}"
//HiQPdfsyntax (won't work)
"Page {CrtPage} of {PageCount}"

//IronPDFsyntax
"Page {page} of {total-pages}"
'HiQPdfsyntax (won't work)
"Page {CrtPage} of {PageCount}"

'IronPDFsyntax
"Page {page} of {total-pages}"
$vbLabelText   $csharpLabel

Problem 4: Nie znaleziono elementu HtmlToPdfVariableElement

Problem: HtmlToPdfVariableElement klasa nie istnieje.

Rozwiązanie: Użyj TextHeaderFooter lub HtmlHeaderFooter:

// HiQPdf
HtmlToPdfVariableElement headerHtml = new HtmlToPdfVariableElement("<div>Header</div>", "");
converter.Document.Header.Add(headerHtml);

// IronPDF
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
    CenterText = "Header",
    FontSize = 12
};
// HiQPdf
HtmlToPdfVariableElement headerHtml = new HtmlToPdfVariableElement("<div>Header</div>", "");
converter.Document.Header.Add(headerHtml);

// IronPDF
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
    CenterText = "Header",
    FontSize = 12
};
' HiQPdf
Dim headerHtml As New HtmlToPdfVariableElement("<div>Header</div>", "")
converter.Document.Header.Add(headerHtml)

' IronPDF
renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
    .CenterText = "Header",
    .FontSize = 12
}
$vbLabelText   $csharpLabel

Lista kontrolna migracji

Przed migracją

  • Sporządź spis wszystkich wywołań APIHiQPdfw kodzie źródłowym
  • Dokumentuj aktualne rozmiary stron, marginesy i ustawienia
  • Zidentyfikuj konfiguracje nagłówków/stopek oraz symbole zastępcze
  • Uzyskaj klucz licencyjny IronPDF
  • PrzetestujIronPDFw środowisku programistycznym

Migracja kodu

  • Usuń wszystkie pakietyHiQPdfNuGet (wszystkie warianty)
  • Zainstaluj pakiet IronPdf NuGet: dotnet add package IronPdf
  • Zaktualizuj importy przestrzeni nazw
  • Zastąp HtmlToPdf przez ChromePdfRenderer
  • Zamień ConvertHtmlToMemory() na RenderHtmlAsPdf()
  • Zamień ConvertUrlToMemory() na RenderUrlAsPdf()
  • Zaktualizuj symbole zastępcze nagłówka/stopki ({CrtPage}{page}, {PageCount}{total-pages})
  • Zastąp HtmlToPdfVariableElement przez TextHeaderFooter
  • Zaktualizuj operacje scalania (AddDocumentPdfDocument.Merge)
  • Dodaj inicjalizację klucza licencyjnego podczas uruchamiania

Testowanie

  • Przetestuj konwersję HTML do PDF
  • Przetestuj konwersję adresu URL do formatu PDF
  • Sprawdź renderowanie nagłówków/stopek
  • Sprawdź symbole zastępcze numerów stron
  • Testowanie łączenia plików PDF
  • Testowanie stron z dużą ilością kodu JavaScript (obecnie obsługiwane przez Chromium)

Po migracji

  • Usuń numer seryjnyHiQPdfz konfiguracji
  • Aktualizacja dokumentacji
  • Sprawdzaj, czy nie ma żadnych różnic w renderowaniu

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