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");
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")
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);
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)
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");
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
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.
Często Zadawane Pytania
Dlaczego aplikacje Enterprise mają problem z renderowaniem PDF za korporacyjnym proxy?
Aplikacje Enterprise często działają w sieciach, które są zamknięte i nie mają bezpośredniego dostępu do zewnętrznych zasobów. Powoduje to problemy, takie jak uszkodzone obrazy i brakujące czcionki w PDF-ach, gdy zewnętrzne zasoby są niedostępne.
Jak IronPDF rozwiązuje problemy z renderowaniem PDF za proxy?
IronPDF pozwala określić proxy bezpośrednio w metodzie `RenderHtmlAsPdf`, kierując wszystkie żądania zasobów przez proxy, aby zapewnić prawidłowy dostęp i renderowanie zewnętrznych zasobów.
Czy IronPDF radzi sobie z autoryzowanymi proxy do renderowania PDF?
Tak, IronPDF obsługuje autoryzowane proxy. Poświadczenia mogą być umieszczone w URL proxy, a specjalne znaki w hasłach powinny być zakodowane procentowo.
Jaka jest metoda renderowania wewnętrznych URL-i za proxy przy użyciu IronPDF?
Dla wewnętrznych URL-i użyj `HttpClient` skonfigurowanego z proxy do pobrania HTML, a następnie renderuj ten HTML z IronPDF, aby wszystkie odnoszone zasoby były kierowane przez proxy.
Co należy wziąć pod uwagę podczas konfigurowania proxy dla wdrożeń Docker z IronPDF?
Wdrożenia Docker i agenci budowania CI na ogół nie mają wyjścia, więc należy zastosować tę samą konfigurację proxy, co w aplikacjach za korporacyjnym proxy, aby zapewnić dostęp do zasobów.
Czy schemat URL proxy wpływa na zasoby pobierane przez IronPDF?
Schemat URL proxy (`http://` lub `https://`) jest ważny dla połączenia między aplikacją a proxy. Proxy `http://` nadal może pobrać zasoby `https://`, więc wybór schematu dotyczy tego, czy TLS jest potrzebny dla połączenia aplikacji z proxy.
Jaki jest wpływ użycia parametru proxy w IronPDF?
Dzięki użyciu parametru proxy, IronPDF umożliwia aplikacjom generowanie w pełni stylizowanych, markowych PDF-ów nawet przy pracy za korporacyjnym proxy lub w autoryzowanych środowiskach i kontenerach.
Jak IronPDF obsługuje specjalne znaki w hasłach proxy?
Specjalne znaki w hasłach proxy muszą być kodowane procentowo podczas tworzenia URL proxy, aby IronPDF mógł się poprawnie uwierzytelnić.
Jaka jest różnica między autoryzacją proxy a autoryzacją strony?
Autoryzacja proxy dotyczy poświadczeń w URL proxy do uzyskania dostępu do serwera proxy, podczas gdy autoryzacja strony odnosi się do logowania na konkretnej stronie internetowej lub usłudze sieciowej.

