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

Ghostscript GPL vs IronPDF: Guia de Comparação Técnica

Aplicações empresariais que geram PDFs a partir de HTML costumam operar em redes fechadas, sem rota direta para a internet. O problema surge no momento da renderização: um modelo de fatura ou relatório referencia um logotipo, fonte da web ou folha de estilo hospedada em um CDN externo, e dentro da rede corporativa essas solicitações falham silenciosamente. O documento é gerado sem estilo, com imagens quebradas e fontes ausentes. Roteando o motor de renderização através do proxy da empresa corrige isso, e o IronPDF aceita um proxy diretamente em sua chamada de renderização.

O Problema Empresarial

Um aplicativo financeiro, de saúde ou de seguros produz documentos de clientes a partir de modelos da web. Esses modelos puxam ativos externos, mas o servidor está atrás de um firewall e proxy. Sem configuração de proxy, o motor não consegue acessar os ativos, então a saída parece quebrada. Muitos desses ambientes também executam proxies autenticados, o que adiciona credenciais ao requisito.

A solução

O proxy é um parâmetro no método RenderHtmlAsPdf, não uma propriedade nas opções de renderização. Passar uma string de proxy roteia todas as solicitações de ativos do motor através desse proxy.

using IronPdf;

var renderer = new ChromePdfRenderer();

PdfDocument pdf = renderer.RenderHtmlAsPdf(
    htmlContent,
    baseUrlOrPath: @"C:\templates\assets\",
    proxy: "http://proxy.co/rp.local:8080"
);
pdf.SaveAs("report.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

PdfDocument pdf = renderer.RenderHtmlAsPdf(
    htmlContent,
    baseUrlOrPath: @"C:\templates\assets\",
    proxy: "http://proxy.co/rp.local:8080"
);
pdf.SaveAs("report.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(
    htmlContent,
    baseUrlOrPath: "C:\templates\assets\",
    proxy: "http://proxy.co/rp.local:8080"
)
pdf.SaveAs("report.pdf")
$vbLabelText   $csharpLabel

Para um proxy autenticado, credenciais são inseridas na URL do proxy. Caracteres especiais na senha devem ser codificados em porcentagem.

string encoded = Uri.EscapeDataString("P@ssw0rd!");
string proxy = $"http://svc-account:{encoded}@proxy.co/rp.local:8080";

PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent, baseUrlOrPath: null, proxy: proxy);
string encoded = Uri.EscapeDataString("P@ssw0rd!");
string proxy = $"http://svc-account:{encoded}@proxy.co/rp.local:8080";

PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent, baseUrlOrPath: null, proxy: proxy);
Imports System

Dim encoded As String = Uri.EscapeDataString("P@ssw0rd!")
Dim proxy As String = $"http://svc-account:{encoded}@proxy.co/rp.local:8080"

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlContent, baseUrlOrPath:=Nothing, proxy:=proxy)
$vbLabelText   $csharpLabel

Renderizando URLs Internos por Trás de um Proxy

O método de renderização de URL não aceita um parâmetro de proxy. O padrão prático é buscar o HTML com um HttpClient configurado para o proxy, então renderizar esse HTML para que os ativos referenciados também roteiem pelo proxy.

using System.Net;
using System.Net.Http;

var webProxy = new WebProxy("http://proxy.co/rp.local:8080")
{
    Credentials = new NetworkCredential("svc-account", "P@ssw0rd!")
};
var handler = new HttpClientHandler { Proxy = webProxy, UseProxy = true };
using var httpClient = new HttpClient(handler);

string html = await httpClient.GetStringAsync("https://dashboard.internal.co/rp/report");
PdfDocument pdf = renderer.RenderHtmlAsPdf(html, baseUrlOrPath: null, proxy: "http://proxy.co/rp.local:8080");
using System.Net;
using System.Net.Http;

var webProxy = new WebProxy("http://proxy.co/rp.local:8080")
{
    Credentials = new NetworkCredential("svc-account", "P@ssw0rd!")
};
var handler = new HttpClientHandler { Proxy = webProxy, UseProxy = true };
using var httpClient = new HttpClient(handler);

string html = await httpClient.GetStringAsync("https://dashboard.internal.co/rp/report");
PdfDocument pdf = renderer.RenderHtmlAsPdf(html, baseUrlOrPath: null, proxy: "http://proxy.co/rp.local:8080");
Imports System.Net
Imports System.Net.Http

Dim webProxy As New WebProxy("http://proxy.co/rp.local:8080") With {
    .Credentials = New NetworkCredential("svc-account", "P@ssw0rd!")
}
Dim handler As New HttpClientHandler With {
    .Proxy = webProxy,
    .UseProxy = True
}
Using httpClient As New HttpClient(handler)
    Dim html As String = Await httpClient.GetStringAsync("https://dashboard.internal.co/rp/report")
    Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html, baseUrlOrPath:=Nothing, proxy:="http://proxy.co/rp.local:8080")
End Using
$vbLabelText   $csharpLabel

Pontos para Planejar

  • Autenticação de proxy não é autenticação de página: Credenciais na URL do proxy autenticam contra o proxy, o que difere das credenciais de login do site.
  • Esquema refere-se ao salto do proxy: Um proxy http:// ainda pode buscar recursos https://, então a escolha do esquema é sobre se a conexão app-para-proxy precisa de TLS.
  • Containers e pipelines: Implantações Docker e agentes de construção CI geralmente não têm saída, então a mesma configuração de proxy se aplica lá.

Resultado

Com um parâmetro, equipes obtêm PDFs totalmente estilizados e com marca a partir de aplicações rodando por trás de um proxy corporativo, incluindo ambientes autenticados e containers. Detalhes completos de configuração estão no guia de proxy.

Perguntas frequentes

Por que os aplicativos empresariais têm dificuldade com a renderização de PDF atrás de um proxy corporativo?

Aplicativos empresariais frequentemente rodam em redes bloqueadas e não podem acessar diretamente recursos externos. Isso leva a problemas como imagens quebradas e fontes ausentes em PDFs quando ativos externos não são acessíveis.

Como o IronPDF resolve problemas de renderização de PDF atrás de um proxy?

O IronPDF permite que você especifique um proxy diretamente no método `RenderHtmlAsPdf`, roteando todas as solicitações de ativos através do proxy para garantir que os recursos externos sejam acessados e renderizados corretamente.

O IronPDF pode lidar com proxies autenticados para renderização de PDF?

Sim, o IronPDF suporta proxies autenticados. As credenciais podem ser incluídas na URL do proxy, e caracteres especiais nas senhas devem ser codificados em percent-encoding.

Qual é o método para renderizar URLs internas atrás de um proxy usando o IronPDF?

Para URLs internas, use um `HttpClient` configurado com um proxy para buscar o HTML primeiro, em seguida, renderize esse HTML com o IronPDF para que todos os ativos referenciados sejam roteados através do proxy.

O que deve ser considerado ao configurar proxies para implantações Docker com o IronPDF?

Implantações Docker e agentes de build CI geralmente não têm saída, então a mesma configuração de proxy usada para aplicativos atrás de um proxy corporativo deve ser aplicada para garantir o acesso aos recursos.

O esquema da URL do proxy afeta os recursos buscados pelo IronPDF?

O esquema da URL do proxy (`http://` ou `https://`) é importante para a conexão entre o aplicativo e o proxy. Um proxy `http://` ainda pode buscar recursos `https://`, então a escolha do esquema é sobre se TLS é necessário para a conexão aplicativo-para-proxy.

Qual é o impacto de usar um parâmetro de proxy no IronPDF?

Usando um parâmetro de proxy, o IronPDF permite que os aplicativos gerem PDFs totalmente estilizados e com marca, mesmo quando executados atrás de um proxy corporativo ou em ambientes e contêineres autenticados.

Como são tratados caracteres especiais em senhas de proxy no IronPDF?

Caracteres especiais em senhas de proxy precisam ser codificados em percent-encoding ao formar a URL do proxy para que o IronPDF autentique corretamente.

Qual é a diferença entre autenticação de proxy e autenticação de página?

A autenticação de proxy envolve credenciais na URL do proxy para acessar o servidor proxy, enquanto a autenticação de página se refere ao login em um site ou serviço web específico.

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 Iron

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