Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

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

HiQPdf to komercyjna biblioteka HTML-do-PDF opublikowana przezHiQPdfSoftware (aktualny HiQPdf 18.0.2 na nuget.org, luty 2026). Powszechne powody, dla których programiści oceniają alternatywy:

  1. Ograniczona darmowa wersja: HiQPdf.Free ogranicza wyjście do 3 stron na dokument — przydatne do oceny, ale nie do produkcji wymagających kompletnego generowania dokumentów.

  2. WebKit na Linii Klasycznej: Klasyczny pakiet HiQPdf używa starszego silnika opartego na WebKit, który może mieć problemy z nowoczesnymi frameworkami JavaScript.HiQPdfdostarcza wariant oparty na Chromium (HiQPdf.NG / HiQPdf.Chromium.Windows, plus wersja na Linux), ale większość istniejącego kodu jest skierowana na silnik klasyczny.

  3. Wsparcie dla .NET rozprzestrzenione po pakietach: .NET Framework, .NET Core i .NET Standard 2.0 są wspierane, ale rozdzielone na osobne ID NuGet (HiQPdf, HiQPdf_NetCore, HiQPdf.NG, HiQPdf.Chromium.Windows, HiQPdf_x64), między którym musisz wybierać.

  4. Sfragmentowane pakiety: Wiele identyfikatorów NuGet dla różnych platform (HiQPdf, HiQPdf.Free, HiQPdf_NetCore, HiQPdf.NG, HiQPdf.Chromium.Windows) komplikuje zarządzanie zależnościami.

  5. Rozbudowana konfiguracja: Wymaga konfiguracji przez łańcuchy właściwości Document, Header, Footer zamiast płynnego API opcji renderowania.

  6. Licencjonowanie per-developer dodaje koszty: 245 USD Startup / 495 USD Developer / 795 USD Team / 1 095 USD Enterprise (wieczysta, pierwszy rok aktualizacji wliczony).

PorównanieHiQPdfi IronPDF

Aspekt HiQPdf IronPDF
Silnik renderujący WebKit (Klasyczny HiQPdf) lub Chromium (HiQPdf.NG / HiQPdf.Chromium.Windows) Nowoczesny Chromium
Poziom bezpłatny HiQPdf.Free ograniczenie do 3 stron 30-dniowy okres próbny
Obsługa nowoczesnego JS Ograniczone w Klasycznym; nowoczesne w NG/Chromium Pełna (React, Angular, Vue)
Obsługa .NET Core/5+ Wspierane, ale rozdzielone po wielu pakietach NuGet Pojedynczy, ujednolicony pakiet
Projektowanie API Łańcuchy właściwości Płynne opcje renderowania
Obsługa CSS3 Częściowe w Klasycznym; pełne w NG Pełne wsparcie
Dokumentacja Fragmentacja przez linie produktów Kompleksowe
Pakiet NuGet Wiele wariantów Pojedynczy pakiet

Dokumenty IronPDF wspierają obecne wersje .NET (.NET Framework 4.6.2+, .NET 6, 7, 8, 9) na nowoczesnym silniku 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 Niski
Nagłówki/stopki Medium
Rozmiar strony/marginesy Niski
Tryb wyzwalacza/opóźnienia Niski

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:IronPDF obsługuje .NET Framework 4.6.2+ i .NET Core 3.1+ / .NET 5+
  2. Klucz licencyjny: Uzyskaj klucz licencyjny IronPDF na 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_x64
dotnet remove package HiQPdf.NG
dotnet remove package HiQPdf.Chromium.Windows

# Install IronPDF(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_x64
dotnet remove package HiQPdf.NG
dotnet remove package HiQPdf.Chromium.Windows

# Install IronPDF(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 Klasa IronPDF
HtmlToPdf ChromePdfRenderer
PdfDocument PdfDocument
HtmlToPdfVariableElement TextHeaderFooter lub HtmlHeaderFooter

Mapowanie metod konwersji

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

Mapowanie metod dokumentu PDF

MetodaHiQPdf Metoda IronPDF
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

HiQPdf Placeholder 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(), aby uzyskać tablicę bajtów, a następnie ręcznego zapisania bajtów do pliku. ChromePdfRendererIronPDF zwraca obiekt PdfDocument z bezpośrednią metodą SaveAs(), eliminując ręczny krok zapisywania do pliku. Nowoczesny silnik Chromium zapewnia również lepsze renderowanie złożonej zawartości HTML/CSS/JavaScript. Dodatkowe opcje renderowania można znaleźć w dokumentacji dotyczącej konwersji HTML do PDF.

Przykład 2: Scałanie 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 ładowania dokumentów z plików za pomocą PdfDocument.FromFile(), wywołania AddDocument() na pierwszym dokumencie, aby dodać drugi, a następnie użycia WriteToFile() do zapisania.IronPDF dostarcza czystszą metodę statyczną PdfDocument.Merge(), która akceptuje wiele obiektów PdfDocument bez potrzeby przeprowadzania pośrednich operacji na plikach. 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, tworzenia obiektów HtmlToPdfVariableElement i wywoływania Add() na sekcjach nagłówka/stopki. Symbol zastępczy numeru strony używa składni {CrtPage} i {PageCount}.IronPDF oferuje czystszą konfigurację TextHeaderFooter z właściwościami CenterText i inną składnią dla symboli zastępczych: {page} i {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}"

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

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

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

Pełne mapowanie symboli zastępczych:

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

Różnica między metodami scałania

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.IronPDF generuje 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, należy ponownie używać ChromePdfRenderer IronPDF:

// 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 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 wyjściu.

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

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

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

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

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

Problem 4: Nie znaleziono elementu HtmlToPdfVariableElement

Problem: Klasa HtmlToPdfVariableElement 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
  • Przetestuj IronPDF w środowisku programistycznym

Migracja kodu

  • Usuń wszystkie pakietyHiQPdfNuGet (wszystkie warianty)
  • Zainstaluj pakiet NuGet IronPDF: dotnet add package IronPdf
  • Zaktualizuj importy przestrzeni nazw
  • Zastąp HtmlToPdf przez ChromePdfRenderer
  • Konwertuj ConvertHtmlToMemory() na RenderHtmlAsPdf()
  • Konwertuj ConvertUrlToMemory() na RenderUrlAsPdf()
  • Aktualizuj zastępniki nagłówka/stopki ({CrtPage}{page}, {PageCount}{total-pages})
  • Zastąp HtmlToPdfVariableElement przez TextHeaderFooter
  • Aktualizuj 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

Zwróć uwagęHiQPdf jest zastrzeżonym znakiem towarowym odpowiedniego właściciela. Ta witryna nie jest powiązana, zatwierdzona ani sponsorowana przezHiQPdfSoftware. Wszystkie nazwy produktów, logo i marki są własnością ich odpowiednich właścicieli. Porównania mają charakter wyłącznie informacyjny i odzwierciedlają informacje dostępne publicznie w momencie pisania.

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

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie