跳過到頁腳內容
遷移指南

如何用 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" .
SHELL

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
SHELL

快速啟動遷移

步驟 1:更新授權組態

之前 (高登堡):

Gotenberg 不需要授權,但需要具備容器 URL 的 Docker 基礎架構。

private readonly string _gotenbergUrl = "http://localhost:3000";
private readonly string _gotenbergUrl = "http://localhost:3000";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

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

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

完整的 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/convertpdf.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.com
$vbLabelText   $csharpLabel

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

兩者的差異很大: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.com
$vbLabelText   $csharpLabel

After (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.com
$vbLabelText   $csharpLabel

Gotenberg 方法需要使用不同的端點 (/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.com
$vbLabelText   $csharpLabel

After (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.com
$vbLabelText   $csharpLabel

Gotenberg 要求將基於字串的參數 ("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.4mm
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

轉換公式:<編碼>毫米 = 英吋 × 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
$vbLabelText   $csharpLabel

錯誤處理

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

基礎架構移除

遷移後,請從您的基礎架構中移除 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
YAML

效能考量

延遲比較

手術高登堡 (溫暖)高登堡(冷啟動)IronPdf (首次渲染)IronPdf (後續)
簡單的 HTML150-300 毫秒2-5 秒1-2 秒50-150ms
複雜的 HTML500-1500ms3-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 模式

問題:程式碼仍在使用 HttpClientMultipartFormDataContent.

解決方案:完全以 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
$vbLabelText   $csharpLabel

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

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

遷移清單

預遷移

  • [清查程式碼庫中所有的高登堡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參考,加速您的高登堡遷移。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。