Ir para o conteúdo do rodapé
COMPARAçãO DE PRODUTOS

IronPDF ou Accusoft PDF Viewer: qual biblioteca C# é a melhor para converter HTML em PDF?

O IronPDF e o Accusoft PDF Viewer convertem HTML para PDF em .NET. O IronPDF oferece sintaxe simples, processamento local sem dependências da nuvem e conversões ilimitadas a partir de US$ 699. Em contrapartida, o Accusoft exige conexão com a internet e cobra por transação.

## Comparação entre IronPDF e Accusoft PDF Viewer
  • Converter HTML para PDF
  • Definir cabeçalho e rodapé para PDFs
  • Converter PDF em arquivo de imagem
  • Compare licenciamento, opções de avaliação gratuita e muito mais.

Visão geral

O que é o IronPDF e como funciona?

IronPDF é uma biblioteca C# de HTML para PDF que permite aos desenvolvedores criar arquivos PDF a partir de fontes como strings HTML , páginas da Web e URLs . Também permite definir propriedades como marca d'água , marcador , cabeçalho e rodapé . Além disso, os desenvolvedores podem mesclar vários arquivos PDF em um só ou converter páginas de PDF em imagens e vice-versa, usando a conversão de imagem para PDF .

O IronPDF é gratuito para desenvolvimento e oferece um período de teste de 30 dias para projetos em produção. Ele fornece documentação completa, exemplos de código e referência de API para ajudar os desenvolvedores a começar rapidamente.

Developers can download a file project from this link.

What Is Accusoft PrizmDoc Viewer and How Does It Work?

O PrizmDoc Viewer é uma API REST que funciona com arquivos PDF e os converte remotamente para outros formatos. O PrizmDoc pode converter mais de 100 formatos de arquivo diferentes para PDF e PDF para PNG, JPG , TIFF e SVG. Também oferece diversas opções de assinatura eletrônica para aplicativos.

How Do IronPDF and PrizmDoc Viewer Compare?

IronPDF `PrizmDoc` Viewer
Work with [PDF files programmatically](/how-to/csharp-parse-pdf/). Trabalhe com arquivos PDF programaticamente.
Supports [.NET Core](/docs/) with [Windows](/get-started/windows/), [Mac](/get-started/macos/), or [Linux](/get-started/linux/). Compatível com .NET Core em Windows, Mac ou 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/). Fornece algumas funções predefinidas.
Often requires [minimal lines of code](/tutorials/html-to-pdf/). Frequentemente requer muitas linhas de código.
[Ilimitado conversions](/licensing/) per project in each license. Transações limitadas em licenças hospedadas na nuvem.
[Free for development](/get-started/quickstart/) without time limits. Apenas 300 transações com período de teste.

Vamos instalar ambas as bibliotecas e comparar o código.


Etapa 1: Instalação

Como instalo o IronPDF no meu projeto .NET ?

Existem duas maneiras de instalar o IronPDF em um projeto, sem diferença entre as abordagens. O IronPDF oferece suporte a vários ambientes, incluindo implantação no Azure , AWS Lambda , contêineres Docker e aplicativos Blazor .

Quais são as diferentes maneiras de baixar o IronPDF?

Baixe o arquivo IronPDF.dll e adicione a referência a ele ao projeto. Os desenvolvedores também podem usar o Windows Installer para instalação em todo o sistema. Após isso, o namespace IronPDF torna-se acessível através de:

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

Agora, os desenvolvedores podem acessar facilmente as funções e classes fornecidas pelo IronPDF, incluindo o ChromePdfRenderer para renderização, manipulação de documentos PDF e recursos de segurança .

Como instalo o IronPDF usando o gerenciador de pacotes NuGet ?


How Do I Install PrizmDoc Viewer from Accusoft?

O visualizador PrizmDoc possui duas partes: o componente do lado do servidor chamado PrizmDoc Server que se comporta como uma API RESTful, e o projeto cliente que envia solicitações para a API e recebe respostas. Ao contrário do IronPDF , que opera localmente sem dependências externas , o PrizmDoc requer conectividade de rede para operações baseadas em nuvem.

How Can I Access the PrizmDoc Server?

PrizmDoc O servidor é um aplicativo do lado do servidor que recebe informações básicas com documentos como solicitações (entrada) e converte os documentos em arquivos PDF , enviando em seguida os arquivos PDF convertidos de volta como respostas (saída). Ele serve como o núcleo técnico do produto — um mecanismo de processamento e conversão de documentos. Os desenvolvedores podem utilizá-lo por meio de dois métodos diferentes, ambos com a mesma estrutura e técnicas de programação:

  1. Hospedado pelo próprio usuário:

    Esta opção requer a contratação de um servidor. Baixe o PrizmDoc Server e instale-o. Saiba mais sobre como instalar o servidor PrizmDoc no Windows.

    Observação: Para um melhor desempenho, são necessários no mínimo 32 GB de RAM e um processador de 4 núcleos. Em contrapartida, os requisitos de sistema do IronPDF são muito mais modestos.

  2. Hospedado na nuvem:

    Este serviço baseado na nuvem elimina a necessidade de providenciar um servidor. Para usar esta opção, crie uma conta e copie o API key do menu API Key na página inicial.

Primeiro, vamos examinar a estrutura básica para trabalhar com o PrizmDoc Viewer para converter documentos em arquivos PDF interagindo diretamente com o Accusoft server usando o WebClient() em um aplicativo de console C#.

Nota: O exemplo a seguir demonstra como o PrizmDoc lida conceitualmente com arquivos PDF. É um texto extenso, então fique à vontade para pular este exemplo e ir direto para a comparação .

Como funciona a estrutura de trabalho da Accusoft?

Este exemplo converte myWebpage.html em sample.pdf. Ao contrário da conversão direta de HTML para PDF do IronPDF , o PrizmDoc requer múltiplas chamadas de API.

Nota: A biblioteca Newtonsoft.Json deve ser instalada e referenciada no projeto.

Primeiro, adicione as seguintes bibliotecas ao projeto:

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

Em seguida, crie uma variável pública Accusoft API Key e cole a chave da API nela:

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

Existem 3 etapas para lidar com arquivos PDF usando o PrizmDoc Viewer:

  1. Envie um arquivo para o servidor PrizmDoc.
  2. Converta o arquivo carregado.
  3. Baixe o arquivo convertido do servidor PrizmDoc.

Cada etapa é tratada por uma função separada:

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. Enviar arquivo para o servidor:

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. Converter o arquivo carregado para 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

O JSON a seguir é o valor resultante do objeto myJson:

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

Verifique o status para saber se a conversão foi concluída ou não.

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. Baixe o arquivo convertido do servidor.

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

O exemplo acima requer um esforço considerável. Para minimizar a carga de trabalho, a Accusoft introduziu uma biblioteca .NET chamada Accusoft.PrizmDocServerSDK , um wrapper em torno da API REST do servidor PrizmDoc. Vamos examinar como instalar e usar essa biblioteca em projetos .NET .

How Do I Install Accusoft.PrizmDocServerSDK?

Existem duas maneiras de instalar o wrapper.

  • Console do Gerenciador de Pacotes:

    Se estiver usando o Console do Gerenciador de Pacotes, execute o seguinte comando:

    _CODEBLOCK10

  • Gerenciar pacotes para a solução:

    Se estiver usando a interface gráfica do Gerenciador de Pacotes NuGet , procure por Accusoft.PrizmDocServerSDK na barra de pesquisa e instale-o.

Agora, os desenvolvedores podem acessar facilmente o namespace Accusoft.PrizmDocServer e utilizá-lo:

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

Tutoriais de instruções

Como o IronPDF e o PrizmDoc Viewer se comparam em exemplos de código?

Após revisar a introdução e a instalação de ambos os componentes, é hora de trabalhar com os dois. Os casos de uso a seguir demonstram a implementação utilizando ambos os componentes para ajudar a compreender as estruturas de programação e determinar qual delas melhor se adapta aos requisitos do projeto.


Como faço para converter HTML em PDF usando o IronPDF ou o PrizmDoc Viewer?

Para esta comparação, vamos converter uma página da web chamada myWebPage.html em um arquivo PDF e salvá-lo no local de destino. O mecanismo de renderização Chrome do IronPDF oferece conversão perfeita em pixels , com suporte completo para CSS , JavaScript e fontes da web .

Como o IronPDF converte HTML em 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

O código acima cria um arquivo sample.pdf e o salva na pasta bin>debug do projeto. O IronPDF também suporta strings HTML , URLs e até mesmo arquivos ZIP contendo HTML como fontes de entrada.

Os desenvolvedores também podem especificar qualquer caminho como este: PDF.SaveAs("E:/sample.pdf"); ou salvar em um fluxo de memória para implantações em nuvem.

Leia mais sobre como trabalhar com o IronPDF para lidar com arquivos PDF.

Agora, vamos realizar a mesma tarefa usando o PrizmDoc Viewer para comparação.

Como o PrizmDoc Viewer converte HTML em PDF?

Na seção de instalação do PrizmDoc Viewer, foi discutida a obtenção do Accusoft API Key. Veja como usá-lo.

Primeiro, envie uma solicitação ao servidor PrizmDoc e receba uma resposta. Esse processo leva tempo, exigindo Programação Assíncrona . O IronPDF também oferece suporte a métodos assíncronos para melhor desempenho.

Nota: Certifique-se de que o sistema esteja conectado à internet ao criar arquivos PDF usando os serviços em nuvem do 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

Leia mais sobre como trabalhar com o visualizador PrizmDoc.

Qual biblioteca oferece a conversão mais simples de HTML para PDF?

Esses exemplos demonstram que o IronPDF oferece uma abordagem mais simples para a criação de arquivos PDF e requer menos tempo. O IronPDF também fornece opções de renderização para ajustes finos na saída, incluindo tamanhos de papel personalizados , margens e configurações de viewport .


Como faço para converter imagens em PDF usando o IronPDF ou o PrizmDoc Viewer?

Esta comparação demonstra como criar um arquivo PDF a partir de uma imagem localizada na pasta debug do projeto. Os desenvolvedores começam com o IronPDF.

Como o IronPDF converte imagens em 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

O IronPDF também oferece suporte à conversão de TIFF com vários quadros , incorporação de imagens do Armazenamento de Blobs do Azure e incorporação de imagens em Base64 .

Saída:

Esta captura de tela mostra o arquivo PDF recém-criado sample.pdf usando o código acima:

Documento PDF mostrando o logotipo do Google centralizado em um fundo branco, demonstrando a capacidade do IronPDF de converter imagens em PDF.

Criar um arquivo PDF a partir de uma imagem usando o IronPDF é muito simples. Agora, vamos realizar a mesma tarefa usando o PrizmDoc Viewer e examinar o arquivo PDF gerado.

Como o PrizmDoc Viewer converte imagens em 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

Saída: Esta captura de tela mostra o arquivo PDF recém-criado sample.pdf a partir do código acima:

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

Qual biblioteca requer menos código para conversão de imagem em PDF?

O IronPDF requer apenas duas linhas de código. Em contraste, usar o servidor PrizmDoc envolve mais linhas de código com programação assíncrona. O resultado do IronPDF também fornece automaticamente um documento utilizável em página inteira. O IronPDF oferece opções adicionais para posicionamento de imagens e conversão de múltiplas imagens .


Como faço para mesclar vários arquivos PDF usando o IronPDF em vez do PrizmDoc Viewer?

Para esta comparação, vamos supor que existam três arquivos PDF chamados A.pdf, B.pdf e C.pdf. A tarefa é mesclá-los em um único arquivo PDF . Ambos os componentes podem executar essa tarefa. Primeiro, o exemplo mostra como realizar isso usando o IronPDF.

Como o IronPDF mescla arquivos 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

O código acima cria um arquivo sample.pdf, que combina A.pdf, B.pdf e C.pdf. O IronPDF também permite adicionar e copiar páginas entre PDFs, bem como dividir PDFs .

Agora, vamos realizar a mesma tarefa usando o PrizmDoc Viewer.

Como o PrizmDoc Viewer mescla arquivos 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

O código acima também cria um arquivo sample.pdf, que combina os arquivos A.pdf, B.pdf e C.pdf.


Como adicionar cabeçalhos e rodapés a PDFs usando o IronPDF em vez do PrizmDoc Viewer?

Para esta comparação, suponha que exista um WebPage simples chamado myWebPage.html com o seguinte HTML e 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

O objetivo é converter este WebPage em um arquivo PDF com as seguintes propriedades de cabeçalho e rodapé :

  • Page Title no lado esquerdo do cabeçalho
  • DateTime no lado direito do cabeçalho
  • Page Number of Total Pages no lado direito do rodapé

Primeiro, vamos examinar como o IronPDF lida com cabeçalhos e rodapés.

Como o IronPDF lida com cabeçalhos e rodapés de PDFs?

Para lidar com cabeçalhos e rodapés de arquivos PDF, o IronPDF fornece uma propriedade na classe ChromePdfRenderer chamada RenderingOptions que pode ser usada da seguinte forma:

  • Para o cabeçalho:

    _CODEBLOCK19

  • Para o rodapé:

    _CODEBLOCK20

As seguintes propriedades podem ser definidas ao inicializar TextHeaderFooter():

  • CenterText para imprimir texto no centro do cabeçalho ou rodapé
  • LeftText para imprimir texto no lado esquerdo do cabeçalho ou rodapé
  • RightText para imprimir texto no lado direito do cabeçalho ou rodapé
  • DrawDividerLine desenha uma linha separando o conteúdo da página do cabeçalho ou rodapé
  • FontFamily para especificar a família de fontes do cabeçalho ou rodapé
  • FontSize para especificar o tamanho da fonte do cabeçalho ou rodapé
  • O espaçamento ajusta o espaço entre o conteúdo da página e o cabeçalho ou rodapé.

Os seguintes atributos predefinidos ajudam a definir o conteúdo do cabeçalho ou rodapé. Eles estão escritos entre chaves { }:

  • {page} imprime o número da página atual no cabeçalho ou rodapé.
  • {total-pages} imprime o número total de páginas no cabeçalho ou rodapé.
  • {url} imprime o URL da página renderizada
  • {date} imprime a data atual no cabeçalho ou rodapé.
  • {time} imprime a hora atual no cabeçalho ou rodapé.
  • {html-title} imprime o título da página web renderizada no cabeçalho ou rodapé.
  • {pdf-title} imprime o título do documento no cabeçalho ou rodapé.

Leia mais detalhes sobre como trabalhar com cabeçalhos e rodapés usando o IronPDF. O IronPDF também suporta cabeçalhos e rodapés HTML para designs mais complexos.

O exemplo a seguir mostra como implementar o caso de uso e demonstra como utilizar as propriedades acima:

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

Saída: Captura de tela do arquivo PDF recém-criado sample.pdf pelo código acima:

Documento PDF com cabeçalho personalizado exibindo o 'Título da Página' e a data/hora, demonstrando as funcionalidades de cabeçalho e rodapé do IronPDF.

Trabalhar com cabeçalhos e rodapés usando o IronPDF envolve uma linguagem intuitiva durante a criação de arquivos PDF. Agora, o exemplo mostra como o PrizmDoc Viewer lida com cabeçalhos e rodapés.

Como o visualizador PrizmDoc lida com cabeçalhos e rodapés de PDFs?

O visualizador PrizmDoc fornece a classe HeaderFooterOptions para lidar com cabeçalhos e rodapés, com as seguintes propriedades:

  • Linhas especifica a(s) linha(s) para Cabeçalho e Rodapé, onde cada linha possui as seguintes propriedades: A tecla à esquerda imprime o texto no lado esquerdo da linha de cabeçalho ou rodapé. Centralizar imprime o texto no centro da linha de cabeçalho ou rodapé. Direita * imprime o texto no lado direito da linha de cabeçalho ou rodapé.
  • FontFamily para especificar a família de fontes do texto do cabeçalho ou rodapé
  • FontSize para especificar o tamanho da fonte do texto do cabeçalho ou rodapé
  • Cor para especificar a cor do texto do cabeçalho ou rodapé

Leia mais sobre como configurar cabeçalhos e rodapés de páginas PDF usando o servidor PrizmDoc.

O exemplo mostra como implementar o caso de uso utilizando as propriedades acima:

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

Saída:

Captura de tela do arquivo PDF recém-criado pelo código acima:

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

Qual biblioteca oferece mais flexibilidade para cabeçalhos e rodapés?

O IronPDF oferece mais funções para definir as propriedades de cabeçalho e rodapé com uma estrutura de programação simples em comparação com o PrizmDoc Viewer. O arquivo PDF gerado pelo IronPDF também é mais legível e atraente do que o arquivo gerado pelo PrizmDoc Viewer. O IronPDF também oferece suporte a números de página e quebras de página para um melhor controle do documento.


Como faço para converter páginas PDF em imagens usando o IronPDF ou o PrizmDoc Viewer?

Para esta comparação, vamos supor que você tenha um arquivo PDF simples chamado Sample_PDF.pdf com duas páginas.

Página 1 Página 2
Visualizador de PDF exibindo a página 1 de um PDF de exemplo com texto Lorem ipsum e controles padrão do visualizador.
Visualizador de PDF exibindo a página 2 de um PDF de exemplo com texto Lorem ipsum e controles de navegação.

A tarefa é criar uma imagem de cada página . Primeiro, o exemplo mostrará como realizar isso usando o IronPDF.

Como o IronPDF converte páginas PDF em imagens?

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

O IronPDF também suporta o salvamento de imagens em fluxo de memória e em diferentes formatos de imagem , incluindo JPEG, TIFF e outros.

Saída:

O código acima cria as seguintes duas imagens .png:

Imagem da página 1 Imagem da página 2
Imagem PNG gerada a partir da página 1 do PDF, mostrando o conteúdo do tutorial de Mecânica Virtual com renderização de texto nítida.
Imagem PNG gerada a partir da página 2 do PDF, mostrando a continuação do conteúdo de texto com a qualidade de rasterização do IronPDF.

Criar imagens de páginas PDF usando o IronPDF é muito simples. Agora, vamos realizar a mesma tarefa usando o PrizmDoc Viewer.

Como o PrizmDoc Viewer converte páginas PDF em imagens?

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

Saída:

O código acima também cria as seguintes duas imagens .png:

Página 1 Página 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

Qual biblioteca facilita a conversão de PDF para imagem?

Em comparação com o PrizmDoc Viewer, o IronPDF permite que os desenvolvedores criem facilmente imagens de cada página com um número mínimo de linhas de código, mesmo sem iterar por todas as páginas.


Posso usar tabelas de dados do Bootstrap 5 com o IronPDF?

O mecanismo de renderização Chrome V8 do IronPDF oferece excelente suporte para tabelas de dados do Bootstrap 5 , permitindo que os desenvolvedores gerem relatórios em PDF profissionais com layouts tabulares complexos. Este exemplo demonstra cabeçalhos com gradiente, indicadores de status, controles de paginação e métricas de resumo - recursos que destacam a vantagem do IronPDF sobre visualizadores de PDF tradicionais como PrizmDoc. O IronPDF oferece suporte completo aos recursos modernos de CSS, incluindo layouts flexbox , gradientes e design responsivo .

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

Este código gera um relatório sofisticado em formato de tabela de dados com cabeçalhos em gradiente, tabelas responsivas, indicadores de status e métricas de resumo. O mecanismo de renderização do IronPDF para Chrome preserva todo o estilo do Bootstrap, incluindo efeitos de foco em tabelas, cores de indicadores e controles de paginação — recursos que vão além dos visualizadores de PDF tradicionais. O mecanismo também oferece suporte à renderização de JavaScript para conteúdo dinâmico, fontes personalizadas e caracteres internacionais UTF-8 .

Principais vantagens em relação ao visualizador PrizmDoc:

Para obter mais detalhes sobre a geração de PDFs com Bootstrap, consulte a documentação completa de renderização . Os desenvolvedores também podem explorar a conversão de Angular para PDF e o suporte a outros frameworks JavaScript . ## Como se comparam os custos de licenciamento entre o IronPDF e o PrizmDoc Viewer?

Após analisar a estrutura técnica e as funções disponíveis de ambos os componentes, apresentamos a seguir os preços das licenças. Isso é crucial, pois os desenvolvedores buscam atender aos requisitos dentro das restrições orçamentárias.

Quais são as opções de licença do IronPDF?

As licenças do IronPDF começam em $699 para um único projeto com um desenvolvedor. O IronPDF oferece opções flexíveis de licenciamento, incluindo licenças de desenvolvimento, licenças de implantação e opções de extensão para suporte e atualizações contínuas.

Para desenvolvedores em empresas ou agências que atendem vários clientes, as licenças também começam em US$ 699 e podem ser ajustadas de acordo com o tamanho da equipe e a quantidade de projetos. O IronPDF oferece opções de atualização de licença conforme as necessidades evoluem.

As seguintes licenças requerem um pagamento único:

Número de desenvolvedores Preço
1-5 $699
6-10 $799
11-20 $899
21-50 $1,199
Ilimitado $1,199
  • Para empresas com várias filiais, as licenças começam a partir de US$ 1199.
  • Para serviços SaaS, as licenças começam a partir de US$ 1099.
  • Para redistribuição OEM isenta de royalties, as licenças começam a partir de US$ 1.599.

Observação: Todos os pacotes de licença acima incluem 1 ano de suporte e atualizações .

Saiba mais sobre todos os pacotes de licença disponíveis do IronPDF. Os desenvolvedores também podem aplicar chaves de licença de várias maneiras, incluindo no arquivo Web.config e em variáveis ​​de ambiente.

Quais são as opções de licença do visualizador PrizmDoc?

What Is the Cost of Self-Hosted PrizmDoc?

Para servidores autogerenciados, o preço da licença é de US$ 7.900 por ano com suporte padrão.

Leia mais sobre todos os pacotes disponíveis para o visualizador PrizmDoc.

How Much Does Cloud-Based PrizmDoc Cost?

Esta licença abrange os serviços em nuvem do PrizmDoc Viewer, com escalonamento baseado no número de transações.

Terminologias:

Transaction refere-se ao envio de uma solicitação ao servidor do PrizmDoc Viewer e ao recebimento da saída (documento resultante).

Baldes pré-pagos significa pagar uma única vez e receber transações que não expiram.

Número de transações Baldes pré-pagos Mensal Anualmente
200 $18
1.000 $89
2.000 $119
6.000 $254 $169 US$ 1.859 (6.000 transações/mês)
12.000 $434 $289 US$ 3.179 (12.000 transações/mês)
25.000 $699 $499 US$ 5.459 (25.000 transações/mês)
50.000 $1,199 $799 US$ 8.789 (50.000 transações/mês)
100.000 $1,199 $1,199 US$ 10.989 (100.000 transações/mês)
200.000 $2,549 $1,699 US$ 19.188 (200.000 transações/mês)
300.000 $3,299 $2,199 US$ 25.188 (300.000 transações/mês)
400.000 $4,049 $2,699 US$ 31.188 (400.000 transações/mês)
500.000 $4,799 $3,199 US$ 37.188 (500.000 transações/mês)

Tutorial de Acesso Rápido

Html To Pdf Icon related to Tutorial de Acesso Rápido
### Obtenha o Guia de Iniciação Rápida do IronPDF em C#

Um guia de recursos em PDF gratuito que simplifica o desenvolvimento de PDFs for .NET, com explicações passo a passo de funções comuns e exemplos para manipular, editar, gerar e salvar PDFs em C# e VB .NET para projetos.

Baixe o Guia
### Explore a Referência da API do IronPDF

Explore a Referência da API da biblioteca IronPDF C#, incluindo detalhes de todos os recursos, classes, campos de métodos, namespaces e enums do IronPDF.

Consulte a Referência da API.
Documentation related to Tutorial de Acesso Rápido

ObserveAccusoft's PrizmDoc Viewer é uma marca registrada de seu respectivo proprietário. Este site não é afiliado, endossado ou patrocinado pelo visualizador PrizmDoc da Accusoft. Todos os nomes de produtos, logotipos e marcas são propriedade de seus respectivos proprietários. As comparações são apenas para fins informativos e refletem informações disponíveis publicamente no momento da redação.

Perguntas frequentes

Como posso converter HTML para PDF em C#?

Você pode usar o método RenderHtmlAsPdf do IronPDF para converter strings HTML em PDFs. Você também pode converter arquivos HTML em PDFs usando o RenderHtmlFileAsPdf .

Quais são as vantagens de usar o IronPDF em vez do PrizmDoc Viewer para conversão de PDF?

O IronPDF oferece uma solução simples de renderização local de PDFs, permitindo o trabalho offline sem a necessidade de programação assíncrona. Em contrapartida, o PrizmDoc Viewer opera por meio de uma API REST, exigindo conexão com a internet para interação com o servidor remoto.

Posso mesclar vários documentos PDF usando uma biblioteca PDF?

Sim, com o IronPDF, você pode mesclar vários PDFs usando o método MergePdf , permitindo combinar documentos de forma integrada.

Como o IronPDF realiza a conversão de PDF para imagem?

O IronPDF permite converter páginas PDF em imagens facilmente usando seus métodos integrados, oferecendo uma abordagem simplificada em comparação com outros softwares.

Quais são as opções de personalização de cabeçalho e rodapé no IronPDF?

O IronPDF oferece diversas funções para definir as propriedades de cabeçalho e rodapé com uma estrutura de programação simples, facilitando a personalização de seus documentos.

O IronPDF é adequado para processamento offline de PDFs?

Sim, o IronPDF suporta processamento offline de PDFs, o que significa que você pode trabalhar sem conexão com a internet, ao contrário de algumas outras soluções que exigem interação com um servidor remoto.

Qual é a estrutura de custos das licenças do IronPDF?

As licenças do IronPDF começam em US$ 699 para um único projeto com um desenvolvedor, com opções escaláveis para empresas e serviços SaaS, oferecendo uma solução econômica com pagamento único.

Posso desenvolver com o IronPDF gratuitamente?

Sim, o IronPDF é gratuito para desenvolvimento, sem limite de tempo, e oferece um período de teste de 30 dias para você colocar seu projeto em funcionamento.

Como o PrizmDoc Viewer lida com a conversão de HTML para PDF?

O PrizmDoc Viewer utiliza uma API REST para conversão de HTML em PDF, exigindo programação assíncrona e conectividade com a internet para interação com o servidor remoto.

Quais são os requisitos de sistema para hospedar um servidor PrizmDoc?

O servidor PrizmDoc auto-hospedado requer um mínimo de 32 GB de RAM e uma CPU de 4 núcleos para atender às suas necessidades de processamento.

O IronPDF é totalmente compatível com o .NET 10?

Sim. O IronPDF é compatível com o .NET 10 (assim como com o .NET 9, 8, 7, 6, .NET Core, .NET Standard e .NET Framework). Ele é instalado via NuGet, funciona no Windows, Linux e macOS e usa seu renderizador nativo baseado no Chrome para fornecer renderização de HTML para PDF com qualidade impecável em aplicativos .NET 10.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim