IRONSOFTWAREHOME
FILMY

Jak zastosować niestandardowe znaki wodne w plikach PDF

Curtis Chau
Curtis Chau
Updated: 19 lipca 2026

ActivePDF to niezawodny zestaw narzędzi do obsługi plików PDF dla programistów .NET. Od momentu przejęcia przez PDFTron w czerwcu 2020 i rebrandingu na Apryse w lutym 2023,ActivePDFjest teraz jednym z kilku marek w szerokim portfolio Apryse. Ten przewodnik oferuje szczegółową, krok po kroku ścieżkę migracji zActivePDFdo IronPDF— nowoczesnej, aktywnie utrzymywanej biblioteki PDF dla .NET, wspierającej .NET Framework 4.6.2 do .NET 9.

Dlaczego warto rozważyć odejście od ActivePDF?

ActivePDF wciąż jest dostarczany, a pakiet NuGet ActivePDF.Toolkit nadal otrzymuje aktualizacje pod marką Apryse, jednak kilka aspektów jego projektowania i pakowania może skłonić zespoły do oceny alternatyw.

Rozważania dotyczące marki i planu rozwoju

ActivePDF jest teraz jedną z marek wewnątrz Apryse, obok flagowego SDK Apryse. Zespoły, które wybrałyActivePDFspecjalnie ze względu na jego skupienie na automatyzacji po stronie serwera, mogą zastanowić się, czy pozostawić SKUs ActivePDF, czy przejść na szersze SDK Apryse z czasem.

Model licencjonowania

Tradycyjne licencjonowanieActivePDFna serwer/rdzeń może wprowadzać trudności w środowiskach chmurowych i kontenerowych, gdzie aplikacje dynamicznie skalują się w infrastrukturze.

Wzorce architektury starszego typu

Powierzchnia APIActivePDFodzwierciedla jego poczynania z COM/natywnego pochodzenia. Workflow CloseOutputFile i zwracane kody całkowite (0 dla sukcesu) wymagają jawnego zarządzania cyklem życia, które nie zawsze jest zgodne z nowoczesnymi idiomami C#, takimi jak using, wyjątki i asynchroniczność.

Rozmieszczenie produktów z wieloma SKU

Renderowanie HTML/URL do PDF funkcjonuje w osobnym produkcie ActivePDF.WebGrabber, podczas gdy manipulacja PDF znajduje się w ActivePDF.Toolkit. Od wersji Toolkit 10, natywne biblioteki nie są już automatycznie kopiowane do folderu systemowego, dlatego konstruktor często wymaga jawnego argumentu CoreLibPath—wzorzec ten może komplikować wdrożenia Docker, CI i bezinstalacyjne.

##ActivePDFa IronPDF: kluczowe różnice

Przed rozpoczęciem procesu migracji zrozumienie podstawowych różnic międzyActivePDFa IronPDF pomaga określić oczekiwania dotyczące wymaganych zmian w kodzie.

AspektActivePDFIronPDF
DostawcaApryse (dawniej PDFTron, przejętyActivePDFw czerwcu 2020)Iron Software, niezależne
Układ produktuMultiple SKUs (Toolkit, WebGrabber, DocConverter, Server, Meridian)Pojedynczy pakiet NuGet IronPdf
InstalacjaPakiet NuGet + ścieżka runtime (CoreLibPath od wersji 10)Pojedynczy pakiet NuGet; natives bundled
Wzorzec APIStan (CloseOutputFile), pochodne COMPłynne, funkcjonalne API
Model licencjiNa serwer / na rdzeńKlucz oparty na kodzie
Wsparcie .NET.NET Framework 4.5+ / .NET Standard 1.0+ / .NET CoreFramework 4.6.2 do .NET Framework 9
Obsługa błędówZwracanie kodów całkowitych (0 = sukces)Standardowe wyjątki .NET Standard
Obsługa asynchronicznaNie natywnyPełna obsługa async/await

Przygotowania przed migracją

Przeprowadź audyt swojego kodu źródłowego

Przed rozpoczęciem migracji należy zidentyfikować wszystkie miejsca użyciaActivePDFw całym rozwiązaniu. Rzeczywiste przestrzenie nazw to APToolkitNET (Toolkit) i APWebGrabber (WebGrabber); Kilka starszych projektów również odwołuje się do ActivePDF.Toolkit poprzez zespół interop COM. Uruchom te polecenia w katalogu rozwiązania:

grep -r "using APToolkitNET" --include="*.cs" .
grep -r "using APWebGrabber" --include="*.cs" .
grep -r "ActivePDF" --include="*.csproj" .
SHELL

Zmiany powodujące niekompatybilność dokumentów

Zrozumienie podstawowych różnic między interfejsami API pomaga w planowaniu strategii migracji:

KategoriaDziałanieActivePDFDziałanie IronPDFDziałanie migracyjne
Podział produktuToolkit (manipulacja) + WebGrabber (renderowanie HTML) sprzedawane osobnoPojedynczy pakiet IronPdfScal oba w jedną bibliotekę
Model obiektowyAPToolkitNET.Toolkit dla PDFów, APWebGrabber.WebGrabber dla HTMLChromePdfRenderer + PdfDocumentRozdzielenie zagadnień
Operacje na plikachCloseOutputFile()Bezpośrednie SaveAs()Usuń niejednoznaczne sformułowania
Natywne środowisko uruchomienioweArgument CoreLibPath od wersji 10NuGet dostarcza natywneUsuń konfigurację ścieżki
Tworzenie stronyMetoda NewPage()Automatycznie z HTMLUsuń wywołania tworzenia stron
Wartości zwracaneKody błędów liczb całkowitychWyjątkiWprowadź try/catch
Jednostki rozmiaru stronyPunkty (612x792 = Letter)Wypisywanie lub milimetryAktualizacja pomiarów

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 JetBrains Rider
  • Dostęp do menedżera pakietów NuGet
  • Klucz licencyjny IronPDF(bezpłatna wersja próbna dostępna na stronie ironpdf.com)

Proces migracji krok po kroku

Krok 1: Zaktualizuj pakiety NuGet

Pakiet na nuget.org to ActivePDF.Toolkit (bieżąca wersja 11.4.4, opublikowany w grudniu 2025). Renderowanie HTML jest dostarczane oddzielnie jako ActivePDF.WebGrabber. Usuń SKUActivePDFi zainstaluj IronPDF:

# RemoveActivePDFpackages
dotnet remove package ActivePDF.Toolkit
dotnet remove package ActivePDF.WebGrabber

# Install IronPDF
dotnet add package IronPdf
SHELL

Alternatywnie, za pomocą konsoli menedżera pakietów Visual Studio:

Uninstall-Package ActivePDF.Toolkit
Uninstall-Package ActivePDF.WebGrabber
Install-Package IronPdf
PowerShell

Dla projektów z ręcznymi odwołaniami do DLL, usuń odwołanie z pliku .csproj:

<!-- Remove this block -->
<Reference Include="APToolkitNET">
    <HintPath>path\to\APToolkitNET.dll</HintPath>
</Reference>
XML

Krok 2: Skonfiguruj klucz licencyjny

Dodaj klucz licencyjny IronPDF podczas uruchamiania aplikacji, przed wykonaniem jakichkolwiek operacji na plikach PDF:

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

// Verify license status
bool isLicensed = IronPdf.License.IsLicensed;

Krok 3: Zaktualizuj odniesienia do przestrzeni nazw

Przeprowadź globalne wyszukiwanie i zamianę w całym rozwiązaniu:

ZnajdźZastąp przez
using APToolkitNET;using IronPdf;
using APWebGrabber;using IronPdf;
APToolkitNET.ToolkitChromePdfRenderer (renderowanie) / PdfDocument (manipulacja)
APWebGrabber.WebGrabberChromePdfRenderer

Kompletna dokumentacja API

Metody tworzenia dokumentów

MetodaActivePDFOdpowiednik IronPDFUwagi
new APToolkitNET.Toolkit()new ChromePdfRenderer() / new PdfDocument(...)IronPDF oddziela renderowanie od manipulacji
new Toolkit(CoreLibPath: path)new ChromePdfRenderer()NuGet dostarcza natywne—brak CoreLibPath
toolkit.OpenOutputFile(path)Nie jest potrzebny odpowiednikWystarczy wywołać SaveAs na końcu
toolkit.CloseOutputFile()Nie jest potrzebny odpowiednikusing zajmuje się sprzątaniem
webGrabber.URL = html; webGrabber.ConvertToPDF()renderer.RenderHtmlAsPdf(html)WebGrabber, nie Toolkit
webGrabber.URL = url; webGrabber.ConvertToPDF()renderer.RenderUrlAsPdf(url)WebGrabber, nie Toolkit

Operacje na plikach

MetodaActivePDFOdpowiednik IronPDFUwagi
toolkit.OpenInputFile(path)PdfDocument.FromFile(path)Wczytaj istniejący plik PDF
toolkit.MergeFile(path, startPage, endPage)PdfDocument.Merge(pdfs)ActivePDF scalany jest w pliku wyjściowym na miejscu;IronPDF zwraca nowy scalony dokument
toolkit.NumPages (właściwość)pdf.PageCountLiczba stron
toolkit.GetPageText(page, 0)pdf.Pages[i].Text / pdf.ExtractAllText()Wyodrębnianie tekstu

Konfiguracja strony

MetodaActivePDFOdpowiednik IronPDF
toolkit.SetPageSize(612, 792)RenderingOptions.PaperSize = PdfPaperSize.Letter
toolkit.SetOrientation("Landscape")RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
toolkit.SetMargins(t, b, l, r)RenderingOptions.MarginTop/Bottom/Left/Right

Metody bezpieczeństwa

MetodaActivePDFOdpowiednik IronPDF
toolkit.SetEncryption(user, owner, 128, 0)pdf.SecuritySettings.OwnerPassword / UserPassword
toolkit.SetPermissions(flags)pdf.SecuritySettings.AllowUserXxx
toolkit.PrintText(x, y, text) (znak wodny na stronę)pdf.ApplyWatermark(html)

Przykłady migracji kodu

Konwersja HTML do PDF

Konwersja ciągów znaków HTML na dokumenty PDF stanowi jeden z najczęstszych scenariuszy generowania plików PDF. Zauważ, że w ActivePDF, renderowanie HTML znajduje się w osobno licencjonowanym produkcie WebGrabber, a nie Toolkit, i WebGrabber renderuje z URL-a lub ścieżki pliku, zamiast z pamięci jako ciąg.

ImplementacjaActivePDF(WebGrabber):

// NuGet: Install-Package ActivePDF.WebGrabber
using APWebGrabber;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        WebGrabber wg = new WebGrabber();

        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
        string tempHtml = Path.Combine(Path.GetTempPath(), "input.html");
        File.WriteAllText(tempHtml, htmlContent);

        wg.URL = tempHtml;
        wg.OutputDirectory = Directory.GetCurrentDirectory();
        wg.OutputFilename = "output.pdf";

        if (wg.ConvertToPDF() == 0)
        {
            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();
        
        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
        
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
        
        Console.WriteLine("PDF created successfully");
    }
}

Podejście IronPDF eliminuje konieczność jawnego zarządzania uchwytami plików, zapewniając jednocześnie czystszy i bardziej czytelny kod. Dla zaawansowanych scenariuszy HTML do PDF, ChromePdfRenderer w IronPDF używa silnika renderującego bazującego na Chromium do idealnego wsparcia dla CSS i JavaScript.

Konwersja adresów URL do formatu PDF

Przechwytywanie stron internetowych jako dokumentów PDF również znajduje się w WebGrabber, a nie Toolkit.

ImplementacjaActivePDF(WebGrabber):

// NuGet: Install-Package ActivePDF.WebGrabber
using APWebGrabber;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        WebGrabber wg = new WebGrabber();

        wg.URL = "https://www.example.com";
        wg.OutputDirectory = Directory.GetCurrentDirectory();
        wg.OutputFilename = "webpage.pdf";

        if (wg.ConvertToPDF() == 0)
        {
            Console.WriteLine("PDF from URL created successfully");
        }
    }
}

Wdrożenie IronPDF:

using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        
        string url = "https://www.example.com";
        
        var pdf = renderer.RenderUrlAsPdf(url);
        pdf.SaveAs("webpage.pdf");
        
        Console.WriteLine("PDF from URL created successfully");
    }
}

Łączenie wielu plików PDF

Łączenie wielu dokumentów PDF w jeden plik pokazuje funkcjonalne podejście IronPDF do manipulacji dokumentami.

ImplementacjaActivePDF(Toolkit):

// NuGet: Install-Package ActivePDF.Toolkit
using APToolkitNET;
using System;

class Program
{
    static void Main()
    {
        using (Toolkit toolkit = new Toolkit())
        {
            if (toolkit.OpenOutputFile("merged.pdf") == 0)
            {
                // MergeFile(FileName, StartPage, EndPage); -1 = end of file
                toolkit.MergeFile("document1.pdf", 1, -1);
                toolkit.MergeFile("document2.pdf", 1, -1);
                toolkit.CloseOutputFile();
                Console.WriteLine("PDFs merged successfully");
            }
        }
    }
}

Wdrożenie 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(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
        
        Console.WriteLine("PDFs merged successfully");
    }
}

Aby uzyskać informacje na temat bardziej zaawansowanych scenariuszy łączenia, w tym selektywnego wyodrębniania stron, zapoznaj się z dokumentacją dotyczącą łączenia plików PDF.

Dodawanie nagłówków i stopek

ImplementacjaActivePDF(WebGrabber):

using APWebGrabber;
using System.IO;

public void CreatePdfWithHeaderFooter(string html, string outputPath)
{
    var wg = new WebGrabber();
    string tempHtml = Path.Combine(Path.GetTempPath(), "input.html");
    File.WriteAllText(tempHtml, html);

    wg.URL = tempHtml;
    wg.HeaderText = "My Document";
    wg.FooterText = "Page [page] of [pages]";
    wg.OutputDirectory = Path.GetDirectoryName(outputPath);
    wg.OutputFilename = Path.GetFileName(outputPath);
    wg.ConvertToPDF();
}

Wdrożenie IronPDF:

using IronPdf;

public void CreatePdfWithHeaderFooter(string html, string outputPath)
{
    var renderer = new ChromePdfRenderer();

    renderer.RenderingOptions.TextHeader = new TextHeaderFooter
    {
        CenterText = "My Document",
        FontSize = 12,
        FontFamily = "Arial"
    };

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

    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(outputPath);
}

IronPDF obsługuje zarówno nagłówki i stopki tekstowe, jak i HTML, zapewniając pełną elastyczność projektowania.

Ochrona hasłem i bezpieczeństwo

ImplementacjaActivePDF(Toolkit):

using APToolkitNET;

public void ProtectPdf(string inputPath, string outputPath, string password)
{
    using (Toolkit toolkit = new Toolkit())
    {
        if (toolkit.OpenOutputFile(outputPath) == 0
            && toolkit.OpenInputFile(inputPath) == 0)
        {
            toolkit.SetEncryption(password, password, 128, 0);
            toolkit.CopyForm(0, 0);
            toolkit.CloseInputFile();
            toolkit.CloseOutputFile();
        }
    }
}

Wdrożenie IronPDF:

using IronPdf;

public void ProtectPdf(string inputPath, string outputPath, string password)
{
    using var pdf = PdfDocument.FromFile(inputPath);

    pdf.SecuritySettings.OwnerPassword = password;
    pdf.SecuritySettings.UserPassword = password;
    pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
    pdf.SecuritySettings.AllowUserCopyPasteContent = false;
    pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

    pdf.SaveAs(outputPath);
}

API ustawień zabezpieczeńIronPDF zapewnia szczegółową kontrolę nad uprawnieniami do dokumentów dzięki silnie typowanym wyliczeniom zamiast flag całkowitoliczbowych.

Wyodrębnianie tekstu

ImplementacjaActivePDF(Toolkit):

using APToolkitNET;
using System.Text;

public string ExtractText(string pdfPath)
{
    var sb = new StringBuilder();

    using (Toolkit toolkit = new Toolkit())
    {
        if (toolkit.OpenInputFile(pdfPath) == 0)
        {
            int pageCount = toolkit.NumPages;
            for (int i = 1; i <= pageCount; i++)
            {
                sb.AppendLine(toolkit.GetPageText(i, 0));
            }
            toolkit.CloseInputFile();
        }
    }

    return sb.ToString();
}

Wdrożenie IronPDF:

using IronPdf;

public string ExtractText(string pdfPath)
{
    using var pdf = PdfDocument.FromFile(pdfPath);
    return pdf.ExtractAllText();
}

Wdrożenie IronPDF sprowadza wyodrębnianie tekstu z wielu wierszy do jednego wywołania metody.

Dodawanie znaków wodnych

ImplementacjaActivePDF(Toolkit — rysowane jako tekst strony na stronę):

using APToolkitNET;

public void AddWatermark(string inputPath, string outputPath, string watermarkText)
{
    using (Toolkit toolkit = new Toolkit())
    {
        if (toolkit.OpenOutputFile(outputPath) == 0
            && toolkit.OpenInputFile(inputPath) == 0)
        {
            int pageCount = toolkit.NumPages;
            for (int i = 1; i <= pageCount; i++)
            {
                toolkit.CopyForm(i, 0);
                toolkit.SetFont("Helvetica", 72);
                toolkit.SetTextColor(200, 200, 200);
                toolkit.PrintText(150, 400, watermarkText);
            }
            toolkit.CloseInputFile();
            toolkit.CloseOutputFile();
        }
    }
}

Wdrożenie IronPDF:

using IronPdf;

public void AddWatermark(string inputPath, string outputPath, string watermarkText)
{
    using var pdf = PdfDocument.FromFile(inputPath);

    pdf.ApplyWatermark(
        $"<h1 style='color:lightgray;font-size:72px;'>{watermarkText}</h1>",
        rotation: 45,
        opacity: 50);

    pdf.SaveAs(outputPath);
}

Funkcja znakowania wodnego oparta na HTML w IronPDF umożliwia stosowanie stylów CSS, co zapewnia pełną kontrolę nad projektem bez konieczności powtarzania czynności na każdej stronie.

Integracja z ASP.NET Core.NET Core

Nowoczesne aplikacje internetowe czerpią znaczne korzyści z bardziej przejrzystych wzorców integracji IronPDF.

WzorzecActivePDF(WebGrabber):

[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    var wg = new APWebGrabber.WebGrabber();
    string tempHtml = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".html");
    System.IO.File.WriteAllText(tempHtml, request.Html);

    wg.URL = tempHtml;
    wg.OutputDirectory = Path.GetTempPath();
    wg.OutputFilename = "temp.pdf";

    if (wg.ConvertToPDF() == 0)
    {
        byte[] bytes = System.IO.File.ReadAllBytes(Path.Combine(Path.GetTempPath(), "temp.pdf"));
        return File(bytes, "application/pdf", "report.pdf");
    }

    return BadRequest("PDF generation failed");
}

Wzór IronPDF:

[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(request.Html);

    return File(pdf.BinaryData, "application/pdf", "report.pdf");
}

IronPDF eliminuje potrzebę tworzenia plików tymczasowych, zwracając dane binarne PDF bezpośrednio z pamięci.

Obsługa asynchroniczna w aplikacjach internetowych

ActivePDF nie obsługuje natywnie operacji asynchronicznych.IronPDF zapewnia pełne możliwości async/await niezbędne dla skalowalnych aplikacji internetowych:

using IronPdf;

public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}

Konfiguracja wstrzykiwania zależności

W przypadku aplikacji .NET 6+ zarejestruj usługi IronPDF w swoim kontenerze DI:

// Program.cs (.NET 6+)
builder.Services.AddSingleton<ChromePdfRenderer>();

// Service wrapper
public interface IPdfService
{
    Task<byte[]> GeneratePdfAsync(string html);
    Task<byte[]> GeneratePdfFromUrlAsync(string url);
}

public class IronPdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public IronPdfService()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
    }

    public async Task<byte[]> GeneratePdfAsync(string html)
    {
        using var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        return pdf.BinaryData;
    }

    public async Task<byte[]> GeneratePdfFromUrlAsync(string url)
    {
        using var pdf = await _renderer.RenderUrlAsPdfAsync(url);
        return pdf.BinaryData;
    }
}

Obsługa błędów Migracja

ActivePDF używa całkowitoliczbowych kodów zwrotnych, które wymagają tabel odnośników.IronPDF wykorzystuje nowoczesną obsługę wyjątków:

Obsługa błędów ActivePDF:

using APToolkitNET;

using (var toolkit = new Toolkit())
{
    int result = toolkit.OpenOutputFile(path);

    if (result != 0)
    {
        // Error - look up the code in "Toolkit Return Results and Error Codes"
        Console.WriteLine($"Error code: {result}");
    }
}

Obsługa błędów w IronPDF:

try
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(path);
}
catch (IronPdf.Exceptions.IronPdfProductException ex)
{
    Console.WriteLine($"IronPDF Error: {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"General Error: {ex.Message}");
}

Wskazówki dotyczące optymalizacji wydajności

Ponowne wykorzystanie instancji renderera

Tworzenie nowego ChromePdfRenderer ma obciążenie inicjalizacyjne. W przypadku operacji wsadowych należy ponownie wykorzystać pojedynczą instancję:

var renderer = new ChromePdfRenderer();
foreach (var html in htmlList)
{
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs($"output_{i}.pdf");
}

Wykorzystanie Async w aplikacjach internetowych

W przypadku aplikacji .NET Core asynchroniczne generowanie plików PDF poprawia przepustowość:

public async Task<IActionResult> GenerateReport()
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return File(pdf.BinaryData, "application/pdf");
}

Właściwa utylizacja zasobów

Zawsze używaj instrukcji using, aby zapewnić prawidłowe sprzątanie:

using var pdf = renderer.RenderHtmlAsPdf(html);
return pdf.BinaryData;

Kompresja obrazów

Zmniejsz rozmiar plików wyjściowych dzięki kompresji obrazów:

using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.CompressImages(85); // 85% quality
pdf.SaveAs("compressed.pdf");

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

Problem: Różnice w rozmiarze stron

ActivePDF WebGrabber używa punktów (612x792 = Letter), podczas gdy IronPDF używa wyliczeń lub milimetrów:

//ActivePDFWebGrabber: Points
wg.PageWidth = 612;
wg.PageHeight = 792;

// IronPDF: Use enum
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
// Or custom in mm:
renderer.RenderingOptions.SetCustomPaperSizeInMillimeters(215.9, 279.4);
C#

Problem: Brak odpowiednika CloseOutputFile

IronPDF wykorzystuje nowoczesny paradygmat bez jawnego zarządzania uchwytami plików:

//ActivePDFToolkit
toolkit.OpenOutputFile(path);
// ... operations ...
toolkit.CloseOutputFile(); // Required!

//IronPDF- no open/close needed
using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(path); // 'using' handles cleanup
C#

Problem: Plik PDF wyświetla się jako pusty

Jeśli treści zależne od JavaScriptu wyświetlają się jako puste, skonfiguruj opóźnienia renderowania:

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.WaitFor.RenderDelay(2000);
// Or wait for element:
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded");

Problem: CSS/obrazy się nie ładują

Skonfiguruj adres URL bazowy dla rozpoznawania ścieżek względnych:

renderer.RenderingOptions.BaseUrl = new Uri("https://yourdomain.com/assets/");

Lista kontrolna po migracji

Po zakończeniu migracji kodu sprawdź, czy:

  • Uruchom wszystkie istniejące testy jednostkowe i integracyjne
  • Porównaj wizualnie pliki PDF z poprzednimi wersjami
  • Przetestuj wszystkie procesy związane z plikami PDF w środowisku testowym
  • Zweryfikuj poprawne działanie licencjonowania (IronPdf.License.IsLicensed)
  • Porównanie wydajności z poprzednią implementacją
  • Usuń stare pliki instalacyjneActivePDFi odwołania do bibliotek DLL
  • Aktualizacja zależności potoku CI/CD
  • Udokumentuj wzorce IronPDF dla swojego zespołu programistów

Dodatkowe zasoby


Przejście zActivePDFna IronPDF unowocześnia infrastrukturę generowania plików PDF dzięki bardziej przejrzystym interfejsom API, lepszej integracji z platformą .NET oraz aktywnemu, długoterminowemu wsparciu technicznemu. Inwestycja w migrację przynosi korzyści w postaci lepszej łatwości utrzymania kodu, możliwości asynchronicznych oraz pewności co do dalszego rozwoju biblioteki PDF.

Zwróć uwagę: ActivePDF i Apryse są zarejestrowanymi znakami towarowymi swoich właścicieli. Ta strona nie jest powiązana, popierana ani sponsorowana przezActivePDFani Apryse. 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ę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