Przejdź do treści stopki
PORóWNANIA PRODUKTóW

IronPDF vs Accusoft PDF Viewer: Która biblioteka C# jest najlepsza do HTML do PDF?

Zarówno IronPDF, jak i Accusoft PDF Viewer konwertują HTML na PDF w środowisku .NET. IronPDF oferuje prostą składnię, lokalne przetwarzanie bez zależności od chmury oraz nieograniczoną liczbę konwersji już od 699 USD. Natomiast Accusoft wymaga połączenia z Internetem i pobiera opłaty za każdą transakcję.

Porównaj IronPDF z Accusoft PDF Viewer

  • Konwersja HTML do PDF
  • Ustaw nagłówek i stopkę dla plików PDF
  • Konwersja pliku PDF na plik graficzny
  • Porównaj licencje, opcje bezpłatnych wersji próbnych i nie tylko

Przegląd

Czym jest IronPDF i jak działa?

IronPDF to biblioteka C# do konwersji HTML na PDF, która umożliwia programistom tworzenie plików PDF ze źródeł takich jak ciąg znaków HTML, strona internetowa i adres URL. Umożliwia również ustawianie właściwości, takich jak znak wodny, zakładka oraz nagłówek i stopka. Ponadto programiści mogą łączyć wiele plików PDF w jeden lub konwertować strony PDF na obrazy i odwrotnie, korzystając z funkcji konwersji obrazów do formatu PDF.

IronPDF jest bezpłatny do celów programistycznych i oferuje 30-dniowy okres próbny wdrożenia w rzeczywistych projektach. Zawiera kompletną dokumentację, przykłady kodu i Dokumentację API, aby pomóc programistom w szybkim rozpoczęciu pracy.

Deweloperzy mogą pobrać przykładowy projekt z tego linku.

Czym jest Accusoft `PrizmDoc` Viewer i jak działa?

PrizmDoc Viewer to interfejs API REST, który obsługuje pliki PDF i zdalnie konwertuje je na inne formaty. PrizmDoc może konwertować ponad 100 różnych formatów plików do PDF i PDF do PNG, JPG, TIFF i SVG. Oferuje również różne opcje podpisu elektronicznego dla aplikacji.

Jak IronPDF i `PrizmDoc` Viewer wypadają w porównaniu?

IronPDF `PrizmDoc` Viewer
Work with [PDF files programmatically](/how-to/csharp-parse-pdf/). Praca z plikami PDF za pomocą kodu.
Supports [.NET Core](/docs/) with [Windows](/get-started/windows/), [Mac](/get-started/macos/), or [Linux](/get-started/linux/). Obsługuje .NET Core na systemach Windows, Mac lub Linux.
[Works Locally](/get-started/installation-overview/) Sends Documents to a [remote server](/get-started/ironpdfengine/).
Work with or without [Asynchronous Programming](/how-to/async/). Must use Asynchronous Programming with `System.Threading.Tasks`.
Works offline once [installed](/get-started/installation-overview/). Requires internet connection for `PrizmDoc` server requests.
Provides many [predefined functions](/features/). Zapewnia kilka predefiniowanych funkcji.
Often requires [minimal lines of code](/tutorials/html-to-pdf/). Często wymaga wielu wierszy kodu.
[Nieograniczona liczba konwersji](/licensing/) na projekt w każdej licencji. Ograniczona liczba transakcji w licencjach hostowanych w chmurze.
[Free for development](/get-started/quickstart/) without time limits. Tylko 300 transakcji w ramach wersji próbnej.

Zainstalujmy obie biblioteki i porównajmy kod.


Krok 1: Instalacja

Jak zainstalować IronPDF w moim projekcie .NET?

Istnieją dwa sposoby instalacji IronPDF w projekcie, przy czym nie ma różnicy między tymi metodami. IronPDF obsługuje różne środowiska, w tym wdrożenia w Azure, AWS Lambda, kontenery Docker oraz aplikacje Blazor.

Jakie są różne sposoby pobrania IronPDF?

Pobierz plik IronPDF.dll i dodaj do niego odwołanie w projekcie. Programiści mogą również użyć instalatora Windows Installer do instalacji w całym systemie. Następnie przestrzeń nazw IronPdf staje się dostępna za pomocą:

using IronPdf;
using IronPdf;
Imports IronPdf
$vbLabelText   $csharpLabel

Teraz programiści mogą łatwo korzystać z funkcji i klas IronPDF, w tym z ChromePdfRenderer do renderowania, edycji dokumentów PDF oraz funkcji zabezpieczeń.

Jak zainstalować IronPDF za pomocą menedżera pakietów NuGet?


Jak zainstalować `PrizmDoc` Viewer od Accusoft?

PrizmDoc Viewer składa się z dwóch części: komponentu po stronie serwera o nazwie PrizmDoc Server, który zachowuje się jak RESTful API, oraz projektu klienta, który wysyła żądania do API i odbiera odpowiedzi. W przeciwieństwie do IronPDF, który działa lokalnie bez zewnętrznych zależności, PrizmDoc wymaga połączenia sieciowego do operacji w chmurze.

Jak uzyskać dostęp do serwera `PrizmDoc`?

PrizmDoc Server to aplikacja po stronie serwera, która otrzymuje podstawowe informacje z dokumentami jako żądania (dane wejściowe) i konwertuje dokumenty do plików PDF, a następnie wysyła przekonwertowane pliki PDF z powrotem jako odpowiedzi (dane wyjściowe). Stanowi on techniczne serce produktu — silnik przetwarzania i konwersji dokumentów. Programiści mogą z niego korzystać na dwa różne sposoby, przy czym oba mają tę samą strukturę programistyczną i wykorzystują te same techniki:

  1. Hostowane samodzielnie:

    Ta opcja wymaga zorganizowania serwera. Pobierz PrizmDoc Server, a następnie zainstaluj go. Czytaj więcej o tym, jak zainstalować PrizmDoc Server na Windows.

    Uwaga: Aby uzyskać lepszą wydajność, wymagane jest co najmniej 32 GB pamięci RAM i 4-rdzeniowy procesor. Natomiast wymagania systemówe IronPDF są znacznie skromniejsze.

  2. Hostowane w chmurze:

    Ta usługa oparta na chmurze eliminuje konieczność organizowania serwera. Aby skorzystać z tej opcji, załóż konto i skopiuj API key z menu API Key na stronie głównej.

Najpierw przeanalizujmy podstawową strukturę pracy z PrizmDoc Viewer w celu konwersji dokumentów do plików PDF poprzez bezpośrednią interakcję z Accusoft server przy użyciu WebClient() w aplikacji konsolowej C#.

Uwaga: Poniższy przykład demonstruje, w jaki sposób PrizmDoc obsługuje pliki PDF. Tekst jest długi, więc możesz pominąć ten przykład i przejść bezpośrednio do porównania.

Jak działa struktura organizacyjna firmy Accusoft?

Ten przykład konwertuje myWebpage.html na sample.pdf. W przeciwieństwie do prostej konwersji HTML do PDF w IronPDF, PrizmDoc wymaga wielu wywołań API.

Uwaga: Biblioteka Newtonsoft.Json musi być zainstalowana i przywoływana w projekcie.

Najpierw dodaj do projektu następujące biblioteki:

using System;
using System.IO;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq; // Install Newtonsoft.Json via NuGet Package Manager
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq; // Install Newtonsoft.Json via NuGet Package Manager
Imports System
Imports System.IO
Imports System.Net
Imports System.Text
Imports System.Threading.Tasks
Imports Newtonsoft.Json.Linq ' Install Newtonsoft.Json via NuGet Package Manager
$vbLabelText   $csharpLabel

Następnie utwórz zmienną publiczną Accusoft API Key i wklej do niej klucz API:

static string ApiKey = "Your-API-KEY";
static string ApiKey = "Your-API-KEY";
Private Shared ApiKey As String = "Your-API-KEY"
$vbLabelText   $csharpLabel

Istnieją 3 kroki postępowania z plikami PDF przy użyciu PrizmDoc Viewer:

  1. Prześlij plik na serwer PrizmDoc.
  2. Przekonwertuj przesłany plik.
  3. Pobierz przekonwertowany plik z serwera PrizmDoc.

Każdy krok obsługiwany jest przez oddzielną funkcję:

static void Main(string[] args)
{
    //---Upload file to Server---
    JObject uploadResults = UploadToServer("myWebpage.html").Result;
    string fileID = (string)uploadResults.SelectToken("fileId");
    string affinityToken = (string)uploadResults.SelectToken("affinityToken");

    //---Convert the uploaded file to PDF---
    JObject convertResults = Convert(affinityToken, fileID).Result;
    string processId = (string)convertResults.SelectToken("processId");
    affinityToken = (string)convertResults.SelectToken("affinityToken");

    //---Check the status that conversion is completed---
    JObject convertStatusResults = ConvertStatus(processId, affinityToken).Result;
    string convertStatus = (string)convertStatusResults.SelectToken("state");

    //---Continuously checking whether conversion completed---
    while (!(convertStatus.Equals("complete")))
    {
        System.Threading.Thread.Sleep(30000);
        convertStatusResults = ConvertStatus(processId, affinityToken).Result;
        convertStatus = (string)convertStatusResults.SelectToken("state");
    }

    //---Download the converted file from server---
    string newFileID = (string)convertStatusResults.SelectToken("output.results[0].fileId");
    DownloadFromServer(affinityToken, newFileID, "sample.pdf").Wait();

    Console.WriteLine("PDF file created successfully...!");
    Console.ReadKey();
}
static void Main(string[] args)
{
    //---Upload file to Server---
    JObject uploadResults = UploadToServer("myWebpage.html").Result;
    string fileID = (string)uploadResults.SelectToken("fileId");
    string affinityToken = (string)uploadResults.SelectToken("affinityToken");

    //---Convert the uploaded file to PDF---
    JObject convertResults = Convert(affinityToken, fileID).Result;
    string processId = (string)convertResults.SelectToken("processId");
    affinityToken = (string)convertResults.SelectToken("affinityToken");

    //---Check the status that conversion is completed---
    JObject convertStatusResults = ConvertStatus(processId, affinityToken).Result;
    string convertStatus = (string)convertStatusResults.SelectToken("state");

    //---Continuously checking whether conversion completed---
    while (!(convertStatus.Equals("complete")))
    {
        System.Threading.Thread.Sleep(30000);
        convertStatusResults = ConvertStatus(processId, affinityToken).Result;
        convertStatus = (string)convertStatusResults.SelectToken("state");
    }

    //---Download the converted file from server---
    string newFileID = (string)convertStatusResults.SelectToken("output.results[0].fileId");
    DownloadFromServer(affinityToken, newFileID, "sample.pdf").Wait();

    Console.WriteLine("PDF file created successfully...!");
    Console.ReadKey();
}
Shared Sub Main(ByVal args() As String)
	'---Upload file to Server---
	Dim uploadResults As JObject = UploadToServer("myWebpage.html").Result
	Dim fileID As String = CStr(uploadResults.SelectToken("fileId"))
	Dim affinityToken As String = CStr(uploadResults.SelectToken("affinityToken"))

	'---Convert the uploaded file to PDF---
	Dim convertResults As JObject = Convert(affinityToken, fileID).Result
	Dim processId As String = CStr(convertResults.SelectToken("processId"))
	affinityToken = CStr(convertResults.SelectToken("affinityToken"))

	'---Check the status that conversion is completed---
	Dim convertStatusResults As JObject = ConvertStatus(processId, affinityToken).Result
	Dim convertStatus As String = CStr(convertStatusResults.SelectToken("state"))

	'---Continuously checking whether conversion completed---
	Do While Not (convertStatus.Equals("complete"))
		System.Threading.Thread.Sleep(30000)
		convertStatusResults = ConvertStatus(processId, affinityToken).Result
		convertStatus = CStr(convertStatusResults.SelectToken("state"))
	Loop

	'---Download the converted file from server---
	Dim newFileID As String = CStr(convertStatusResults.SelectToken("output.results[0].fileId"))
	DownloadFromServer(affinityToken, newFileID, "sample.pdf").Wait()

	Console.WriteLine("PDF file created successfully...!")
	Console.ReadKey()
End Sub
$vbLabelText   $csharpLabel

1. Prześlij plik na serwer:

public static async Task<JObject> UploadToServer(string fileToUpload)
{
    FileInfo input = new FileInfo(fileToUpload);
    if (input == null)
    {
        throw new ArgumentException("Missing parameter input", nameof(input));
    }
    var fileName = input.Name;
    var endpoint = new Uri("___PROTECTED_URL_123___");
    using (var client = new WebClient())
    {
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Content-Type", "application/octet-stream");
        using (var reader = new BinaryReader(input.OpenRead()))
        {
            var data = reader.ReadBytes((int)reader.BaseStream.Length);
            var results = await client.UploadDataTaskAsync(endpoint, "POST", data);
            string getResult = Encoding.ASCII.GetString(results);
            return JObject.Parse(getResult);
        }
    }
}
public static async Task<JObject> UploadToServer(string fileToUpload)
{
    FileInfo input = new FileInfo(fileToUpload);
    if (input == null)
    {
        throw new ArgumentException("Missing parameter input", nameof(input));
    }
    var fileName = input.Name;
    var endpoint = new Uri("___PROTECTED_URL_123___");
    using (var client = new WebClient())
    {
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Content-Type", "application/octet-stream");
        using (var reader = new BinaryReader(input.OpenRead()))
        {
            var data = reader.ReadBytes((int)reader.BaseStream.Length);
            var results = await client.UploadDataTaskAsync(endpoint, "POST", data);
            string getResult = Encoding.ASCII.GetString(results);
            return JObject.Parse(getResult);
        }
    }
}
Public Shared Async Function UploadToServer(fileToUpload As String) As Task(Of JObject)
    Dim input As New FileInfo(fileToUpload)
    If input Is Nothing Then
        Throw New ArgumentException("Missing parameter input", NameOf(input))
    End If

    Dim fileName = input.Name
    Dim endpoint As New Uri("___PROTECTED_URL_123___")
    Using client As New WebClient()
        client.Headers.Add("acs-api-key", ApiKey)
        client.Headers.Add("Content-Type", "application/octet-stream")
        Using reader As New BinaryReader(input.OpenRead())
            Dim data = reader.ReadBytes(CInt(reader.BaseStream.Length))
            Dim results = Await client.UploadDataTaskAsync(endpoint, "POST", data)
            Dim getResult As String = Encoding.ASCII.GetString(results)
            Return JObject.Parse(getResult)
        End Using
    End Using
End Function
$vbLabelText   $csharpLabel

2. Przekonwertuj przesłany plik do formatu PDF:

public static async Task<JObject> Convert(string affinityToken, string fileID)
{
    var endpoint = new Uri("___PROTECTED_URL_124___");
    using (var client = new WebClient())
    {
        client.Headers.Add("Content-Type", "application/json");
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        JObject myJson =
            new JObject(
                new JProperty("input",
                    new JObject(
                        new JProperty("sources",
                            new JArray(
                                new JObject(
                                    new JProperty("fileId", fileID)
                                )
                            )
                        ),
                        new JProperty("dest",
                            new JObject(
                                new JProperty("format", "pdf")
                            )
                        )
                    )
                )
            );
        string results = await client.UploadStringTaskAsync(endpoint, "POST", myJson.ToString());
        return JObject.Parse(results);
    }
}
public static async Task<JObject> Convert(string affinityToken, string fileID)
{
    var endpoint = new Uri("___PROTECTED_URL_124___");
    using (var client = new WebClient())
    {
        client.Headers.Add("Content-Type", "application/json");
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        JObject myJson =
            new JObject(
                new JProperty("input",
                    new JObject(
                        new JProperty("sources",
                            new JArray(
                                new JObject(
                                    new JProperty("fileId", fileID)
                                )
                            )
                        ),
                        new JProperty("dest",
                            new JObject(
                                new JProperty("format", "pdf")
                            )
                        )
                    )
                )
            );
        string results = await client.UploadStringTaskAsync(endpoint, "POST", myJson.ToString());
        return JObject.Parse(results);
    }
}
Public Shared Async Function Convert(affinityToken As String, fileID As String) As Task(Of JObject)
    Dim endpoint = New Uri("___PROTECTED_URL_124___")
    Using client = New WebClient()
        client.Headers.Add("Content-Type", "application/json")
        client.Headers.Add("acs-api-key", ApiKey)
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken)
        Dim myJson As JObject =
            New JObject(
                New JProperty("input",
                    New JObject(
                        New JProperty("sources",
                            New JArray(
                                New JObject(
                                    New JProperty("fileId", fileID)
                                )
                            )
                        ),
                        New JProperty("dest",
                            New JObject(
                                New JProperty("format", "pdf")
                            )
                        )
                    )
                )
            )
        Dim results As String = Await client.UploadStringTaskAsync(endpoint, "POST", myJson.ToString())
        Return JObject.Parse(results)
    End Using
End Function
$vbLabelText   $csharpLabel

Poniższy JSON jest wartością wynikową obiektu myJson:

{
  "input": {
    "sources": 
    [
      {"fileId": "Auto Generated FileId Value"}
    ],
    "dest": {
      "format": "pdf"
    }
  }
}

Sprawdź, czy konwersja została zakończona

public static async Task<JObject> ConvertStatus(string processId, string affinityToken)
{
    string endpoint = "___PROTECTED_URL_125___" + processId;
    using (var client = new WebClient())
    {
        client.BaseAddress = endpoint;
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        string results = await client.DownloadStringTaskAsync(endpoint);
        return JObject.Parse(results);
    }
}
public static async Task<JObject> ConvertStatus(string processId, string affinityToken)
{
    string endpoint = "___PROTECTED_URL_125___" + processId;
    using (var client = new WebClient())
    {
        client.BaseAddress = endpoint;
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        string results = await client.DownloadStringTaskAsync(endpoint);
        return JObject.Parse(results);
    }
}
Public Shared Async Function ConvertStatus(processId As String, affinityToken As String) As Task(Of JObject)
    Dim endpoint As String = "___PROTECTED_URL_125___" & processId
    Using client As New WebClient()
        client.BaseAddress = endpoint
        client.Headers.Add("acs-api-key", ApiKey)
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken)
        Dim results As String = Await client.DownloadStringTaskAsync(endpoint)
        Return JObject.Parse(results)
    End Using
End Function
$vbLabelText   $csharpLabel

3. Pobierz przekonwertowany plik z serwera

public static async Task DownloadFromServer(string affinityToken, string fileId, string outfile)
{
    var endpoint = new Uri("___PROTECTED_URL_126___" + fileId);

    using (var client = new WebClient())
    {
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        FileInfo output = new FileInfo(outfile);

        using (var writeStream = output.Create())
        {
            var results = await client.DownloadDataTaskAsync(endpoint);
            await writeStream.WriteAsync(results, 0, results.Length);
        }
    }
}
public static async Task DownloadFromServer(string affinityToken, string fileId, string outfile)
{
    var endpoint = new Uri("___PROTECTED_URL_126___" + fileId);

    using (var client = new WebClient())
    {
        client.Headers.Add("acs-api-key", ApiKey);
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken);
        FileInfo output = new FileInfo(outfile);

        using (var writeStream = output.Create())
        {
            var results = await client.DownloadDataTaskAsync(endpoint);
            await writeStream.WriteAsync(results, 0, results.Length);
        }
    }
}
Public Shared Async Function DownloadFromServer(affinityToken As String, fileId As String, outfile As String) As Task
    Dim endpoint As New Uri("___PROTECTED_URL_126___" & fileId)

    Using client As New WebClient()
        client.Headers.Add("acs-api-key", ApiKey)
        client.Headers.Add("Accusoft-Affinity-Token", affinityToken)
        Dim output As New FileInfo(outfile)

        Using writeStream As FileStream = output.Create()
            Dim results As Byte() = Await client.DownloadDataTaskAsync(endpoint)
            Await writeStream.WriteAsync(results, 0, results.Length)
        End Using
    End Using
End Function
$vbLabelText   $csharpLabel

Powyższy przykład wymaga znacznego nakładu pracy. Aby zminimalizować nakład pracy, firma Accusoft wprowadziła bibliotekę .NET o nazwie Accusoft.PrizmDocServerSDK, stanowiącą opakowanie wokół interfejsu API PrizmDoc Server REST. Przyjrzyjmy się, jak zainstalować i używać tej biblioteki w projektach .NET.

Jak zainstalować Accusoft.`PrizmDocServer`SDK?

Istnieją dwa sposoby instalacji opakowania.

  • Konsola menedżera pakietów:

    Jeśli korzystasz z konsoli menedżera pakietów, uruchom następujące polecenie:

    _CODEBLOCK10

  • Zarządzanie pakietami dla rozwiązania:

    Jeśli korzystasz z GUI NuGet Package Manager, wyszukaj Accusoft.PrizmDocServerSDK w pasku wyszukiwania i zainstaluj go.

Teraz programiści mogą łatwo uzyskać dostęp do przestrzeni nazw Accusoft.PrizmDocServer i korzystać z niej:

using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer;
Imports Accusoft.PrizmDocServer
$vbLabelText   $csharpLabel

Poradniki "Jak to zrobić"

Jak IronPDF i PrizmDoc Viewer porównują się w przykładach kodu?

Po zapoznaniu się z wprowadzeniem i instalacją obu komponentów nadszedł czas, aby rozpocząć pracę z nimi. Poniższe przykłady pokazują wdrożenie z wykorzystaniem obu komponentów, co pomaga zrozumieć struktury programowania i określić, które z nich najlepiej pasują do wymagań projektu.


Jak przekonwertować HTML do PDF przy użyciu IronPDF vs PrizmDoc Viewer?

Na potrzeby tego porównania przekonwertujmy stronę internetową o nazwie myWebPage.html na plik PDF i zapiszmy go w lokalizacji docelowej. Silnik renderujący IronPDF dla przeglądarki Chrome zapewnia konwersję z idealną dokładnością pikselową oraz pełną obsługę CSS, JavaScript i czcionek internetowych.

W jaki sposób IronPDF konwertuje HTML na PDF?

using IronPdf;

static void Main(string[] args)
{
    // Create rendering converter
    var converter = new ChromePdfRenderer();
    // Render HTML file to PDF
    using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html");
    // Save to target location
    PDF.SaveAs("sample.pdf");
}
using IronPdf;

static void Main(string[] args)
{
    // Create rendering converter
    var converter = new ChromePdfRenderer();
    // Render HTML file to PDF
    using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html");
    // Save to target location
    PDF.SaveAs("sample.pdf");
}
Imports IronPdf

Shared Sub Main(ByVal args() As String)
	' Create rendering converter
	Dim converter = New ChromePdfRenderer()
	' Render HTML file to PDF
	Dim PDF = converter.RenderHTMLFileAsPdf("myWebPage.html")
	' Save to target location
	PDF.SaveAs("sample.pdf")
End Sub
$vbLabelText   $csharpLabel

Powyższy kod tworzy plik sample.pdf i zapisuje go w folderze bin>debug projektu. IronPDF obsługuje również ciągi znaków HTML, adresy URL, a nawet pliki ZIP zawierające HTML jako źródła danych wejściowych.

Deweloperzy mogą również określić dowolną ścieżkę, taką jak ta: PDF.SaveAs("E:/sample.pdf"); lub zapisać do memory stream dla wdrożeń w chmurze.

Dowiedz się więcej o pracy z IronPDF w zakresie obsługi plików PDF.

Teraz wykonajmy to samo zadanie przy użyciu PrizmDoc Viewer dla porównania.

Jak PrizmDoc Viewer konwertuje HTML do PDF?

W sekcji instalacji przeglądarki PrizmDoc omówiono uzyskanie Accusoft API Key. Oto jak z niego korzystać.

Najpierw należy wysłać żądanie do serwera PrizmDoc i otrzymać odpowiedź. Proces ten wymaga czasu i programowania asynchronicznego. IronPDF obsługuje również metody asynchroniczne w celu poprawy wydajności.

Uwaga: Upewnij się, że system jest podłączony do Internetu podczas tworzenia plików PDF przy użyciu usług w chmurze PrizmDoc Viewer.

using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    ChromePdfRenderer().GetAwaiter().GetResult();
}

private static async Task ChromePdfRenderer()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_127___", "Your-API-KEY");
    // Specify HTML file and convert it to a PDF.
    ConversionResult result = await prizmDocServer.ConvertToPdfAsync("myWebPage.html");
    // Save PDF file to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    ChromePdfRenderer().GetAwaiter().GetResult();
}

private static async Task ChromePdfRenderer()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_127___", "Your-API-KEY");
    // Specify HTML file and convert it to a PDF.
    ConversionResult result = await prizmDocServer.ConvertToPdfAsync("myWebPage.html");
    // Save PDF file to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
Imports Accusoft.PrizmDocServer
Imports Accusoft.PrizmDocServer.Conversion

Module Program
    Sub Main(args As String())
        ChromePdfRenderer().GetAwaiter().GetResult()
    End Sub

    Private Async Function ChromePdfRenderer() As Task
        ' Instantiate PrizmDocServerClient object
        Dim prizmDocServer = New PrizmDocServerClient("___PROTECTED_URL_127___", "Your-API-KEY")
        ' Specify HTML file and convert it to a PDF.
        Dim result As ConversionResult = Await prizmDocServer.ConvertToPdfAsync("myWebPage.html")
        ' Save PDF file to the target location
        Await result.RemoteWorkFile.SaveAsync("sample.pdf")
    End Function
End Module
$vbLabelText   $csharpLabel

Czytaj więcej o pracy z PrizmDoc Viewer.

Która biblioteka zapewnia prostszą konwersję HTML do PDF?

Te przykłady pokazują, że IronPDF oferuje prostsze podejście do tworzenia plików PDF i wymaga mniej czasu. IronPDF zapewnia również opcje renderowania umożliwiające precyzyjne dostosowanie wyniku, w tym niestandardowe rozmiary papieru, marginesy i ustawienia okna wyświetlania.


Jak konwertować obrazy do formatu PDF za pomocą IronPDF vs PrizmDoc Viewer?

To porównanie pokazuje, jak utworzyć plik PDF z obrazu znajdującego się w folderze debug projektu. Programiści zaczynają od IronPDF.

W jaki sposób IronPDF konwertuje obrazy do formatu PDF?

using IronPdf;

static void Main(string[] args)
{
    // Specify the image to be converted
    using var converted = ImageToPdfConverter.ImageToPdf("google.png");
    // Save PDF file to the target location
    converted.SaveAs("sample.pdf");
}
using IronPdf;

static void Main(string[] args)
{
    // Specify the image to be converted
    using var converted = ImageToPdfConverter.ImageToPdf("google.png");
    // Save PDF file to the target location
    converted.SaveAs("sample.pdf");
}
Imports IronPdf

Shared Sub Main(ByVal args() As String)
	' Specify the image to be converted
	Dim converted = ImageToPdfConverter.ImageToPdf("google.png")
	' Save PDF file to the target location
	converted.SaveAs("sample.pdf")
End Sub
$vbLabelText   $csharpLabel

IronPDF obsługuje również konwersję plików TIFF z wieloma ramkami, osadzanie obrazów z usługi Azure Blob Storage oraz osadzanie obrazów w formacie Base64.

Wynik:

Ten zrzut ekranu pokazuje nowo utworzony plik PDF sample.pdf przy użyciu powyższego kodu:

Dokument PDF przedstawiający logo Google wyśrodkowane na białym tle, demonstrujący możliwość konwersji obrazu do formatu PDF przez IronPDF

Tworzenie pliku PDF z obrazu za pomocą IronPDF jest proste. Teraz wykonajmy to samo zadanie przy użyciu przeglądarki PrizmDoc i sprawdźmy wygenerowany przez nią plik PDF.

Jak PrizmDoc Viewer konwertuje obrazy do PDF?

using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    ImageToPDF().GetAwaiter().GetResult();
}

private static async Task ImageToPDF()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_128___", "Your-API-KEY");
    // Specify the image to be converted
    ConversionResult results = await prizmDocServer.ConvertToPdfAsync("google.png");
    // Save PDF file to the target location
    await results.RemoteWorkFile.SaveAsync("sample.pdf");
}
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    ImageToPDF().GetAwaiter().GetResult();
}

private static async Task ImageToPDF()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_128___", "Your-API-KEY");
    // Specify the image to be converted
    ConversionResult results = await prizmDocServer.ConvertToPdfAsync("google.png");
    // Save PDF file to the target location
    await results.RemoteWorkFile.SaveAsync("sample.pdf");
}
Imports Accusoft.PrizmDocServer
Imports Accusoft.PrizmDocServer.Conversion

Module Module1

    Sub Main()
        ImageToPDF().GetAwaiter().GetResult()
    End Sub

    Private Async Function ImageToPDF() As Task
        ' Instantiate PrizmDocServerClient object
        Dim prizmDocServer As New PrizmDocServerClient("___PROTECTED_URL_128___", "Your-API-KEY")
        ' Specify the image to be converted
        Dim results As ConversionResult = Await prizmDocServer.ConvertToPdfAsync("google.png")
        ' Save PDF file to the target location
        Await results.RemoteWorkFile.SaveAsync("sample.pdf")
    End Function

End Module
$vbLabelText   $csharpLabel

Wynik: Ten zrzut ekranu pokazuje nowo utworzony plik PDF sample.pdf z powyższego kodu:

PDF viewer displaying the Google logo on a gray background, showing `PrizmDoc`'s image conversion result

Która biblioteka wymaga mniej kodu do konwersji obrazu do formatu PDF?

IronPDF wymaga tylko dwóch wierszy kodu. W przeciwieństwie do tego, korzystanie z serwera PrizmDoc wiąże się z większą ilością linii kodu z programowaniem asynchronicznym. Wynik działania IronPDF automatycznie zapewnia również gotowy do użycia dokument na całej stronie. IronPDF oferuje dodatkowe opcje pozycjonowania obrazów i konwersji wielu obrazów.


Jak scalić wiele plików PDF za pomocą IronPDF vs PrizmDoc Viewer?

Na potrzeby tego porównania przyjmijmy, że istnieją trzy pliki PDF o nazwach A.pdf, B.pdf i C.pdf. Zadaniem jest połączenie ich w jeden plik PDF. Oba komponenty mogą wykonać to zadanie. Najpierw przykład pokazuje, jak to zrobić przy użyciu IronPDF.

W jaki sposób IronPDF łączy pliki PDF?

using IronPdf;
using System.Collections.Generic;

static void Main(string[] args)
{
    // Create rendering converter  
    var Renderer = new IronPdf.ChromePdfRenderer();
    // Create a list of pdf files
    var PDFs = new List<PdfDocument>();
    PDFs.Add(PdfDocument.FromFile("A.pdf"));
    PDFs.Add(PdfDocument.FromFile("B.pdf"));
    PDFs.Add(PdfDocument.FromFile("C.pdf"));
    // Merge the list of pdf file
    using PdfDocument PDF = PdfDocument.Merge(PDFs);
    // Save merged file to the target location
    PDF.SaveAs("sample.pdf");

    foreach(var pdf in PDFs)
    {
        pdf.Dispose();
    }
}
using IronPdf;
using System.Collections.Generic;

static void Main(string[] args)
{
    // Create rendering converter  
    var Renderer = new IronPdf.ChromePdfRenderer();
    // Create a list of pdf files
    var PDFs = new List<PdfDocument>();
    PDFs.Add(PdfDocument.FromFile("A.pdf"));
    PDFs.Add(PdfDocument.FromFile("B.pdf"));
    PDFs.Add(PdfDocument.FromFile("C.pdf"));
    // Merge the list of pdf file
    using PdfDocument PDF = PdfDocument.Merge(PDFs);
    // Save merged file to the target location
    PDF.SaveAs("sample.pdf");

    foreach(var pdf in PDFs)
    {
        pdf.Dispose();
    }
}
Imports IronPdf
Imports System.Collections.Generic

Shared Sub Main(ByVal args() As String)
	' Create rendering converter  
	Dim Renderer = New IronPdf.ChromePdfRenderer()
	' Create a list of pdf files
	Dim PDFs = New List(Of PdfDocument)()
	PDFs.Add(PdfDocument.FromFile("A.pdf"))
	PDFs.Add(PdfDocument.FromFile("B.pdf"))
	PDFs.Add(PdfDocument.FromFile("C.pdf"))
	' Merge the list of pdf file
	Using PDF As PdfDocument = PdfDocument.Merge(PDFs)
		' Save merged file to the target location
		PDF.SaveAs("sample.pdf")
	
'INSTANT VB NOTE: The variable pdf was renamed since Visual Basic will not allow local variables with the same name as parameters or other local variables:
		For Each .pdf_Conflict In PDFs
			.pdf_Conflict.Dispose()
		Next pdf_Conflict
	End Using
End Sub
$vbLabelText   $csharpLabel

Powyższy kod tworzy plik sample.pdf, który łączy A.pdf, B.pdf i C.pdf. IronPDF obsługuje również dodawanie i kopiowanie stron między plikami PDF oraz dzielenie plików PDF.

Teraz wykonajmy to samo zadanie przy użyciu przeglądarki PrizmDoc.

Jak PrizmDoc Viewer łączy pliki PDF?

using System.Threading.Tasks;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    PdfMerge().GetAwaiter().GetResult();
}

private static async Task PdfMerge()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_129___", "Your-API-KEY");
    // Pass the list of pdf files to PrizmDoc Server
    ConversionResult result = await prizmDocServer.CombineToPdfAsync(
        new []
        {
            new ConversionSourceDocument("A.pdf"),
            new ConversionSourceDocument("B.pdf"),
            new ConversionSourceDocument("C.pdf"),
        });
    // Save merged file to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
using System.Threading.Tasks;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    PdfMerge().GetAwaiter().GetResult();
}

private static async Task PdfMerge()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_129___", "Your-API-KEY");
    // Pass the list of pdf files to PrizmDoc Server
    ConversionResult result = await prizmDocServer.CombineToPdfAsync(
        new []
        {
            new ConversionSourceDocument("A.pdf"),
            new ConversionSourceDocument("B.pdf"),
            new ConversionSourceDocument("C.pdf"),
        });
    // Save merged file to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
Imports System.Threading.Tasks
Imports Accusoft.PrizmDocServer
Imports Accusoft.PrizmDocServer.Conversion

Module Module1
    Sub Main()
        PdfMerge().GetAwaiter().GetResult()
    End Sub

    Private Async Function PdfMerge() As Task
        ' Instantiate PrizmDocServerClient object
        Dim prizmDocServer = New PrizmDocServerClient("___PROTECTED_URL_129___", "Your-API-KEY")
        ' Pass the list of pdf files to PrizmDoc Server
        Dim result As ConversionResult = Await prizmDocServer.CombineToPdfAsync(
            New ConversionSourceDocument() {
                New ConversionSourceDocument("A.pdf"),
                New ConversionSourceDocument("B.pdf"),
                New ConversionSourceDocument("C.pdf")
            })
        ' Save merged file to the target location
        Await result.RemoteWorkFile.SaveAsync("sample.pdf")
    End Function
End Module
$vbLabelText   $csharpLabel

Powyższy kod tworzy również plik sample.pdf, który łączy pliki A.pdf, B.pdf i C.pdf.


Jak dodać nagłówki i stopki do plików PDF za pomocą IronPDF vs PrizmDoc Viewer?

Dla tego porównania załóżmy, że istnieje prosty WebPage o nazwie myWebPage.html z następującym HTML i CSS:

<html>
<head>
    <style>
        li {
            font-size: x-large;
            color: rgba(156, 89, 13, 0.897);
            list-style: square;
        }
    </style>
</head>
<body>
    <h1 style="text-align: center;">Hello World..!</h1>
    <h1>Main Menu</h1>
    <ul>
        <li>SubMenu 1</li>
        <li>SubMenu 2</li>
        <li>SubMenu 3</li>
        <li>SubMenu 4</li>
        <li>SubMenu 5</li>
    </ul>
</body>
</html>
<html>
<head>
    <style>
        li {
            font-size: x-large;
            color: rgba(156, 89, 13, 0.897);
            list-style: square;
        }
    </style>
</head>
<body>
    <h1 style="text-align: center;">Hello World..!</h1>
    <h1>Main Menu</h1>
    <ul>
        <li>SubMenu 1</li>
        <li>SubMenu 2</li>
        <li>SubMenu 3</li>
        <li>SubMenu 4</li>
        <li>SubMenu 5</li>
    </ul>
</body>
</html>
HTML

Celem jest przekonwertowanie tego WebPage na plik PDF z następującymi właściwościami nagłówka i stopki:

  • Page Title po lewej stronie nagłówka
  • DateTime po prawej stronie nagłówka
  • Page Number of Total Pages po prawej stronie stopki

Najpierw przyjrzyjmy się, jak IronPDF obsługuje nagłówki i stopki.

Jak IronPDF obsługuje nagłówki i stopki w plikach PDF?

Aby obsługiwać nagłówki i stopki plików PDF, IronPDF udostępnia właściwość klasy ChromePdfRenderer o nazwie RenderingOptions, która może być używana w następujący sposób:

  • Dla nagłówka:

    _CODEBLOCK19

  • W stopce:

    _CODEBLOCK20

Podczas inicjowania TextHeaderFooter() można ustawić następujące właściwości:

  • CenterText do drukowania tekstu na środku nagłówka lub stopki
  • LeftText do drukowania tekstu po lewej stronie nagłówka lub stopki
  • RightText do drukowania tekstu po prawej stronie nagłówka lub stopki
  • DrawDividerLine rysuje linię oddzielającą zawartość strony od nagłówka lub stopki
  • FontFamily do określenia rodziny czcionek nagłówka lub stopki
  • FontSize, aby określić rozmiar czcionki nagłówka lub stopki
  • Spacing dostosowuje odstęp między zawartością strony a nagłówkiem lub stopką

Następujące predefiniowane atrybuty pomagają ustawić zawartość nagłówka lub stopki. Są one zapisane w nawiasach klamrowych { }:

  • {page} drukuje bieżący numer strony w nagłówku lub stopce
  • {total-pages} drukuje całkowitą liczbę stron w nagłówku lub stopce
  • {url} drukuje adres URL renderowanej strony
  • {date} drukuje bieżącą datę w nagłówku lub stopce
  • {time} drukuje aktualny czas w nagłówku lub stopce
  • {html-title} drukuje tytuł renderowanej strony internetowej w nagłówku lub stopce
  • {pdf-title} drukuje tytuł dokumentu w nagłówku lub stopce

Czytaj więcej w szczegółach na temat pracy z nagłówkami i stopkami przy użyciu IronPDF. IronPDF obsługuje również nagłówki i stopki HTML dla bardziej złożonych projektów.

Poniższy przykład implementuje przypadek użycia i demonstruje, jak korzystać z powyższych właściwości:

using IronPdf;

static void Main(string[] args)
{
    // Create rendering converter
    var converter = new ChromePdfRenderer();
    // Setting Header properties
    converter.RenderingOptions.TextHeader = new TextHeaderFooter()
    {
        DrawDividerLine = true,
        LeftText = "Page Title",
        RightText = "{date} {time}",
        FontSize = 13
    };
    // Setting footer properties
    converter.RenderingOptions.TextFooter = new TextHeaderFooter()
    {
        RightText = "Page {page} of {total-pages}",
        FontSize = 12
    };
    // Specify the file to be converted
    using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html");
    // Save to target location
    PDF.SaveAs("sample.pdf");
}
using IronPdf;

static void Main(string[] args)
{
    // Create rendering converter
    var converter = new ChromePdfRenderer();
    // Setting Header properties
    converter.RenderingOptions.TextHeader = new TextHeaderFooter()
    {
        DrawDividerLine = true,
        LeftText = "Page Title",
        RightText = "{date} {time}",
        FontSize = 13
    };
    // Setting footer properties
    converter.RenderingOptions.TextFooter = new TextHeaderFooter()
    {
        RightText = "Page {page} of {total-pages}",
        FontSize = 12
    };
    // Specify the file to be converted
    using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html");
    // Save to target location
    PDF.SaveAs("sample.pdf");
}
Imports IronPdf

Shared Sub Main(ByVal args() As String)
	' Create rendering converter
	Dim converter = New ChromePdfRenderer()
	' Setting Header properties
	converter.RenderingOptions.TextHeader = New TextHeaderFooter() With {
		.DrawDividerLine = True,
		.LeftText = "Page Title",
		.RightText = "{date} {time}",
		.FontSize = 13
	}
	' Setting footer properties
	converter.RenderingOptions.TextFooter = New TextHeaderFooter() With {
		.RightText = "Page {page} of {total-pages}",
		.FontSize = 12
	}
	' Specify the file to be converted
	Dim PDF = converter.RenderHTMLFileAsPdf("myWebPage.html")
	' Save to target location
	PDF.SaveAs("sample.pdf")
End Sub
$vbLabelText   $csharpLabel

Wynik: Zrzut ekranu nowo utworzonego pliku PDF sample.pdf za pomocą powyższego kodu:

Dokument PDF z niestandardowym nagłówkiem pokazującym

Praca z nagłówkami i stopkami przy użyciu IronPDF wymaga intuicyjnego języka podczas tworzenia plików PDF. Teraz przykład pokazuje, jak PrizmDoc Viewer obsługuje nagłówki i stopki.

Jak przeglądarka `PrizmDoc` radzi sobie z nagłówkami i stopkami plików PDF?

PrizmDoc Viewer zapewnia klasę HeaderFooterOptions do obsługi nagłówków i stopek, z następującymi właściwościami:

  • Linie określają linie dla nagłówka i stopki, gdzie każda linia ma następujące właściwości:
    • Left drukuje tekst po lewej stronie linii nagłówka lub stopki
    • Center drukuje tekst na środku linii nagłówka lub stopki
    • Right drukuje tekst po prawej stronie linii nagłówka lub stopki
  • FontFamily, aby określić rodzinę czcionki tekstu nagłówka lub stopki
  • FontSize, aby określić rozmiar czcionki tekstu nagłówka lub stopki
  • Color, aby określić kolor tekstu nagłówka lub stopki

Czytaj więcej o ustawianiu nagłówków i stopek stron PDF przy użyciu serwera PrizmDoc.

Przykład pokazuje, jak zaimplementować przypadek użycia przy użyciu powyższych właściwości:

using System.Threading.Tasks;
using System.Collections.Generic;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    SetHeaderFooter().GetAwaiter().GetResult();
}

private static async Task SetHeaderFooter()
{
    // Instantiate PrizmDocServerClient object with Header and footer properties
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_130___", "Your-API-KEY");

    ConversionResult result = await prizmDocServer.ConvertToPdfAsync(
        "myWebPage.html",
        header: new HeaderFooterOptions
        {
            Lines = new List<HeaderFooterLine>
            {
                new HeaderFooterLine { Left = "Page Title", Right = DateTime.Now.ToString() }
            },
        },
        footer: new HeaderFooterOptions
        {
            Lines = new List<HeaderFooterLine>
            {
                new HeaderFooterLine { Right = "Page {{pageNumber}} of {{pageCount}}" },
            },
        });

    // Save to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
using System.Threading.Tasks;
using System.Collections.Generic;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    SetHeaderFooter().GetAwaiter().GetResult();
}

private static async Task SetHeaderFooter()
{
    // Instantiate PrizmDocServerClient object with Header and footer properties
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_130___", "Your-API-KEY");

    ConversionResult result = await prizmDocServer.ConvertToPdfAsync(
        "myWebPage.html",
        header: new HeaderFooterOptions
        {
            Lines = new List<HeaderFooterLine>
            {
                new HeaderFooterLine { Left = "Page Title", Right = DateTime.Now.ToString() }
            },
        },
        footer: new HeaderFooterOptions
        {
            Lines = new List<HeaderFooterLine>
            {
                new HeaderFooterLine { Right = "Page {{pageNumber}} of {{pageCount}}" },
            },
        });

    // Save to the target location
    await result.RemoteWorkFile.SaveAsync("sample.pdf");
}
Imports System.Threading.Tasks
Imports System.Collections.Generic
Imports Accusoft.PrizmDocServer
Imports Accusoft.PrizmDocServer.Conversion

Module Program
    Sub Main(args As String())
        SetHeaderFooter().GetAwaiter().GetResult()
    End Sub

    Private Async Function SetHeaderFooter() As Task
        ' Instantiate PrizmDocServerClient object with Header and footer properties
        Dim prizmDocServer = New PrizmDocServerClient("___PROTECTED_URL_130___", "Your-API-KEY")

        Dim result As ConversionResult = Await prizmDocServer.ConvertToPdfAsync(
            "myWebPage.html",
            header:=New HeaderFooterOptions With {
                .Lines = New List(Of HeaderFooterLine) From {
                    New HeaderFooterLine With {.Left = "Page Title", .Right = DateTime.Now.ToString()}
                }
            },
            footer:=New HeaderFooterOptions With {
                .Lines = New List(Of HeaderFooterLine) From {
                    New HeaderFooterLine With {.Right = "Page {{pageNumber}} of {{pageCount}}"}
                }
            })

        ' Save to the target location
        Await result.RemoteWorkFile.SaveAsync("sample.pdf")
    End Function
End Module
$vbLabelText   $csharpLabel

Wynik:

Zrzut ekranu nowo utworzonego pliku PDF za pomocą powyższego kodu:

PDF with header showing 'Page Title' and timestamp, comparing `PrizmDoc`'s header/footer implementation

Która biblioteka oferuje większą elastyczność dla nagłówków i stopek?

IronPDF zapewnia więcej funkcji do ustawiania właściwości nagłówka i stopki z prostą strukturą programowania w porównaniu do PrizmDoc Viewer. Plik PDF wygenerowany przez IronPDF jest również bardziej czytelny i atrakcyjny niż plik wygenerowany przez PrizmDoc Viewer. IronPDF obsługuje również numery stron i przerwy stron dla lepszej kontroli dokumentu.


Jak przekonwertować strony PDF na obrazy za pomocą IronPDF vs PrizmDoc Viewer?

Na potrzeby tego porównania załóżmy, że mamy prosty plik PDF o nazwie Sample_PDF.pdf z dwiema stronami.

Strona 1 Strona 2
Przeglądarka PDF pokazująca stronę 1 przykładowego pliku PDF z tekstem Lorem ipsum i standardowymi kontrolkami przeglądarki
Przeglądarka PDF pokazująca stronę 2 przykładowego pliku PDF z tekstem Lorem ipsum i kontrolkami nawigacyjnymi

Zadanie polega na stworzeniu obrazu każdej strony. W pierwszym przykładzie zobaczymy, jak wykonać to przy użyciu IronPDF.

Jak IronPDF konwertuje strony PDF na obrazy?

using IronPdf;

static void Main(string[] args)
{
    // Specify file to be converted
    var pdf = PdfDocument.FromFile("Sample_PDF.pdf");
    // Save images to the target location
    pdf.RasterizeToImageFiles("image_*.png");
}
using IronPdf;

static void Main(string[] args)
{
    // Specify file to be converted
    var pdf = PdfDocument.FromFile("Sample_PDF.pdf");
    // Save images to the target location
    pdf.RasterizeToImageFiles("image_*.png");
}
Imports IronPdf

Shared Sub Main(ByVal args() As String)
	' Specify file to be converted
	Dim pdf = PdfDocument.FromFile("Sample_PDF.pdf")
	' Save images to the target location
	pdf.RasterizeToImageFiles("image_*.png")
End Sub
$vbLabelText   $csharpLabel

IronPDF obsługuje również zapisywanie obrazów do strumienia pamięci i różne formaty obrazów, w tym JPEG, TIFF i inne.

Wynik:

Powyższy kod tworzy następujące dwa obrazy .png:

Strona 1 Obraz Strona 2 Obraz
Obraz PNG wygenerowany ze strony 1 PDF przedstawiający zawartość samouczka Virtual Mechanics z wyraźnym renderowaniem tekstu
Obraz PNG wygenerowany ze strony 2 PDF pokazujący ciągłą zawartość tekstową z jakością rasteryzacji IronPDF

Tworzenie obrazów stron PDF za pomocą IronPDF jest proste. Teraz wykonajmy to samo zadanie przy użyciu przeglądarki PrizmDoc.

Jak przeglądarka PrizmDoc konwertuje strony PDF na obrazy?

using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    PdfToImage().GetAwaiter().GetResult();
}

private static async Task PdfToImage()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_131___", "Your-API-KEY");
    // Convert PDF file to images
    IEnumerable<ConversionResult> results = await prizmDocServer.ConvertAsync("Sample_PDF.pdf", DestinationFileFormat.Png);

    // Save each image.
    for (int i = 0; i < results.Count(); i++)
    {
        await results.ElementAt(i).RemoteWorkFile.SaveAsync($"page-{i + 1}.png");
    }
}
using System.Linq;
using System.Collections.Generic;
using System.Threading.Tasks;
using Accusoft.PrizmDocServer;
using Accusoft.PrizmDocServer.Conversion;

static void Main(string[] args)
{
    PdfToImage().GetAwaiter().GetResult();
}

private static async Task PdfToImage()
{
    // Instantiate PrizmDocServerClient object
    var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_131___", "Your-API-KEY");
    // Convert PDF file to images
    IEnumerable<ConversionResult> results = await prizmDocServer.ConvertAsync("Sample_PDF.pdf", DestinationFileFormat.Png);

    // Save each image.
    for (int i = 0; i < results.Count(); i++)
    {
        await results.ElementAt(i).RemoteWorkFile.SaveAsync($"page-{i + 1}.png");
    }
}
Imports System.Linq
Imports System.Collections.Generic
Imports System.Threading.Tasks
Imports Accusoft.PrizmDocServer
Imports Accusoft.PrizmDocServer.Conversion

Module Program
    Sub Main(args As String())
        PdfToImage().GetAwaiter().GetResult()
    End Sub

    Private Async Function PdfToImage() As Task
        ' Instantiate PrizmDocServerClient object
        Dim prizmDocServer = New PrizmDocServerClient("___PROTECTED_URL_131___", "Your-API-KEY")
        ' Convert PDF file to images
        Dim results As IEnumerable(Of ConversionResult) = Await prizmDocServer.ConvertAsync("Sample_PDF.pdf", DestinationFileFormat.Png)

        ' Save each image.
        For i As Integer = 0 To results.Count() - 1
            Await results.ElementAt(i).RemoteWorkFile.SaveAsync($"page-{i + 1}.png")
        Next
    End Function
End Module
$vbLabelText   $csharpLabel

Wynik:

Powyższy kod tworzy również następujące dwa obrazy .png:

Strona 1 Strona 2
PNG image generated from PDF page 1 using `PrizmDoc`'s conversion service with sample text content
PNG image generated from PDF page 2 showing `PrizmDoc`'s image conversion output quality

Która biblioteka ułatwia konwersję plików PDF do obrazów?

W porównaniu do PrizmDoc Viewer, IronPDF pozwala programistom na łatwe tworzenie obrazów każdej strony przy minimalnej ilości linii kodu, nawet bez iteracji stron.


Czy mogę używać tabel danych Bootstrap 5 z IronPDF?

Silnik renderujący IronPDF Chrome V8 zapewnia doskonałe wsparcie dla Bootstrap 5 data tables, umożliwiając programistom generowanie profesjonalnych raportów PDF ze złożonymi układami tabelarycznymi. Ten przykład demonstruje nagłówki gradientowe, plakietki stanu, kontrolki paginacji i podsumowania - funkcje, które podkreślają przewagę IronPDF nad tradycyjnymi przeglądarkami PDF, takimi jak PrizmDoc. IronPDF w pełni obsługuje nowoczesne funkcje CSS, w tym układy flexbox, gradienty i responsywny design.

using IronPdf;

var renderer = new ChromePdfRenderer();

string dataTableReport = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <link href='___PROTECTED_URL_132___ rel='stylesheet'>
    <style>
        .table-header {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 30px;
            border-radius: 10px 10px 0 0;
        }
        .table-container {
            background: white;
            border-radius: 0 0 10px 10px;
            box-shadow: 0 10px 30px rgba(0,0,0,0.1);
            overflow: hidden;
        }
        .table th {
            background: #f8f9fa;
            font-weight: 600;
            text-transform: uppercase;
            font-size: 0.85rem;
            letter-spacing: 0.5px;
        }
        .status-badge {
            padding: 0.35em 0.65em;
            border-radius: 0.25rem;
            font-weight: 600;
            font-size: 0.75rem;
        }
        .trend-positive { color: #198754; font-weight: 700; }
        .trend-negative { color: #dc3545; font-weight: 700; }
        @media print {
            .table-container { page-break-inside: avoid; }
        }
    </style>
</head>
<body class='bg-light'>
    <div class='container py-5'>
        <div class='table-container'>
            <div class='table-header'>
                <div class='row align-items-center'>
                    <div class='col-md-8'>
                        <h2 class='mb-2'>Sales Performance Report</h2>
                        <p class='mb-0 opacity-75'>Q4 2024 Regional Analysis</p>
                    </div>
                    <div class='col-md-4 text-end'>
                        <div class='btn-group btn-group-sm'>
                            <button class='btn btn-light'>Export</button>
                            <button class='btn btn-light'>Filter</button>
                            <button class='btn btn-light'>Sort</button>
                        </div>
                    </div>
                </div>
            </div>

            <div class='p-4'>
                <div class='row mb-3'>
                    <div class='col-md-4'>
                        <input type='text' class='form-control form-control-sm' placeholder='Search regions...'>
                    </div>
                    <div class='col-md-8 text-end'>
                        <span class='text-muted small'>Showing 1-10 of 48 results</span>
                    </div>
                </div>

                <div class='table-responsive'>
                    <table class='table table-hover align-middle'>
                        <thead>
                            <tr>
                                <th>Region</th>
                                <th>Revenue</th>
                                <th>Units Sold</th>
                                <th>Growth</th>
                                <th>Status</th>
                                <th>Action</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td>
                                    <strong>North America</strong><br>
                                    <small class='text-muted'>USA, Canada, Mexico</small>
                                </td>
                                <td>$4,280,000</td>
                                <td>12,450</td>
                                <td><span class='trend-positive'>↑ 18.5%</span></td>
                                <td><span class='status-badge bg-success text-white'>Exceeding</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Europe</strong><br>
                                    <small class='text-muted'>EU, UK, Switzerland</small>
                                </td>
                                <td>$3,650 000</td>
                                <td>10,890</td>
                                <td><span class='trend-positive'>↑ 12.3%</span></td>
                                <td><span class='status-badge bg-success text-white'>On Track</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Asia Pacific</strong><br>
                                    <small class='text-muted'>Japan, Australia, Singapore</small>
                                </td>
                                <td>$2,940,000</td>
                                <td>8,320</td>
                                <td><span class='trend-positive'>↑ 24.7%</span></td>
                                <td><span class='status-badge bg-primary text-white'>Growing</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Latin America</strong><br>
                                    <small class='text-muted'>Brazil, Argentina, Chile</small>
                                </td>
                                <td>$1,580,000</td>
                                <td>4,670</td>
                                <td><span class='trend-positive'>↑ 8.9%</span></td>
                                <td><span class='status-badge bg-info text-white'>Stable</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Middle East</strong><br>
                                    <small class='text-muted'>UAE, Saudi Arabia, Israel</small>
                                </td>
                                <td>$980,000</td>
                                <td>2,890</td>
                                <td><span class='trend-negative'>↓ 3.2%</span></td>
                                <td><span class='status-badge bg-warning text-dark'>Review</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                        </tbody>
                        <tfoot class='table-light'>
                            <tr>
                                <td><strong>Total</strong></td>
                                <td><strong>$13,430,000</strong></td>
                                <td><strong>39,220</strong></td>
                                <td><strong class='trend-positive'>↑ 14.8%</strong></td>
                                <td colspan='2'></td>
                            </tr>
                        </tfoot>
                    </table>
                </div>

                <div class='d-flex justify-content-between align-items-center mt-4'>
                    <div>
                        <select class='form-select form-select-sm' style='width: auto; display: inline-block;'>
                            <option>10 per page</option>
                            <option>25 per page</option>
                            <option>50 per page</option>
                        </select>
                    </div>
                    <nav>
                        <ul class='pagination pagination-sm mb-0'>
                            <li class='page-item disabled'><a class='page-link' href='#'>Previous</a></li>
                            <li class='page-item active'><a class='page-link' href='#'>1</a></li>
                            <li class='page-item'><a class='page-link' href='#'>2</a></li>
                            <li class='page-item'><a class='page-link' href='#'>3</a></li>
                            <li class='page-item'><a class='page-link' href='#'>Next</a></li>
                        </ul>
                    </nav>
                </div>
            </div>
        </div>

        <div class='row g-3 mt-4'>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-primary mb-1'>$13.4M</h3>
                        <small class='text-muted'>Total Revenue</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-success mb-1'>39,220</h3>
                        <small class='text-muted'>Units Sold</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-info mb-1'>14.8%</h3>
                        <small class='text-muted'>Growth Rate</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-warning mb-1'>5</h3>
                        <small class='text-muted'>Active Regions</small>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(dataTableReport);
pdf.SaveAs("data-table-report.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

string dataTableReport = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <link href='___PROTECTED_URL_132___ rel='stylesheet'>
    <style>
        .table-header {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 30px;
            border-radius: 10px 10px 0 0;
        }
        .table-container {
            background: white;
            border-radius: 0 0 10px 10px;
            box-shadow: 0 10px 30px rgba(0,0,0,0.1);
            overflow: hidden;
        }
        .table th {
            background: #f8f9fa;
            font-weight: 600;
            text-transform: uppercase;
            font-size: 0.85rem;
            letter-spacing: 0.5px;
        }
        .status-badge {
            padding: 0.35em 0.65em;
            border-radius: 0.25rem;
            font-weight: 600;
            font-size: 0.75rem;
        }
        .trend-positive { color: #198754; font-weight: 700; }
        .trend-negative { color: #dc3545; font-weight: 700; }
        @media print {
            .table-container { page-break-inside: avoid; }
        }
    </style>
</head>
<body class='bg-light'>
    <div class='container py-5'>
        <div class='table-container'>
            <div class='table-header'>
                <div class='row align-items-center'>
                    <div class='col-md-8'>
                        <h2 class='mb-2'>Sales Performance Report</h2>
                        <p class='mb-0 opacity-75'>Q4 2024 Regional Analysis</p>
                    </div>
                    <div class='col-md-4 text-end'>
                        <div class='btn-group btn-group-sm'>
                            <button class='btn btn-light'>Export</button>
                            <button class='btn btn-light'>Filter</button>
                            <button class='btn btn-light'>Sort</button>
                        </div>
                    </div>
                </div>
            </div>

            <div class='p-4'>
                <div class='row mb-3'>
                    <div class='col-md-4'>
                        <input type='text' class='form-control form-control-sm' placeholder='Search regions...'>
                    </div>
                    <div class='col-md-8 text-end'>
                        <span class='text-muted small'>Showing 1-10 of 48 results</span>
                    </div>
                </div>

                <div class='table-responsive'>
                    <table class='table table-hover align-middle'>
                        <thead>
                            <tr>
                                <th>Region</th>
                                <th>Revenue</th>
                                <th>Units Sold</th>
                                <th>Growth</th>
                                <th>Status</th>
                                <th>Action</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td>
                                    <strong>North America</strong><br>
                                    <small class='text-muted'>USA, Canada, Mexico</small>
                                </td>
                                <td>$4,280,000</td>
                                <td>12,450</td>
                                <td><span class='trend-positive'>↑ 18.5%</span></td>
                                <td><span class='status-badge bg-success text-white'>Exceeding</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Europe</strong><br>
                                    <small class='text-muted'>EU, UK, Switzerland</small>
                                </td>
                                <td>$3,650 000</td>
                                <td>10,890</td>
                                <td><span class='trend-positive'>↑ 12.3%</span></td>
                                <td><span class='status-badge bg-success text-white'>On Track</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Asia Pacific</strong><br>
                                    <small class='text-muted'>Japan, Australia, Singapore</small>
                                </td>
                                <td>$2,940,000</td>
                                <td>8,320</td>
                                <td><span class='trend-positive'>↑ 24.7%</span></td>
                                <td><span class='status-badge bg-primary text-white'>Growing</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Latin America</strong><br>
                                    <small class='text-muted'>Brazil, Argentina, Chile</small>
                                </td>
                                <td>$1,580,000</td>
                                <td>4,670</td>
                                <td><span class='trend-positive'>↑ 8.9%</span></td>
                                <td><span class='status-badge bg-info text-white'>Stable</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Middle East</strong><br>
                                    <small class='text-muted'>UAE, Saudi Arabia, Israel</small>
                                </td>
                                <td>$980,000</td>
                                <td>2,890</td>
                                <td><span class='trend-negative'>↓ 3.2%</span></td>
                                <td><span class='status-badge bg-warning text-dark'>Review</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                        </tbody>
                        <tfoot class='table-light'>
                            <tr>
                                <td><strong>Total</strong></td>
                                <td><strong>$13,430,000</strong></td>
                                <td><strong>39,220</strong></td>
                                <td><strong class='trend-positive'>↑ 14.8%</strong></td>
                                <td colspan='2'></td>
                            </tr>
                        </tfoot>
                    </table>
                </div>

                <div class='d-flex justify-content-between align-items-center mt-4'>
                    <div>
                        <select class='form-select form-select-sm' style='width: auto; display: inline-block;'>
                            <option>10 per page</option>
                            <option>25 per page</option>
                            <option>50 per page</option>
                        </select>
                    </div>
                    <nav>
                        <ul class='pagination pagination-sm mb-0'>
                            <li class='page-item disabled'><a class='page-link' href='#'>Previous</a></li>
                            <li class='page-item active'><a class='page-link' href='#'>1</a></li>
                            <li class='page-item'><a class='page-link' href='#'>2</a></li>
                            <li class='page-item'><a class='page-link' href='#'>3</a></li>
                            <li class='page-item'><a class='page-link' href='#'>Next</a></li>
                        </ul>
                    </nav>
                </div>
            </div>
        </div>

        <div class='row g-3 mt-4'>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-primary mb-1'>$13.4M</h3>
                        <small class='text-muted'>Total Revenue</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-success mb-1'>39,220</h3>
                        <small class='text-muted'>Units Sold</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-info mb-1'>14.8%</h3>
                        <small class='text-muted'>Growth Rate</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-warning mb-1'>5</h3>
                        <small class='text-muted'>Active Regions</small>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(dataTableReport);
pdf.SaveAs("data-table-report.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

Dim dataTableReport As String = "
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <link href='___PROTECTED_URL_132___ rel='stylesheet'>
    <style>
        .table-header {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 30px;
            border-radius: 10px 10px 0 0;
        }
        .table-container {
            background: white;
            border-radius: 0 0 10px 10px;
            box-shadow: 0 10px 30px rgba(0,0,0,0.1);
            overflow: hidden;
        }
        .table th {
            background: #f8f9fa;
            font-weight: 600;
            text-transform: uppercase;
            font-size: 0.85rem;
            letter-spacing: 0.5px;
        }
        .status-badge {
            padding: 0.35em 0.65em;
            border-radius: 0.25rem;
            font-weight: 600;
            font-size: 0.75rem;
        }
        .trend-positive { color: #198754; font-weight: 700; }
        .trend-negative { color: #dc3545; font-weight: 700; }
        @media print {
            .table-container { page-break-inside: avoid; }
        }
    </style>
</head>
<body class='bg-light'>
    <div class='container py-5'>
        <div class='table-container'>
            <div class='table-header'>
                <div class='row align-items-center'>
                    <div class='col-md-8'>
                        <h2 class='mb-2'>Sales Performance Report</h2>
                        <p class='mb-0 opacity-75'>Q4 2024 Regional Analysis</p>
                    </div>
                    <div class='col-md-4 text-end'>
                        <div class='btn-group btn-group-sm'>
                            <button class='btn btn-light'>Export</button>
                            <button class='btn btn-light'>Filter</button>
                            <button class='btn btn-light'>Sort</button>
                        </div>
                    </div>
                </div>
            </div>

            <div class='p-4'>
                <div class='row mb-3'>
                    <div class='col-md-4'>
                        <input type='text' class='form-control form-control-sm' placeholder='Search regions...'>
                    </div>
                    <div class='col-md-8 text-end'>
                        <span class='text-muted small'>Showing 1-10 of 48 results</span>
                    </div>
                </div>

                <div class='table-responsive'>
                    <table class='table table-hover align-middle'>
                        <thead>
                            <tr>
                                <th>Region</th>
                                <th>Revenue</th>
                                <th>Units Sold</th>
                                <th>Growth</th>
                                <th>Status</th>
                                <th>Action</th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr>
                                <td>
                                    <strong>North America</strong><br>
                                    <small class='text-muted'>USA, Canada, Mexico</small>
                                </td>
                                <td>$4,280,000</td>
                                <td>12,450</td>
                                <td><span class='trend-positive'>↑ 18.5%</span></td>
                                <td><span class='status-badge bg-success text-white'>Exceeding</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Europe</strong><br>
                                    <small class='text-muted'>EU, UK, Switzerland</small>
                                </td>
                                <td>$3,650 000</td>
                                <td>10,890</td>
                                <td><span class='trend-positive'>↑ 12.3%</span></td>
                                <td><span class='status-badge bg-success text-white'>On Track</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Asia Pacific</strong><br>
                                    <small class='text-muted'>Japan, Australia, Singapore</small>
                                </td>
                                <td>$2,940,000</td>
                                <td>8,320</td>
                                <td><span class='trend-positive'>↑ 24.7%</span></td>
                                <td><span class='status-badge bg-primary text-white'>Growing</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Latin America</strong><br>
                                    <small class='text-muted'>Brazil, Argentina, Chile</small>
                                </td>
                                <td>$1,580,000</td>
                                <td>4,670</td>
                                <td><span class='trend-positive'>↑ 8.9%</span></td>
                                <td><span class='status-badge bg-info text-white'>Stable</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                            <tr>
                                <td>
                                    <strong>Middle East</strong><br>
                                    <small class='text-muted'>UAE, Saudi Arabia, Israel</small>
                                </td>
                                <td>$980,000</td>
                                <td>2,890</td>
                                <td><span class='trend-negative'>↓ 3.2%</span></td>
                                <td><span class='status-badge bg-warning text-dark'>Review</span></td>
                                <td><button class='btn btn-sm btn-outline-primary'>Details</button></td>
                            </tr>
                        </tbody>
                        <tfoot class='table-light'>
                            <tr>
                                <td><strong>Total</strong></td>
                                <td><strong>$13,430,000</strong></td>
                                <td><strong>39,220</strong></td>
                                <td><strong class='trend-positive'>↑ 14.8%</strong></td>
                                <td colspan='2'></td>
                            </tr>
                        </tfoot>
                    </table>
                </div>

                <div class='d-flex justify-content-between align-items-center mt-4'>
                    <div>
                        <select class='form-select form-select-sm' style='width: auto; display: inline-block;'>
                            <option>10 per page</option>
                            <option>25 per page</option>
                            <option>50 per page</option>
                        </select>
                    </div>
                    <nav>
                        <ul class='pagination pagination-sm mb-0'>
                            <li class='page-item disabled'><a class='page-link' href='#'>Previous</a></li>
                            <li class='page-item active'><a class='page-link' href='#'>1</a></li>
                            <li class='page-item'><a class='page-link' href='#'>2</a></li>
                            <li class='page-item'><a class='page-link' href='#'>3</a></li>
                            <li class='page-item'><a class='page-link' href='#'>Next</a></li>
                        </ul>
                    </nav>
                </div>
            </div>
        </div>

        <div class='row g-3 mt-4'>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-primary mb-1'>$13.4M</h3>
                        <small class='text-muted'>Total Revenue</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-success mb-1'>39,220</h3>
                        <small class='text-muted'>Units Sold</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-info mb-1'>14.8%</h3>
                        <small class='text-muted'>Growth Rate</small>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center'>
                    <div class='card-body'>
                        <h3 class='text-warning mb-1'>5</h3>
                        <small class='text-muted'>Active Regions</small>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>"

Dim pdf = renderer.RenderHtmlAsPdf(dataTableReport)
pdf.SaveAs("data-table-report.pdf")
$vbLabelText   $csharpLabel

Ten kod generuje zaawansowany raport tabeli danych z gradientowymi nagłówkami, responsywnymi tabelami, plakietkami stanu i podsumowaniem metryk. Silnik renderujący IronPDF w Chrome zachowuje wszystkie stylizacje Bootstrap, w tym efekty najechania kursorem na tabelę, kolory plakietek i elementy sterujące paginacją - możliwości, które wykraczają poza tradycyjne przeglądarki PDF. Silnik obsługuje również renderowanie JavaScript dla dynamicznej zawartości, niestandardowe czcionki oraz znaki międzynarodowe UDF-8.

Kluczowe zalety w porównaniu z przeglądarką PrizmDoc:

Aby uzyskać więcej informacji na temat generowania PDF w Bootstrap, zobacz pełną dokumentację renderowania. Programiści mogą również zapoznać się z konwersją z Angular do PDF i innymi obsługą frameworka JavaScript.## How Do License Costs Compare Between IronPDF and PrizmDoc Viewer?

Po zapoznaniu się ze strukturą techniczną i dostępnymi funkcjami obu komponentów, poniżej przedstawiono ceny licencji. Ma to kluczowe znaczenie, ponieważ programiści dążą do spełnienia wymagań w ramach ograniczeń budżetowych.

Jakie są opcje licencyjne IronPDF?

Licencje IronPDF zaczynają się od $699 dla pojedynczego projektu z jednym deweloperem. IronPDF zapewnia elastyczne opcje licencjonowania, w tym licencje deweloperskie, licencje wdrożeniowe oraz opcje rozszerzeń dla bieżącego wsparcia i aktualizacji.

W przypadku programistów w firmach lub agencjach obsługujących wielu klientów, licencje również zaczynają się od 699 USD i mogą być dostosowywane w zależności od wielkości zespołu i liczby projektów. IronPDF oferuje ścieżki aktualizacji licencji w miarę rozwoju potrzeb.

Poniższe licencje wymagają jednorazowej opłaty:

Liczba programistów Cena
1-5 $699
6-10 $799
11-20 $899
21-50 $1,199
Bez ograniczeń $1,199
  • Dla firm z wieloma lokalizacjami, licencje zaczynają się od 1199$
  • W przypadku usług SaaS, licencje zaczynają się od 1099$
  • W przypadku redystrybucji bez opłat licencyjnych OEM, licencje zaczynają się od 1599$

Uwaga: Wszystkie powyższe pakiety licencyjne obejmują 1 rok wsparcia i aktualizacji.

Czytaj więcej o wszystkich dostępnych pakietach licencyjnych IronPDF. Programiści mogą również zastosować klucze licencyjne na różne sposoby, w tym Web.config i zmienne środowiskowe.

Jakie są opcje licencji przeglądarki PrizmDoc?

Ile kosztuje samodzielnie hostowany `PrizmDoc`?

W przypadku samodzielnie zarządzanych serwerów cena licencji wynosi 7 900 USD rocznie ze standardowym wsparciem.

Read More o wszystkich dostępnych pakietach dla PrizmDoc Viewer.

Ile kosztuje `PrizmDoc` oparty na chmurze?

Niniejsza licencja obejmuje oparte na chmurze usługi PrizmDoc Viewer, skalowane w oparciu o liczbę transakcji.

Terminologie:

Transaction odnosi się do wysyłania żądania do serwera PrizmDoc Viewer i odbierania danych wyjściowych (dokumentu wynikowego).

Pakiety przedpłacone oznacza jednorazową płatność i otrzymywanie transakcji, które nie wygasają.

Liczba transakcji Pakiety przedpłacone Miesięcznie Rocznie
200 $18
1 000 $89
2 000 $119
6 000 $254 $169 1 859 USD (6 000 transakcji miesięcznie)
12 000 $434 $289 3 179 USD (12 000 transakcji miesięcznie)
25 000 $699 $499 5 459 USD (25 000 transakcji miesięcznie)
50 000 $1,199 $799 8 789 USD (50 000 transakcji miesięcznie)
100 000 $1,199 $1,199 10 989 USD (100 000 transakcji miesięcznie)
200 000 $2,549 $1,699 19 188 USD (200 000 transakcji miesięcznie)
300 000 $3,299 $2,199 25 188 USD (300 000 transakcji miesięcznie)
400 000 $4,049 $2,699 31 188 USD (400 000 transakcji miesięcznie)
500 000 $4,799 $3,199 37 188 USD (500 000 transakcji miesięcznie)

Szybki dostęp do samouczka

Html To Pdf Icon related to Szybki dostęp do samouczka

Pobierz podręcznik szybkiego startu C# IronPDF

Bezpłatny przewodnik w formacie PDF, który ułatwia tworzenie plików PDF dla platformy .NET, zawierający instrukcje dotyczące typowych funkcji oraz przykłady manipulowania, edytowania, generowania i zapisywania plików PDF w językach C# i VB.NET na potrzeby projektów.

Pobierz przewodnik

Zapoznaj się z dokumentacją API IronPDF

Zapoznaj się z dokumentacją API biblioteki IronPDF C#, zawierającą szczegółowe informacje na temat wszystkich funkcji, klas, pól metod, przestrzeni nazw i wyliczeń IronPDF.

Zobacz Dokumentację API
Documentation related to Szybki dostęp do samouczka

Zwróć uwagęPrzeglądarka PrizmDoc firmy Accusoft jest zastrzeżonym znakiem towarowym odpowiedniego właściciela. Ta strona nie jest powiązana, wspierana ani sponsorowana przez Accusoft's PrizmDoc Viewer. 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.

Często Zadawane Pytania

Jak mogę przekonwertować HTML na PDF w języku C#?

Możesz użyć metody RenderHtmlAsPdf biblioteki IronPDF do konwersji ciągów HTML na pliki PDF. Możesz również konwertować pliki HTML na pliki PDF za pomocą metody RenderHtmlFileAsPdf.

Jakie są zalety korzystania z IronPDF w porównaniu do PrizmDoc Viewer dla konwersji PDF?

IronPDF oferuje proste lokalne rozwiązanie do renderowania PDF, obsługujące pracę offline bez konieczności programowania asynchronicznego. W przeciwieństwie do tego, PrizmDoc Viewer działa poprzez REST API, co wymaga połączenia internetowego do interakcji zdalnym serwerem.

Czy mogę łączyć wiele dokumentów PDF za pomocą biblioteki PDF?

Tak, dzięki IronPDF możesz łączyć wiele PDF za pomocą metody MergePdf, co pozwala na bezproblemowe łączenie dokumentów.

Jak IronPDF obsługuje konwersję PDF do obrazu?

IronPDF pozwala łatwo konwertować strony PDF do obrazów, korzystając z wbudowanych metod, oferując uproszczone podejście w porównaniu do innego oprogramowania.

Jakie są opcje dostosowywania nagłówków i stopki w IronPDF?

IronPDF zapewnia rozbudowane funkcje ustawiania właściwości nagłówków i stopek przy użyciu prostych struktur programowania, co ułatwia dostosowywanie dokumentów.

Czy IronPDF nadaje się do przetwarzania PDF offline?

Tak, IronPDF wspiera przetwarzanie PDF offline, co oznacza, że możesz pracować bez połączenia internetowego, w przeciwieństwie do niektórych innych rozwiązań wymagających interakcji zdalnym serwerem.

Jak wygląda struktura kosztów licencji IronPDF?

Licencje IronPDF zaczynają się od $699 za jeden projekt z jednym deweloperem, z możliwością skalowania dla firm i usług SaaS, oferując opłacalne rozwiązanie płatności jednorazowej.

Czy mogę rozwijać projekty z użyciem IronPDF za darmo?

Tak, IronPDF jest darmowy do celów rozwojowych bez limitu czasowego i oferuje 30-dniowy okres próbny na wdrożenie projektu na żywo.

Jak PrizmDoc Viewer obsługuje konwersję HTML do PDF?

PrizmDoc Viewer używa REST API do konwersji HTML do PDF, co wymaga programowania asynchronicznego i połączenia internetowego do interakcji zdalnym serwerem.

Jakie są wymagania systemowe dla hostingu serwera PrizmDoc?

Samodzielne hostowanie serwera PrizmDoc wymaga minimum 32 GB RAM i 4-rdzeniowego procesora CPU, aby sprostać wymaganiom przetwarzania.

Czy IronPDF jest w pełni kompatybilny z .NET 10?

Tak. IronPDF wspiera .NET 10 (oraz .NET 9, 8, 7, 6, .NET Core, .NET Standard i .NET Framework). Instalacja odbywa się za pośrednictwem NuGet, działa na Windows, Linux i macOS i używa natywnego renderera opartego na Chrome do zapewnienia perfekcyjnego renderowania HTML do PDF w aplikacjach .NET 10.

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