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")
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)
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
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 recursoshttps://, 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.

