跳至页脚内容
产品比较

Ghostscript GPL 与 IronPDF:技术比较指南

企业应用程序通过HTML生成PDF通常在内部网络中运行,而没有直接连接互联网的路径。 问题出现在呈现时:发票或报告模板引用托管在外部CDN上的徽标、网络字体或样式表,而在内部网络中,这些请求会默默失败。 文档出来时没有样式,图像损坏且字体缺失。 通过公司代理路由渲染引擎可以解决此问题,而IronPDF在其渲染调用中直接接受代理。

业务问题

金融、医疗或保险应用程序从网络模板生成客户文档。 这些模板提取外部资产,但服务器位于防火墙和代理之后。 如果没有代理配置,渲染引擎无法访问这些资产,因此输出看起来是损坏的。 许多这样的环境还运行经过身份验证的代理,这为需求增加了凭据。

解决方案

代理是RenderHtmlAsPdf方法中的参数,而不是渲染选项的属性。 传递代理字符串通过该代理路由引擎的所有资产请求。

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

对于认证代理,凭据放在代理URL中。 密码中的特殊字符必须进行百分比编码。

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

在代理后渲染内部URL

URL渲染方法不接受代理参数。 实际模式是使用为代理配置的HttpClient来获取HTML,然后渲染该HTML,这样引用的资产也通过代理路由。

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

需要计划的要点

  • 代理认证不是页面认证:代理URL中的凭据是针对代理进行认证的,这与网站登录凭据不同。
  • 方案指的是代理跳跃:https://资源,因此方案选择是关于应用程序到代理连接是否需要TLS。
  • 容器和管道:Docker部署和CI构建代理通常没有出口,因此同样的代理配置也适用于这些情况。

结果

通过一个参数,团队可以从运行在公司代理后的应用程序中获得完全样式化的品牌PDF,包括经过认证的环境和容器。 完整的配置细节可以在代理指南中找到。

常见问题解答

为什么企业应用程序在公司代理后无法正常渲染PDF?

企业应用程序通常运行在封闭的网络内部,无法直接访问外部资源。当外部资源不可访问时,会导致PDF中的图片损坏和字体丢失等问题。

IronPDF如何解决通过代理渲染PDF的问题?

IronPDF允许您在`RenderHtmlAsPdf`方法中直接指定代理,将所有资源请求通过代理路由,以确保外部资源被正确访问和渲染。

IronPDF能否处理通过代理进行的PDF渲染认证?

可以,IronPDF支持认证代理。凭证可以包含在代理URL中,且密码中的特殊字符应进行百分编码。

使用IronPDF在代理后渲染内部URL的方法是什么?

对于内部URL,使用配置了代理的`HttpClient`先获取HTML,然后用IronPDF进行渲染,以便所有引用的资源都通过代理路由。

在使用IronPDF进行Docker部署时,配置代理时需要考虑什么?

Docker部署和CI构建代理通常没有出口,因此应该应用与在公司代理后面的应用程序相同的代理配置,以确保访问资源。

代理URL的方案是否影响IronPDF获取的资源?

代理URL的方案(`http://`或`https://`)对于应用程序与代理之间的连接很重要。`http://`代理仍然可以获取`https://`资源,因此方案的选择与是否需要TLS用于应用程序到代理连接有关。

在IronPDF中使用代理参数有何影响?

通过使用代理参数,IronPDF使应用程序能在公司代理或认证环境和容器中生成完整样式化、品牌化的PDF。

IronPDF如何处理代理密码中的特殊字符?

在为IronPDF形成代理URL时,代理密码中的特殊字符需要进行百分编码以便正确认证。

代理认证与页面认证有何区别?

代理认证涉及在代理URL中的凭证,以访问代理服务器,而页面认证与登录到特定网站或网络服务有关。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我