Przejdź do treści stopki
PORóWNANIA PRODUKTóW

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")
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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ć zasoby https://, 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.

Curtis Chau
Autor tekstów technicznych

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ę...

Czytaj więcej

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie