IRONSOFTWAREHOME
FILMY

Jak przekonwertować plik HTML do formatu PDF w języku C#

Curtis Chau
Curtis Chau
Updated: 11 stycznia 2026

Dlaczego warto odejść od Aspose.PDF?

Chociaż Aspose.PDF zapewnia funkcjonalność na poziomie Enterprise, kilka czynników skłania zespoły programistów do poszukiwania nowoczesnych alternatyw dla swoich potrzeb w zakresie generowania plików PDF.

Porównanie kosztów

Aspose.PDF używa modelu licencji wieczystej, który obejmuje jeden rok aktualizacji; opcjonalne odnowienie wydłuża okres aktualizacji. Źródło: Strona cenowa Aspose.

AspektAspose.PDFIronPDF
Cena początkowa (Małe przedsiębiorstwo)$1,199/programista749 USD jednorazowo (wersja Lite)
Model licencjiLicencja wieczysta + 1 rok aktualizacji; optional renewalLicencja wieczysta
Developer OEM$3,597/programista (nielimitowane wdrożenia)Zawarte w wyższych poziomach
WsparcieWliczone we wszystkie płatne poziomyW zestawie
Bezpłatna ocena30-dniowa licencja tymczasowa (w przeciwnym razie znaki wodne + ograniczenia rozmiaru)Bezpłatne dla rozwoju

Porównanie silników renderowania HTML

Aspose.PDF używa wbudowanego silnika renderowania HTML/CSS (nie Chromium); raporty użytkowników na forum Aspose wskazują na luki z nowoczesnymi funkcjami layoutu CSS, takimi jak Flexbox i CSS Grid.IronPDF używa osadzonej wersji Chromium do renderowania z HTML do PDF.

FunkcjaAspose.PDF (engine wewnętrzny)IronPDF (Chromium)
Obsługa CSS3Częściowe; luki w nowoczesnych funkcjach layoutuPełny CSS3
Flexbox/GridOgraniczone / niespójne (według raportów forum Aspose)Pełne wsparcie
JavaScriptOgraniczonePełna obsługa (V8 przez Chromium)
Czcionki internetoweCzęścioweZakończ
Nowoczesny HTML5CzęścioweZakończ
Jakość renderowaniaZmienność w złożonych układachRównorzędnik Chrome

Charakterystyka wydajności

Użytkownicy zgłosili różnice w wydajności na forum wsparcia Aspose. Poniższe liczby odzwierciedlają scenariusze zgłaszane przez społeczność — zweryfikuj je w stosunku do własnego obciążenia pracą.

MetrykaAspose.PDFIronPDF
Renderowanie HTMLZgłaszane przez użytkowników spowolnienia w przypadku złożonych zadań CSSZoptymalizowany silnik Chromium
Duże dokumentyZgłaszany przyrost pamięci w niektórych scenariuszachWydajne przesyłanie strumieniowe
Wydajność systemu LinuxNa forum społeczności zgłoszono znaczny wzrost użycia CPU i pamięciStabilny

Aspose.PDF a IronPDF: kluczowe różnice

AspektAspose.PDFIronPDF
Cena (wejściowa)$1,199/programista (wieczysta + 1 rok aktualizacji)749 USD jednorazowo (wersja Lite)
Silnik HTMLEngine wewnętrzny (ograniczony nowoczesny CSS)Chromium (pełne CSS3/JS)
WydajnośćZgłaszane przez forum spowolnienia w przypadku złożonych zadań CSSZoptymalizowane
Model licencjiWieczysta + .lic plik; opcjonalne odnawianie dla aktualizacjiKlucz wieczny + oparty na kodzie
Obsługa systemu LinuxNa forum zgłaszane są problemy z CPU/pamięciąStabilny
Indeksowanie stron1-bazowane (Pages[1])0-bazowane (Pages[0])

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 Aspose.PDF

Uruchom te polecenia w katalogu rozwiązania, aby zidentyfikować wszystkie odwołania do Aspose.PDF:

# Find all Aspose.Pdf using statements
grep -r "using Aspose.Pdf" --include="*.cs" .

# Find HtmlLoadOptions usage
grep -r "HtmlLoadOptions\|HtmlFragment" --include="*.cs" .

# Find Facades usage
grep -r "PdfFileEditor\|PdfFileMend\|PdfFileStamp" --include="*.cs" .

# Find TextAbsorber usage
grep -r "TextAbsorber\|TextFragmentAbsorber" --include="*.cs" .
SHELL

Zmiany wymagające dostosowania

Wzór Aspose.PDFWymagana zmiana
new Document() + Pages.Add()Zastosuj renderowanie HTML zamiast
HtmlLoadOptionsChromePdfRenderer.RenderHtmlAsPdf()
TextFragment + ręczne pozycjonowaniePozycjonowanie oparte na CSS
PdfFileEditor.Concatenate()PdfDocument.Merge()
TextFragmentAbsorberpdf.ExtractAllText()
ImageStampZnaki wodne oparte na HTML
.lic licencjonowanie plikówKlucz licencyjny oparty na kodzie
Indeksowanie stron oparte na 1Indeksowanie stron oparte na 0

Proces migracji krok po kroku

Krok 1: Zaktualizuj pakiety NuGet

Usuń Aspose.PDF i zainstaluj IronPDF:

# Remove Aspose.PDF
dotnet remove package Aspose.PDF

# Install IronPDF
dotnet add package IronPdf
SHELL

Lub za pomocą konsoli menedżera pakietów:

Uninstall-Package Aspose.PDF
Install-Package IronPdf
PowerShell

Krok 2: Aktualizacja odniesień do przestrzeni nazw

Zastąp przestrzenie nazw Aspose.PDF na IronPDF:

// Remove these
using Aspose.Pdf;
using Aspose.Pdf.Text;
using Aspose.Pdf.Facades;
using Aspose.Pdf.Generator;

// Add these
using IronPdf;
using IronPdf.Rendering;
using IronPdf.Editing;

Krok 3: Zaktualizuj konfigurację licencji

Aspose.PDF korzysta z licencji w plikach .lic.IronPDF wykorzystuje prosty klucz oparty na kodzie.

Wdrożenie Aspose.PDF:

var license = new Aspose.Pdf.License();
license.SetLicense("Aspose.Pdf.lic");

Wdrożenie IronPDF:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Kompletna dokumentacja API

Mapowanie klas podstawowych

Klasa Aspose.PDFOdpowiednik IronPDF
DocumentPdfDocument
HtmlLoadOptionsChromePdfRenderer
TextFragmentAbsorberPdfDocument.ExtractAllText()
PdfFileEditorPdfDocument.Merge()
TextStamp / ImageStampPdfDocument.ApplyWatermark()
LicenseIronPdf.License

Operacje na dokumentach

Metoda Aspose.PDFMetoda IronPDF
new Document()new PdfDocument()
new Document(path)PdfDocument.FromFile(path)
doc.Save(path)pdf.SaveAs(path)
doc.Pages.Countpdf.PageCount
doc.Pages.Delete(index)pdf.RemovePages(index)

Konwersja HTML do PDF

Metoda Aspose.PDFMetoda IronPDF
new HtmlLoadOptions()new ChromePdfRenderer()
new Document(stream, htmlOptions)renderer.RenderHtmlAsPdf(html)
new Document(path, htmlOptions)renderer.RenderHtmlFileAsPdf(path)

Przykłady migracji kodu

Ciąg znaków HTML do pliku PDF

Najczęstsza operacja Aspose.PDF pokazuje zasadniczą różnicę w podejściu — Aspose.PDF wymaga umieszczenia kodu HTML w MemoryStream, podczas gdy IronPDF akceptuje ciągi znaków bezpośrednio.

Wdrożenie Aspose.PDF:

// NuGet: Install-Package Aspose.PDF
using Aspose.Pdf;
using System;
using System.IO;
using System.Text;

class Program
{
    static void Main()
    {
        string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML string.</p></body></html>";
        
        using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(htmlContent)))
        {
            var htmlLoadOptions = new HtmlLoadOptions();
            var document = new Document(stream, htmlLoadOptions);
            document.Save("output.pdf");
        }
        
        Console.WriteLine("PDF created from HTML string");
    }
}

Wdrożenie IronPDF:

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

class Program
{
    static void Main()
    {
        string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML string.</p></body></html>";
        
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
        
        Console.WriteLine("PDF created from HTML string");
    }
}

IronPDF całkowicie eliminuje opakowanie MemoryStream — zapewniając czystsze i bardziej intuicyjne API.

Plik HTML do PDF

Wdrożenie Aspose.PDF:

// NuGet: Install-Package Aspose.PDF
using Aspose.Pdf;
using System;

class Program
{
    static void Main()
    {
        var htmlLoadOptions = new HtmlLoadOptions();
        var document = new Document("input.html", htmlLoadOptions);
        document.Save("output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}

Wdrożenie IronPDF:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlFileAsPdf("input.html");
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}

Łączenie wielu plików PDF

Aspose.PDF wymaga ręcznego przeglądania stron.IronPDF zapewnia statyczną metodę Merge.

Wdrożenie Aspose.PDF:

// NuGet: Install-Package Aspose.PDF
using Aspose.Pdf;
using System;

class Program
{
    static void Main()
    {
        var document1 = new Document("file1.pdf");
        var document2 = new Document("file2.pdf");
        
        foreach (Page page in document2.Pages)
        {
            document1.Pages.Add(page);
        }
        
        document1.Save("merged.pdf");
        Console.WriteLine("PDFs merged successfully");
    }
}

Wdrożenie IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("file1.pdf");
        var pdf2 = PdfDocument.FromFile("file2.pdf");
        
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
        
        Console.WriteLine("PDFs merged successfully");
    }
}

Wyodrębnianie tekstu

Wdrożenie Aspose.PDF:

using Aspose.Pdf;
using Aspose.Pdf.Text;

var document = new Document("document.pdf");
var absorber = new TextAbsorber();

foreach (Page page in document.Pages)
{
    page.Accept(absorber);
}

string extractedText = absorber.Text;
Console.WriteLine(extractedText);

Wdrożenie IronPDF:

using IronPdf;

var pdf = PdfDocument.FromFile("document.pdf");

// Extract all text - one line!
string allText = pdf.ExtractAllText();
Console.WriteLine(allText);

// Or extract from specific page
string page1Text = pdf.ExtractTextFromPage(0);

IronPDF upraszcza proces wyodrębniania tekstu z wielu etapów do jednego wywołania metody.

Dodawanie znaków wodnych

Wdrożenie Aspose.PDF:

using Aspose.Pdf;
using Aspose.Pdf.Text;

var document = new Document("document.pdf");

var textStamp = new TextStamp("CONFIDENTIAL");
textStamp.Background = true;
textStamp.XIndent = 100;
textStamp.YIndent = 100;
textStamp.Rotate = Rotation.on45;
textStamp.Opacity = 0.5;
textStamp.TextState.Font = FontRepository.FindFont("Arial");
textStamp.TextState.FontSize = 72;
textStamp.TextState.ForegroundColor = Color.Red;

foreach (Page page in document.Pages)
{
    page.AddStamp(textStamp);
}

document.Save("watermarked.pdf");

Wdrożenie IronPDF:

using IronPdf;
using IronPdf.Editing;

var pdf = PdfDocument.FromFile("document.pdf");

// HTML-based watermark with full styling control
string watermarkHtml = @"
<div style='
    color: red;
    opacity: 0.5;
    font-family: Arial;
    font-size: 72px;
    font-weight: bold;
    text-align: center;
'>CONFIDENTIAL</div>";

pdf.ApplyWatermark(watermarkHtml,
    rotation: 45,
    verticalAlignment: VerticalAlignment.Middle,
    horizontalAlignment: HorizontalAlignment.Center);

pdf.SaveAs("watermarked.pdf");

IronPDF wykorzystuje znak wodny oparty na HTML/CSS, zapewniając pełną kontrolę nad stylem za pomocą znanych technologii internetowych.

Ochrona hasłem

Wdrożenie Aspose.PDF:

using Aspose.Pdf;

var document = new Document("document.pdf");
document.Encrypt("userPassword", "ownerPassword", DocumentPrivilege.ForbidAll, CryptoAlgorithm.AESx256);
document.Save("protected.pdf");

Wdrożenie IronPDF:

using IronPdf;

var pdf = PdfDocument.FromFile("document.pdf");

// Set passwords
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";

// Set permissions
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

pdf.SaveAs("protected.pdf");

IronPDF zapewnia szczegółową kontrolę nad uprawnieniami dzięki właściwościom silnie typowanym. Aby uzyskać więcej opcji, 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-family:Arial; font-size:12px;'>
            Company Header
        </div>",
    DrawDividerLine = true,
    MaxHeight = 30
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='text-align:center; font-family:Arial; font-size:10px;'>
            Page {page} of {total-pages}
        </div>",
    DrawDividerLine = true,
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf("<h1>Content here</h1>");
pdf.SaveAs("with_headers.pdf");

IronPDF obsługuje symbole zastępcze, takie jak {page} i {total-pages} dla dynamicznej numeracji stron. Aby uzyskać więcej opcji, zapoznaj się z dokumentacją dotyczącą nagłówków i stopek.

Ważne uwagi dotyczące migracji

Zmiana indeksowania stron

Aspose.PDF stosuje indeksowanie oparte na 1.IronPDF stosuje indeksowanie od 0:

// Aspose.PDF - 1-based indexing
var firstPage = doc.Pages[1];  // First page
var thirdPage = doc.Pages[3];  // Third page

//IronPDF- 0-based indexing
var firstPage = pdf.Pages[0];  // First page
var thirdPage = pdf.Pages[2];  // Third page

Plik licencji do klucza kodu

Zamień licencjonowanie plików .lic na aktywację opartą na kodzie:

// Aspose.PDF
var license = new Aspose.Pdf.License();
license.SetLicense("Aspose.Pdf.lic");

// IronPDF
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Or from environment variable
IronPdf.License.LicenseKey = Environment.GetEnvironmentVariable("IRONPDF_LICENSE_KEY");

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");
    }
}

Konfiguracja wstrzykiwania zależności

// Program.cs
public void ConfigureServices(IServiceCollection services)
{
    // Set license once
    IronPdf.License.LicenseKey = Configuration["IronPdf:LicenseKey"];

    // Register renderer as scoped service
    services.AddScoped<ChromePdfRenderer>();
}

Optymalizacja wydajności

// 1. Reuse renderer instance
private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer();

// 2. Disable unnecessary features for speed
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = false; // If not needed
renderer.RenderingOptions.WaitFor.RenderDelay(0);   // No delay
renderer.RenderingOptions.Timeout = 30000;          // 30s max

// 3. Proper disposal
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
    pdf.SaveAs("output.pdf");
}

Rozwiązywanie typowych problemów związanych z migracją

Problem: Nie znaleziono HtmlLoadOptions

Zamień na ChromePdfRenderer:

// Remove this
var doc = new Document(stream, new HtmlLoadOptions());

// Use this
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlString);

Problem: Nie znaleziono TextFragmentAbsorber

Należy stosować bezpośrednie cytowanie tekstu:

// Remove this
var absorber = new TextFragmentAbsorber();
page.Accept(absorber);
string text = absorber.Text;

// Use this
var pdf = PdfDocument.FromFile("doc.pdf");
string text = pdf.ExtractAllText();

Problem: Funkcja PdfFileEditor.Concatenate jest niedostępna

Użyj PdfDocument.Merge():

// Remove this
var editor = new PdfFileEditor();
editor.Concatenate(files, output);

// Use this
var pdfs = files.Select(PdfDocument.FromFile).ToList();
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs(output);

Lista kontrolna po migracji

Po zakończeniu migracji kodu sprawdź, czy:

  • Usuń pliki licencji Aspose.PDF (.lic)
  • Sprawdź jakość renderowania HTML (CSS Grid i Flexbox powinny teraz działać poprawnie)
  • Przetestuj skrajne przypadki przy użyciu dużych dokumentów i złożonego CSS
  • Zaktualizuj odniesienia do indeksu stron (z liczenia od 1 do liczenia od 0)
  • W razie potrzeby zaktualizuj konfiguracje Docker
  • Zaktualizuj potoki CI/CD o nową konfigurację klucza licencyjnego
  • Dokumentuj nowe wzorce dla swojego zespołu

Dodatkowe zasoby


Migracja z Aspose.PDF do IronPDF przenosi twój zestaw kodu z wewnętrznego silnika HTML na rendering oparty na Chromium. Eliminacja opakowań MemoryStream, uproszczone wyciąganie tekstu i szersza obsługa CSS3 zapewniają natychmiastowe zyski w produktywności, a klucz oparty na kodzie IronPDF zastępuje obsługę plików .lic.

Zwróć uwagę: Aspose jest zastrzeżonym znakiem towarowym odpowiedniego właściciela. Ta strona nie jest powiązana z, zaakceptowana ani sponsorowana przez Aspose Pty Ltd. Wszystkie nazwy produktów, loga 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ęczników.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta