Ghostscript GPL vs IronPDF: Techniczne porównanie przewodnika
Aplikacje Enterprise, które generują pliki PDF z HTML, często działają w izolowanych sieciach bez bezpośredniego dostępu do internetu. Problem pojawia się w momencie renderowania: szablon faktury lub raportu odwołuje się do logo, czcionki sieciowej lub arkusza stylów hostowanego na zewnętrznym CDN, a wewnątrz sieci korporacyjnej te żądania kończą się niepowodzeniem w sposób niejawny. Dokument zostaje wygenerowany bez stylu, z uszkodzonymi obrazami i brakującymi czcionkami. Przekierowanie silnika renderowania przez firmowy serwer proxy rozwiązuje ten problem, a IronPDF akceptuje proxy bezpośrednio w swoim wywołaniu renderowania.
Problem biznesowy
Aplikacja finansowa, zdrowotna lub ubezpieczeniowa tworzy dokumenty klienckie z szablonów internetowych. Te szablony pobierają zasoby zewnętrzne, ale serwer znajduje się za zaporą ogniową i proxy. Bez konfiguracji proxy, silnik nie może sięgnąć zasobów, więc wynik wygląda na uszkodzony. Wiele z tych środowisk działa również z uwierzytelnionymi serwerami proxy, co dodaje do wymagań kredencje.
Rozwiązanie
Proxy to parametr w metodzie RenderHtmlAsPdf, a nie właściwość opcji renderowania. Przekazanie ciągu proxy kieruje wszystkie żądania zasobów z silnika przez to 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");
Dla uwierzytelnionego proxy, dane uwierzytelniające znajdują się w URL proxy. Specjalne znaki w haśle muszą być zakodowane procentowo.
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);
Renderowanie wewnętrznych adresów URL za proxy
Metoda renderowania URL nie akceptuje parametru proxy. Praktycznym wzorcem jest pobranie HTML przy użyciu HttpClient skonfigurowanego dla proxy, a następnie renderowanie tego HTML, aby zasoby referencyjne również były kierowane przez 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");
Punkty do zaplanowania
- Autoryzacja proxy to nie autoryzacja strony: Dane uwierzytelniające w URL proxy uwierzytelniają się w proxy, co różni się od danych logowania do strony internetowej.
- Schemat odnosi się do przeskoku przez proxy: Proxy
http://nadal może pobrać zasobyhttps://, więc wybór schematu dotyczy tego, czy połączenie aplikacja-proxy wymaga TLS. - Kontenery i potoki: Wdrożenia Dockera i agenci budowania CI zazwyczaj nie mają wyjścia, więc taka sama konfiguracja proxy obowiązuje w tym przypadku.
Wynik
Za pomocą jednego parametru zespoły mogą uzyskać w pełni stylizowane, markowe pliki PDF z aplikacji działających za firmowym proxy, wliczając uwierzytelnione środowiska i kontenery. Pełne szczegóły konfiguracji znajdują się w przewodniku proxy.

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podręczników.