如何用 C# 從 Gotenberg 轉移到 IronPDF
從高登堡轉移到 IronPDF:完整的 C# 遷移指南。
從高登堡轉移到IronPDF可將您的 .NET PDF 工作流程從基於 Docker 的微服務架構與 HTTP API 呼叫轉換為流程中的本機 C# 函式庫。 本指南提供了一個全面、循序漸進的遷移路徑,可為專業的 .NET 開發人員消除基礎架構開銷、網路延遲和容器管理的複雜性。
為什麼要從高登堡轉移到 IronPDF?
高登堡架構問題
Gotenberg 是基於 Docker 的 PDF 生成微服務架構。 雖然功能強大且靈活,但卻為 C# 應用程式帶來顯著的複雜性:
1.基礎架構開銷:需要 Docker、容器協調 (Kubernetes/Docker Compose)、服務發現和負載平衡。 每次部署都會變得更加複雜。
2.網路延遲:每個 PDF 作業都需要 HTTP 呼叫到單獨的服務 - 每個請求增加 10-100 毫秒以上。這種延遲在高流量的情況下會迅速惡化。
3.冷啟動問題:容器啟動可能會增加 2-5 秒的首次請求時間。 每次 pod 重新啟動、每次擴充事件以及每次部署都會觸發冷啟動。
4.作業複雜性:您必須將容器健康、縮放、日誌和監控作為與主應用程式分開的關注事項來管理。
5.多部分表單資料:每個請求都需要建構多部分/表單資料有效負載 - 冗長、容易出錯且維護繁瑣。
6.失敗點:網路超時、服務無法提供以及容器當機都會成為您處理的責任。
7.版本管理:Gotenberg 圖片與您的應用程式分開更新; API 變更可能會意外地破壞整合。
高登堡與IronPDF的比較
| 範疇 | 高登堡 | IronPDF |
|---|---|---|
| 部署 | Docker 容器 + 協調 | 單一 NuGet 套件 |
| 架構 | 微服務 (REST API) | 處理中的資料庫 |
| 每次請求的延遲時間 | 10-100ms+ (網路往返) | < 1ms 開銷 |
| 冷启动 | 2-5 秒 (容器啟動) | 1-2 秒 (僅限第一次渲染) |
| 基礎架構 | Docker、Kubernetes、負載平衡器 | 無要求 |
| 失敗模式 | 網路、容器、服務故障 | 標準的 .NET 例外情況 |
| API 風格 | REST multipart/form-data | 原生 C# 方法呼叫 |
| 縮放 | 橫向(更多容器) | 垂直 (處理中) |
| 調試 | 需要分散式追蹤 | 標準除錯器 |
| 版本控制 | 容器影像標籤 | NuGet 套件版本 |
對於計劃在 2025 年和 2026 年之前採用 .NET 10 和 C# 14 的團隊而言,IronPDF 提供了一個面向未來的基礎,零基礎結構依賴性,可與現代 .NET 模式原生整合。
遷移複雜性評估
按功能估計的工作量
| 特點 | 遷移複雜性 | 筆記 |
|---|---|---|
| HTML 至 PDF | 非常低 | 直接方法替換 |
| URL 至 PDF | 非常低 | 直接方法替換 |
| 自訂紙張尺寸 | 低 | 基於屬性的配置 |
| 邊際 | 低 | 單位轉換 (英吋 → 公釐) |
| PDF 合併 | 低 | 靜態方法呼叫 |
| 頁首/頁尾 | 語言 | 不同的占位符語法 |
| 等待延遲 | 低 | 字串轉換為毫秒 |
| PDF/A 轉換 | 低 | 方法呼叫代替參數 |
範式轉移
這次高登堡遷移的基本轉變是從 具有多部分表單資料的 HTTP API 呼叫到 原生 C# 方法呼叫:
高登堡: HTTP POST multipart/form-data 至 Docker 容器
IronPdf: C# 物件上的直接方法呼叫開始之前
先決條件
1..NET 版本:IronPDF 支持 .NET Framework 4.6.2+ 和 .NET Core 3.1+ / .NET 5/6/7/8/9+ 。 2.許可金鑰:從ironpdf.com取得您的IronPDF授權金鑰。 3.規劃基礎架構移除:記錄高登堡容器,以便在遷移後進行退廢
辨識所有高登堡使用方式
# Find direct HTTP calls to Gotenberg
grep -r "gotenberg\|/forms/chromium\|/forms/libreoffice\|/forms/pdfengines" --include="*.cs" .
# Find GotenbergSharpApiClient usage
grep -r "GotenbergSharpClient\|Gotenberg.Sharp\|ChromiumRequest" --include="*.cs" .
# Find Docker/Kubernetes高登堡configuration
grep -r "gotenberg/gotenberg\|gotenberg:" --include="*.yml" --include="*.yaml" .# Find direct HTTP calls to Gotenberg
grep -r "gotenberg\|/forms/chromium\|/forms/libreoffice\|/forms/pdfengines" --include="*.cs" .
# Find GotenbergSharpApiClient usage
grep -r "GotenbergSharpClient\|Gotenberg.Sharp\|ChromiumRequest" --include="*.cs" .
# Find Docker/Kubernetes高登堡configuration
grep -r "gotenberg/gotenberg\|gotenberg:" --include="*.yml" --include="*.yaml" .NuGet 套件變更
# Remove高登堡client (if using)
dotnet remove package Gotenberg.Sharp.API.Client
# Install IronPDF
dotnet add package IronPdf# Remove高登堡client (if using)
dotnet remove package Gotenberg.Sharp.API.Client
# Install IronPDF
dotnet add package IronPdf快速啟動遷移
步驟 1:更新授權組態
之前 (高登堡):。
Gotenberg 不需要授權,但需要具備容器 URL 的 Docker 基礎架構。
private readonly string _gotenbergUrl = "http://localhost:3000";private readonly string _gotenbergUrl = "http://localhost:3000";IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (IronPDF):
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";IRON VB CONVERTER ERROR developers@ironsoftware.com步驟 2:更新命名空間匯入
// Before (Gotenberg)
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;
// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;// Before (Gotenberg)
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;
// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;IRON VB CONVERTER ERROR developers@ironsoftware.com完整的 API 參考資料
高登堡Endpoint 到IronPDF的映射
| 哥登堡路線 | IronPdf 同等級產品 | 筆記 |
|---|---|---|
POST /forms/chromium/convert/html | <代碼>ChromePdfRenderer.RenderHtmlAsPdf()</代碼 | HTML 字串轉 PDF |
POST /forms/chromium/convert/url | <代碼>ChromePdfRenderer.RenderUrlAsPdf()</代碼 | URL 至 PDF |
POST /forms/pdfengines/merge | <代碼>PdfDocument.Merge()</代碼 | 合併多個 PDFs |
POST /forms/pdfengines/convert | pdf.SaveAs() 與設定 | PDF/A 轉換 |
GET /health | 不適用 | 不需要外部服務 |
表單參數至 RenderingOptions 對應
| 高登堡參數 | IronPdf 特性 | 轉換注意事項 |
|---|---|---|
paperWidth (英吋) | RenderingOptions.PaperSize | 使用枚舉或自訂大小 |
paperHeight (英吋) | RenderingOptions.PaperSize | 使用枚舉或自訂大小 |
marginTop (英吋) | RenderingOptions.MarginTop | 毫米數乘以 25.4 |
marginBottom (英吋) | RenderingOptions.MarginBottom | 毫米數乘以 25.4 |
列印背景 | <編碼>RenderingOptions.PrintHtmlBackgrounds</編碼 | 布林 |
landscape | <編碼>RenderingOptions.PaperOrientation</編碼 | Landscape 枚舉 |
等待延遲 | RenderingOptions.RenderDelay | 轉換為毫秒 |
程式碼遷移範例
範例 1:基本 HTML 到 PDF
之前 (高登堡):。
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;
class GotenbergExample
{
static async Task Main()
{
var gotenbergUrl = "http://localhost:3000/forms/chromium/convert/html";
using var client = new HttpClient();
using var content = new MultipartFormDataContent();
var html = "<html><body><h1>Hello from Gotenberg</h1></body></html>";
content.Add(new StringContent(html), "files", "index.html");
var response = await client.PostAsync(gotenbergUrl, content);
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
await File.WriteAllBytesAsync("output.pdf", pdfBytes);
Console.WriteLine("PDF generated successfully");
}
}using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;
class GotenbergExample
{
static async Task Main()
{
var gotenbergUrl = "http://localhost:3000/forms/chromium/convert/html";
using var client = new HttpClient();
using var content = new MultipartFormDataContent();
var html = "<html><body><h1>Hello from Gotenberg</h1></body></html>";
content.Add(new StringContent(html), "files", "index.html");
var response = await client.PostAsync(gotenbergUrl, content);
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
await File.WriteAllBytesAsync("output.pdf", pdfBytes);
Console.WriteLine("PDF generated successfully");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (IronPDF):
// NuGet: Install-Package IronPdf
using System;
using IronPdf;
class IronPdfExample
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var html = "<html><body><h1>Hello from IronPDF</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF generated successfully");
}
}// NuGet: Install-Package IronPdf
using System;
using IronPdf;
class IronPdfExample
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var html = "<html><body><h1>Hello from IronPDF</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF generated successfully");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com兩者的差異很大:Gotenberg 需要建構 HttpClient 、建構 MultipartFormDataContent 、進行同步 HTTP POST 到執行中的 Docker 容器,以及處理 byte array 回應。IronPDF透過 ChromePdfRenderer 方法呼叫將此功能縮減為三行 - 無網路開銷、無容器依賴性、無 async 複雜性。 請參閱 HTML to PDF 文件,以瞭解其他渲染選項。
範例 2:URL 到 PDF 的轉換
之前 (高登堡):。
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;
class GotenbergUrlToPdf
{
static async Task Main()
{
var gotenbergUrl = "http://localhost:3000/forms/chromium/convert/url";
using var client = new HttpClient();
using var content = new MultipartFormDataContent();
content.Add(new StringContent("https://example.com"), "url");
var response = await client.PostAsync(gotenbergUrl, content);
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
await File.WriteAllBytesAsync("webpage.pdf", pdfBytes);
Console.WriteLine("PDF from URL generated successfully");
}
}using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;
class GotenbergUrlToPdf
{
static async Task Main()
{
var gotenbergUrl = "http://localhost:3000/forms/chromium/convert/url";
using var client = new HttpClient();
using var content = new MultipartFormDataContent();
content.Add(new StringContent("https://example.com"), "url");
var response = await client.PostAsync(gotenbergUrl, content);
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
await File.WriteAllBytesAsync("webpage.pdf", pdfBytes);
Console.WriteLine("PDF from URL generated successfully");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (IronPDF):
// NuGet: Install-Package IronPdf
using System;
using IronPdf;
class IronPdfUrlToPdf
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("webpage.pdf");
Console.WriteLine("PDF from URL generated successfully");
}
}// NuGet: Install-Package IronPdf
using System;
using IronPdf;
class IronPdfUrlToPdf
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("webpage.pdf");
Console.WriteLine("PDF from URL generated successfully");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comGotenberg 方法需要使用不同的端點 (/forms/chromium/convert/url)、以 URL 作為表單欄位來建立多部分內容,並處理 async HTTP 回應。IronPDF的 RenderUrlAsPdf() 方法直接接受 URL 並同步返回 PdfDocument 物件。 進一步瞭解 URL 至 PDF 轉換。
範例 3:自訂紙張大小和邊界
之前 (高登堡):。
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;
class GotenbergCustomSize
{
static async Task Main()
{
var gotenbergUrl = "http://localhost:3000/forms/chromium/convert/html";
using var client = new HttpClient();
using var content = new MultipartFormDataContent();
var html = "<html><body><h1>Custom Size PDF</h1></body></html>";
content.Add(new StringContent(html), "files", "index.html");
content.Add(new StringContent("8.5"), "paperWidth");
content.Add(new StringContent("11"), "paperHeight");
content.Add(new StringContent("0.5"), "marginTop");
content.Add(new StringContent("0.5"), "marginBottom");
var response = await client.PostAsync(gotenbergUrl, content);
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
await File.WriteAllBytesAsync("custom-size.pdf", pdfBytes);
Console.WriteLine("Custom size PDF generated successfully");
}
}using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;
class GotenbergCustomSize
{
static async Task Main()
{
var gotenbergUrl = "http://localhost:3000/forms/chromium/convert/html";
using var client = new HttpClient();
using var content = new MultipartFormDataContent();
var html = "<html><body><h1>Custom Size PDF</h1></body></html>";
content.Add(new StringContent(html), "files", "index.html");
content.Add(new StringContent("8.5"), "paperWidth");
content.Add(new StringContent("11"), "paperHeight");
content.Add(new StringContent("0.5"), "marginTop");
content.Add(new StringContent("0.5"), "marginBottom");
var response = await client.PostAsync(gotenbergUrl, content);
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
await File.WriteAllBytesAsync("custom-size.pdf", pdfBytes);
Console.WriteLine("Custom size PDF generated successfully");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (IronPDF):
// NuGet: Install-Package IronPdf
using System;
using IronPdf;
using IronPdf.Rendering;
class IronPdfCustomSize
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
var html = "<html><body><h1>Custom Size PDF</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("custom-size.pdf");
Console.WriteLine("Custom size PDF generated successfully");
}
}// NuGet: Install-Package IronPdf
using System;
using IronPdf;
using IronPdf.Rendering;
class IronPdfCustomSize
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
var html = "<html><body><h1>Custom Size PDF</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("custom-size.pdf");
Console.WriteLine("Custom size PDF generated successfully");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comGotenberg 要求將基於字串的參數 ("8.5"、"11"、"0.5") 加入到多部分表單資料中 - 無類型安全性、無 IntelliSense、易於錯誤輸入。IronPDF提供具有 PdfPaperSize 枚舉和數字邊界值的強式類型屬性。 請注意,IronPdf 的頁邊空白以毫米為單位 (50mm ≈ 2 英寸),而高登堡使用英寸。
關鍵遷移注意事項
單位轉換
此次高登堡轉移中最重要的轉換是邊際單位:
// Gotenberg: margins in inches
content.Add(new StringContent("0.5"), "marginTop"); // 0.5 inches
content.Add(new StringContent("1"), "marginBottom"); // 1 inch
// IronPDF: margins in millimeters
renderer.RenderingOptions.MarginTop = 12.7; // 0.5 inches × 25.4 = 12.7mm
renderer.RenderingOptions.MarginBottom = 25.4; // 1 inch × 25.4 = 25.4mm// Gotenberg: margins in inches
content.Add(new StringContent("0.5"), "marginTop"); // 0.5 inches
content.Add(new StringContent("1"), "marginBottom"); // 1 inch
// IronPDF: margins in millimeters
renderer.RenderingOptions.MarginTop = 12.7; // 0.5 inches × 25.4 = 12.7mm
renderer.RenderingOptions.MarginBottom = 25.4; // 1 inch × 25.4 = 25.4mmIRON VB CONVERTER ERROR developers@ironsoftware.com轉換公式:<編碼>毫米 = 英吋 × 25.4</編碼
同步與非同步
由於 HTTP 通訊的關係,Gotenberg 需要進行同步操作:
// Gotenberg: Forced async due to network calls
var response = await client.PostAsync(gotenbergUrl, content);
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
// IronPDF: Synchronous in-process execution
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// IronPDF: Async wrapper if needed
var pdf = await Task.Run(() => renderer.RenderHtmlAsPdf(html));// Gotenberg: Forced async due to network calls
var response = await client.PostAsync(gotenbergUrl, content);
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
// IronPDF: Synchronous in-process execution
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// IronPDF: Async wrapper if needed
var pdf = await Task.Run(() => renderer.RenderHtmlAsPdf(html));IRON VB CONVERTER ERROR developers@ironsoftware.com錯誤處理
// Gotenberg: HTTP error handling
try
{
var response = await client.PostAsync(gotenbergUrl, content);
response.EnsureSuccessStatusCode(); // What if 500? 503? Timeout?
}
catch (HttpRequestException ex) { /* Network error */ }
catch (TaskCanceledException ex) { /* Timeout */ }
// IronPDF: Standard .NET exceptions
try
{
var pdf = renderer.RenderHtmlAsPdf(html);
}
catch (Exception ex)
{
Console.WriteLine($"PDF generation failed: {ex.Message}");
}// Gotenberg: HTTP error handling
try
{
var response = await client.PostAsync(gotenbergUrl, content);
response.EnsureSuccessStatusCode(); // What if 500? 503? Timeout?
}
catch (HttpRequestException ex) { /* Network error */ }
catch (TaskCanceledException ex) { /* Timeout */ }
// IronPDF: Standard .NET exceptions
try
{
var pdf = renderer.RenderHtmlAsPdf(html);
}
catch (Exception ex)
{
Console.WriteLine($"PDF generation failed: {ex.Message}");
}IRON VB CONVERTER ERROR developers@ironsoftware.com基礎架構移除
遷移後,請從您的基礎架構中移除 Gotenberg:
# REMOVE from docker-compose.yml:
# services:
# gotenberg:
# image: gotenberg/gotenberg:8
# ports:
# - "3000:3000"
# deploy:
# resources:
# limits:
# memory: 2G# REMOVE from docker-compose.yml:
# services:
# gotenberg:
# image: gotenberg/gotenberg:8
# ports:
# - "3000:3000"
# deploy:
# resources:
# limits:
# memory: 2G效能考量
延遲比較
| 手術 | 高登堡 (溫暖) | 高登堡(冷啟動) | IronPdf (首次渲染) | IronPdf (後續) |
|---|---|---|---|---|
| 簡單的 HTML | 150-300 毫秒 | 2-5 秒 | 1-2 秒 | 50-150ms |
| 複雜的 HTML | 500-1500ms | 3-7 秒 | 1.5-3 秒 | 200-800ms |
| URL 渲染 | 1-5 秒 | 3-10 秒 | 1-5 秒 | 500ms-3s |
消除基礎結構成本
| 資源 | 高登堡 | IronPDF |
|---|---|---|
| 所需的容器 | 1-N (縮放) | 0 |
| 每個容器的記憶體 | 512MB-2GB | 不適用 |
| 每次請求的網路開銷 | 10-100 毫秒 | 0ms |
| 健康檢查端點 | 要求 | 不需要 |
| 負載平衡器 | 經常需要 | 不需要 |
疑難排解
問題 1:不需要 HttpClient 模式
問題:程式碼仍在使用 HttpClient 和 MultipartFormDataContent.
解決方案:完全以 ChromePdfRenderer 取代:
// Remove all of this:
// using var client = new HttpClient();
// using var content = new MultipartFormDataContent();
// content.Add(new StringContent(html), "files", "index.html");
// var response = await client.PostAsync(url, content);
// Replace with:
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);// Remove all of this:
// using var client = new HttpClient();
// using var content = new MultipartFormDataContent();
// content.Add(new StringContent(html), "files", "index.html");
// var response = await client.PostAsync(url, content);
// Replace with:
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);IRON VB CONVERTER ERROR developers@ironsoftware.com問題 2:邊際單位錯誤
問題:PDF 移轉後的邊距不正確。
解決方案:將英吋轉換為公釐:
//高登堡used inches: "0.5"
//IronPDFuses millimeters: 0.5 × 25.4 = 12.7
renderer.RenderingOptions.MarginTop = 12.7;//高登堡used inches: "0.5"
//IronPDFuses millimeters: 0.5 × 25.4 = 12.7
renderer.RenderingOptions.MarginTop = 12.7;IRON VB CONVERTER ERROR developers@ironsoftware.com問題 3:容器 URL 參考資料
問題:程式碼包含 http://gotenberg:3000 或類似的 URL。
解決方案:移除所有容器 URL 引用-IronPdf 在進程中執行:
// Remove:
// private readonly string _gotenbergUrl = "http://gotenberg:3000";
//IronPDFneeds no URL - it's in-process
var renderer = new ChromePdfRenderer();// Remove:
// private readonly string _gotenbergUrl = "http://gotenberg:3000";
//IronPDFneeds no URL - it's in-process
var renderer = new ChromePdfRenderer();IRON VB CONVERTER ERROR developers@ironsoftware.com遷移清單
預遷移
- [清查程式碼庫中所有的高登堡HTTP 呼叫
- [ ] 記錄目前的高登堡設定 (超時、邊界、紙張大小)
- [ ] 識別所有 Docker/Kubernetes高登堡配置
- [ ] 獲得 IronPdf 授權金鑰
- [ ] 計劃基礎架構停用
程式碼遷移
- [ ] 安裝 IronPdf NuGet 套件:
dotnet add package IronPdf。 - [ ] 移除高登堡客戶端套件
- [ ] 使用IronPDF方法呼叫取代所有對高登堡的 HTTP 呼叫
- [ ] 將邊距單位從英吋轉換為公釐
- [ ] 更新錯誤處理 (HTTP 錯誤 → .NET 異常)
- [ ] 在啟動時加入授權金鑰初始化
基礎架構遷移
- [從 Docker Compose / Kubernetes 移除 Gotenberg
- [ ] 更新 CI/CD 管道 (移除高登堡圖片拉取)
- [ ] 移除高登堡健康檢查
- [ ] 從設定中移除高登堡URL
測試
- [ ] 測試 HTML 至 PDF 的轉換
- [測試 URL 至 PDF 的轉換
- [ ] 確認邊界和尺寸的準確性
- [ ] 負載下的效能測試
- [ ] 測試初稿預熱時間
後遷移
- [ ] 移除高登堡容器部署
- [ ] 存檔高登堡配置文件
- [ ] 更新文件
- [ ] 監控應用程式記憶體使用情況
- [ ] 確認沒有遺失的網路連線
結論
從高登堡遷移到IronPDF可消除 Docker 基礎架構的複雜性,消除每個 PDF 作業的網路延遲,並以乾淨、類型安全的 C# 方法呼叫取代冗長的多部分表單資料建置。 其結果是更簡單的部署、更低的延遲、更少的故障點和更容易的除錯,同時透過IronPDF的嵌入式 Chromium 引擎維持完整的 HTML/CSS/JavaScript 渲染功能。
本次轉換的主要變更如下 1.架構:REST API 呼叫 → 原生 C# 方法 2.基礎架構:Docker 容器 → NuGet 套件 3.單位:英吋 → 邊距用毫米 4.錯誤處理:HTTP 狀態代碼 → .NET 異常 5.延遲:網路往返 → 進程中執行
探索完整的 IronPdf說明文件、教學和API參考,加速您的高登堡遷移。






