跳過到頁腳內容
遷移指南

從 Fluid (Templating) 轉移到 IronPDF

Fluid 是一個 .NET 函式庫,它實作了 Liquid 模板語言,為開發人員提供了一種靈活的方式來渲染動態模板,並將內容與表示邏輯分開。 雖然 Fluid 可以有效地產生動態文字輸出,但它並不直接支援 PDF 生成——開發人員必須整合額外的 PDF 庫才能將 HTML 輸出轉換為 PDF 文件。 這種雙庫的方式帶來了許多開發團隊想要消除的複雜性。

本指南提供了從使用外部 PDF 函式庫的 Fluid (templating) 到IronPDF的完整轉換路徑,並提供分步說明、程式碼比較以及實用範例,以供評估此轉換的 .NET 專業開發人員使用。

為什麼要從 Fluid(模板化)轉移到 IronPDF?

Fluid 是一個基於 Liquid 的優秀模板引擎,但將其用於 PDF 生成會引入顯著的複雜性:

雙庫依賴: Fluid 只產生 HTML——你需要一個單獨的 PDF 庫(wkhtmltopdf、PuppeteerSharp 等)來建立 PDF,這使得你的依賴項和維護負擔翻倍。

整合複雜性:協調兩個函式庫意味著管理兩套配置、錯誤處理和更新。 當發生故障時,除錯就會變得更具挑戰性。

Liquid 文法學習曲線:開發人員必須學習 Liquid 範本語法({{ }}, {% %}),而 C# 已經內建了強大的字串處理功能。

PDF 控制有限:您的 PDF 輸出品質取決於您選擇搭配 Fluid 使用的 PDF 函式庫,而不是專用的渲染引擎。

偵錯挑戰:模板產生或 PDF 生成階段都可能出現錯誤,這使得故障排除比使用單一整合解決方案更加困難。

線程安全問題: TemplateContext 不是線程安全的,需要在並發應用程式中仔細管理。

IronPDFvs Fluid(模板化):功能比較

了解架構上的差異有助於技術決策者評估遷移投資:

範疇 Fluid + PDF 庫 IronPDF
依賴性 2+ 套件 (Fluid + PDF 資料庫) 單一套件
範例設計 Liquid 語法({{ }} C# 字串插值或 Razor
PDF生成 需要外部函式庫 內建 Chromium 引擎
CSS 支援 依賴 PDF 函式庫 完整的 CSS3 與 Flexbox/Grid
JavaScript 依賴 PDF 函式庫 完整的 JavaScript 支援
線程安全 TemplateContext 非線程安全 ChromePdfRenderer 是線程安全的
學習曲線 Liquid + PDF 圖書館 API HTML/CSS (網頁標準)
錯誤處理 兩個錯誤來源 單一錯誤來源

快速入門:Fluid 到IronPDF的遷移。

只要完成這些基本步驟,就可以立即開始遷移。

步驟 1:取代 NuGet 套件

移除 Fluid 和任何外部 PDF 函式庫:

# Remove Fluid and external PDF library
dotnet remove package Fluid.Core
dotnet remove package WkHtmlToPdf-DotNet  # or whatever PDF library you used
dotnet remove package PuppeteerSharp       # if used
# Remove Fluid and external PDF library
dotnet remove package Fluid.Core
dotnet remove package WkHtmlToPdf-DotNet  # or whatever PDF library you used
dotnet remove package PuppeteerSharp       # if used
SHELL

安裝 IronPDF:

# InstallIronPDF(all-in-one solution)
dotnet add package IronPdf
# InstallIronPDF(all-in-one solution)
dotnet add package IronPdf
SHELL

步驟 2:更新命名空間

用IronPDF取代 Fluid 命名空間:

// Before (Fluid + external PDF library)
using Fluid;
using Fluid.Values;
using SomeExternalPdfLibrary;

// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;  // For RenderingOptions
// Before (Fluid + external PDF library)
using Fluid;
using Fluid.Values;
using SomeExternalPdfLibrary;

// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;  // For RenderingOptions
Imports Fluid
Imports Fluid.Values
Imports SomeExternalPdfLibrary

Imports IronPdf
Imports IronPdf.Rendering ' For RenderingOptions
$vbLabelText   $csharpLabel

步驟 3:初始化授權

在應用程式啟動時加入授權初始化:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

程式碼遷移範例

基本 HTML 轉 PDF

最基本的操作揭示了這些方法之間的關鍵差異。

流暢的方法:

// NuGet: Install-Package Fluid.Core
using Fluid;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var parser = new FluidParser();
        var template = parser.Parse("<html><body><h1>Hello {{name}}!</h1></body></html>");
        var context = new TemplateContext();
        context.SetValue("name", "World");
        var html = await template.RenderAsync(context);

        // Fluid only generates HTML - you'd need another library to convert to PDF
        File.WriteAllText("output.html", html);
    }
}
// NuGet: Install-Package Fluid.Core
using Fluid;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var parser = new FluidParser();
        var template = parser.Parse("<html><body><h1>Hello {{name}}!</h1></body></html>");
        var context = new TemplateContext();
        context.SetValue("name", "World");
        var html = await template.RenderAsync(context);

        // Fluid only generates HTML - you'd need another library to convert to PDF
        File.WriteAllText("output.html", html);
    }
}
Imports Fluid
Imports System.IO
Imports System.Threading.Tasks

Module Program
    Async Function Main() As Task
        Dim parser As New FluidParser()
        Dim template = parser.Parse("<html><body><h1>Hello {{name}}!</h1></body></html>")
        Dim context As New TemplateContext()
        context.SetValue("name", "World")
        Dim html = Await template.RenderAsync(context)

        ' Fluid only generates HTML - you'd need another library to convert to PDF
        File.WriteAllText("output.html", html)
    End Function
End Module
$vbLabelText   $csharpLabel

IronPDF 方法:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var html = "<html><body><h1>Hello World!</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var html = "<html><body><h1>Hello World!</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim html = "<html><body><h1>Hello World!</h1></body></html>"
        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Fluid 需要建立一個 FluidParser,解析範本字串,建立一個 TemplateContext,為每個變數呼叫 SetValue(),異步渲染以取得 HTML,然後寫入檔案-但這仍然不是 PDF。 程式碼中的注解明確指出:"Fluid 只會產生 HTML - 您需要另一個函式庫來轉換成 PDF"。

IronPDF 消除了這種複雜性:建立一個渲染器,呼叫 RenderHtmlAsPdf(),然後直接儲存為 PDF。 沒有中間的 HTML 檔案,沒有額外的程式庫。

如需進階的 HTML 至IronPDF情境,請參閱 HTML 至 PDF 轉換指南

具有動態資料的發票範本

具有多重變數的文件範本可清楚顯示範本模式的差異。

流暢的方法:

// NuGet: Install-Package Fluid.Core
using Fluid;
using System;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var parser = new FluidParser();
        var template = parser.Parse(@"
            <html><body>
                <h1>Invoice #{{invoiceNumber}}</h1>
                <p>Date: {{date}}</p>
                <p>Customer: {{customer}}</p>
                <p>Total: ${{total}}</p>
            </body></html>");

        var context = new TemplateContext();
        context.SetValue("invoiceNumber", "12345");
        context.SetValue("date", DateTime.Now.ToShortDateString());
        context.SetValue("customer", "John Doe");
        context.SetValue("total", 599.99);

        var html = await template.RenderAsync(context);
        // Fluid outputs HTML - requires additional PDF library
        File.WriteAllText("invoice.html", html);
    }
}
// NuGet: Install-Package Fluid.Core
using Fluid;
using System;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var parser = new FluidParser();
        var template = parser.Parse(@"
            <html><body>
                <h1>Invoice #{{invoiceNumber}}</h1>
                <p>Date: {{date}}</p>
                <p>Customer: {{customer}}</p>
                <p>Total: ${{total}}</p>
            </body></html>");

        var context = new TemplateContext();
        context.SetValue("invoiceNumber", "12345");
        context.SetValue("date", DateTime.Now.ToShortDateString());
        context.SetValue("customer", "John Doe");
        context.SetValue("total", 599.99);

        var html = await template.RenderAsync(context);
        // Fluid outputs HTML - requires additional PDF library
        File.WriteAllText("invoice.html", html);
    }
}
Imports Fluid
Imports System
Imports System.IO
Imports System.Threading.Tasks

Module Program
    Async Function Main() As Task
        Dim parser As New FluidParser()
        Dim template = parser.Parse("
            <html><body>
                <h1>Invoice #{{invoiceNumber}}</h1>
                <p>Date: {{date}}</p>
                <p>Customer: {{customer}}</p>
                <p>Total: ${{total}}</p>
            </body></html>")

        Dim context As New TemplateContext()
        context.SetValue("invoiceNumber", "12345")
        context.SetValue("date", DateTime.Now.ToShortDateString())
        context.SetValue("customer", "John Doe")
        context.SetValue("total", 599.99)

        Dim html = Await template.RenderAsync(context)
        ' Fluid outputs HTML - requires additional PDF library
        File.WriteAllText("invoice.html", html)
    End Function
End Module
$vbLabelText   $csharpLabel

IronPDF 方法:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var invoiceNumber = "12345";
        var date = DateTime.Now.ToShortDateString();
        var customer = "John Doe";
        var total = 599.99;

        var html = $@"
            <html><body>
                <h1>Invoice #{invoiceNumber}</h1>
                <p>Date: {date}</p>
                <p>Customer: {customer}</p>
                <p>Total: ${total}</p>
            </body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("invoice.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var invoiceNumber = "12345";
        var date = DateTime.Now.ToShortDateString();
        var customer = "John Doe";
        var total = 599.99;

        var html = $@"
            <html><body>
                <h1>Invoice #{invoiceNumber}</h1>
                <p>Date: {date}</p>
                <p>Customer: {customer}</p>
                <p>Total: ${total}</p>
            </body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("invoice.pdf");
    }
}
Imports IronPdf
Imports System

Module Program
    Sub Main()
        Dim renderer As New ChromePdfRenderer()
        Dim invoiceNumber As String = "12345"
        Dim [date] As String = DateTime.Now.ToShortDateString()
        Dim customer As String = "John Doe"
        Dim total As Double = 599.99

        Dim html As String = $"
            <html><body>
                <h1>Invoice #{invoiceNumber}</h1>
                <p>Date: {[date]}</p>
                <p>Customer: {customer}</p>
                <p>Total: ${total}</p>
            </body></html>"

        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("invoice.pdf")
    End Sub
End Module
$vbLabelText   $csharpLabel

Fluid 使用 Liquid 的 {{variable}} 語法,每個變數使用 context.SetValue()。 該註釋明確指出"Fluid 輸出 HTML,需要額外的 PDF 庫"。IronPDF使用標準的 C# 字串插值($"{variable}")——語法開發人員對此早已熟知——並直接輸出為 PDF。

探索 IronPDF 教學,瞭解更多文件生成模式。

使用循環的動態資料

使用集合和迴圈的範本展示控制流程的差異。

流暢的方法:

// NuGet: Install-Package Fluid.Core
using Fluid;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var parser = new FluidParser();
        var template = parser.Parse(@"
            <html><body>
                <h1>{{title}}</h1>
                <ul>
                {% for item in items %}
                    <li>{{item}}</li>
                {% endfor %}
                </ul>
            </body></html>");

        var context = new TemplateContext();
        context.SetValue("title", "My List");
        context.SetValue("items", new[] { "Item 1", "Item 2", "Item 3" });

        var html = await template.RenderAsync(context);
        // Fluid generates HTML only - separate PDF conversion needed
        File.WriteAllText("template-output.html", html);
    }
}
// NuGet: Install-Package Fluid.Core
using Fluid;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var parser = new FluidParser();
        var template = parser.Parse(@"
            <html><body>
                <h1>{{title}}</h1>
                <ul>
                {% for item in items %}
                    <li>{{item}}</li>
                {% endfor %}
                </ul>
            </body></html>");

        var context = new TemplateContext();
        context.SetValue("title", "My List");
        context.SetValue("items", new[] { "Item 1", "Item 2", "Item 3" });

        var html = await template.RenderAsync(context);
        // Fluid generates HTML only - separate PDF conversion needed
        File.WriteAllText("template-output.html", html);
    }
}
Imports Fluid
Imports System.Collections.Generic
Imports System.IO
Imports System.Threading.Tasks

Class Program
    Shared Async Function Main() As Task
        Dim parser As New FluidParser()
        Dim template = parser.Parse("
            <html><body>
                <h1>{{title}}</h1>
                <ul>
                {% for item in items %}
                    <li>{{item}}</li>
                {% endfor %}
                </ul>
            </body></html>")

        Dim context As New TemplateContext()
        context.SetValue("title", "My List")
        context.SetValue("items", New String() {"Item 1", "Item 2", "Item 3"})

        Dim html = Await template.RenderAsync(context)
        ' Fluid generates HTML only - separate PDF conversion needed
        File.WriteAllText("template-output.html", html)
    End Function
End Class
$vbLabelText   $csharpLabel

IronPDF 方法:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var title = "My List";
        var items = new[] { "Item 1", "Item 2", "Item 3" };

        var html = $@"
            <html><body>
                <h1>{title}</h1>
                <ul>";

        foreach (var item in items)
        {
            html += $"<li>{item}</li>";
        }

        html += "</ul></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("template-output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var title = "My List";
        var items = new[] { "Item 1", "Item 2", "Item 3" };

        var html = $@"
            <html><body>
                <h1>{title}</h1>
                <ul>";

        foreach (var item in items)
        {
            html += $"<li>{item}</li>";
        }

        html += "</ul></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("template-output.pdf");
    }
}
Imports IronPdf
Imports System
Imports System.Collections.Generic

Module Program
    Sub Main()
        Dim renderer As New ChromePdfRenderer()
        Dim title As String = "My List"
        Dim items As String() = {"Item 1", "Item 2", "Item 3"}

        Dim html As String = $"
            <html><body>
                <h1>{title}</h1>
                <ul>"

        For Each item As String In items
            html += $"<li>{item}</li>"
        Next

        html += "</ul></body></html>"

        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("template-output.pdf")
    End Sub
End Module
$vbLabelText   $csharpLabel

Fluid 使用 Liquid 的 {% for item in items %}...{% endfor %} 語法-這是一種開發人員必須學習的範本語言。 註釋指出"Fluid 僅產生 HTML,需要單獨轉換為 PDF"。IronPDF使用標準的 C# 循環(無需學習新語法),並直接輸出為 PDF。

Fluid API 至IronPDF對應參考。

此對應可透過顯示直接的 API 對應關係來加速遷移:

核心類映射

流體類 IronPDF 同等級產品
FluidParser 不適用
FluidTemplate 不適用
TemplateContext C# 物件/字串
TemplateOptions RenderingOptions
FluidValue 原生 C# 類型
外部 PDF 類 ChromePdfRenderer

方法映射

流體方法 IronPDF 同等級產品
new FluidParser() new ChromePdfRenderer()
parser.Parse(source) 不適用
template.RenderAsync(context) renderer.RenderHtmlAsPdf(html)
context.SetValue("key", value) var key = value;

Liquid 語法到 C# 的映射

液態語法 C# 對應詞
{{ variable }} $"{variable}"
{% for item in items %} foreach (var item in items)
{% if condition %} if (condition)
{{ x \|上例 }} x.ToUpper()
{{ x \|date: '%Y-%m-%d' }} x.ToString("yyyy-MM-dd")
{{ x \|number_with_precision: 2 }} x.ToString("F2")

常見的遷移問題與解決方案

問題 1:液態語法轉換

Fluid:使用 {{ variable }}{% control %} 語法。

解決方案:以 C# 字串插值和控制流程取代:

// Liquid: {{ name | upcase }}
// C#: $"{name.ToUpper()}"

// Liquid: {% for item in items %}{{item}}{% endfor %}
// C#: foreach (var item in items) { html += $"{item}"; }
// Liquid: {{ name | upcase }}
// C#: $"{name.ToUpper()}"

// Liquid: {% for item in items %}{{item}}{% endfor %}
// C#: foreach (var item in items) { html += $"{item}"; }
$vbLabelText   $csharpLabel

問題 2:TemplateContext 變數

Fluid:使用 context.SetValue("key", value) 傳遞資料。

解決方案:使用標準 C# 變數:

// Before (Fluid)
var context = new TemplateContext();
context.SetValue("customer", customerName);

// After (IronPDF)
var customer = customerName;
var html = $"<p>Customer: {customer}</p>";
// Before (Fluid)
var context = new TemplateContext();
context.SetValue("customer", customerName);

// After (IronPDF)
var customer = customerName;
var html = $"<p>Customer: {customer}</p>";
' Before (Fluid)
Dim context As New TemplateContext()
context.SetValue("customer", customerName)

' After (IronPDF)
Dim customer = customerName
Dim html = $"<p>Customer: {customer}</p>"
$vbLabelText   $csharpLabel

第 3 期:線程安全

Fluid: TemplateContext 不是線程安全的,需要在並發應用程式中仔細管理。

解決方案: ChromePdfRenderer 是執行緒安全的,可以在執行緒間共用:

// Thread-safe usage
private static readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();

public byte[] GeneratePdf(string html)
{
    var pdf = _renderer.RenderHtmlAsPdf(html);
    return pdf.BinaryData;
}
// Thread-safe usage
private static readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();

public byte[] GeneratePdf(string html)
{
    var pdf = _renderer.RenderHtmlAsPdf(html);
    return pdf.BinaryData;
}
' Thread-safe usage
Private Shared ReadOnly _renderer As New ChromePdfRenderer()

Public Function GeneratePdf(html As String) As Byte()
    Dim pdf = _renderer.RenderHtmlAsPdf(html)
    Return pdf.BinaryData
End Function
$vbLabelText   $csharpLabel

第 4 期:兩階錯誤處理

流暢:錯誤可能發生在模板階段或 PDF 生成階段。

解決方案:IronPDF只有一個錯誤來源:

try
{
    var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs("output.pdf");
}
catch (Exception ex)
{
    // Single point of failure—easier debugging
    Console.WriteLine($"PDF generation failed: {ex.Message}");
}
try
{
    var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs("output.pdf");
}
catch (Exception ex)
{
    // Single point of failure—easier debugging
    Console.WriteLine($"PDF generation failed: {ex.Message}");
}
Try
    Dim pdf = renderer.RenderHtmlAsPdf(html)
    pdf.SaveAs("output.pdf")
Catch ex As Exception
    ' Single point of failure—easier debugging
    Console.WriteLine($"PDF generation failed: {ex.Message}")
End Try
$vbLabelText   $csharpLabel

流體遷移清單

遷移前的任務

審核您的程式碼庫,找出所有 Fluid 的用法:

# Find all Fluid references
grep -r "FluidParser\|FluidTemplate\|TemplateContext\|using Fluid" --include="*.cs" --include="*.csproj" .

# Find Liquid template files
find . -name "*.liquid" -o -name "*.html" | xargs grep -l "{{"
# Find all Fluid references
grep -r "FluidParser\|FluidTemplate\|TemplateContext\|using Fluid" --include="*.cs" --include="*.csproj" .

# Find Liquid template files
find . -name "*.liquid" -o -name "*.html" | xargs grep -l "{{"
SHELL

記錄所有範本:檔案位置、使用的變數、循環和條件,以及外部 PDF 函式庫組態。

程式碼更新任務

1.移除 Fluid.Core NuGet 套件 2.移除外部 PDF 函式庫套件 3.安裝IronPDFNuGet 套件

  1. 將命名空間導入從 Fluid 更新為 IronPdf
  2. {{ variable }} 轉換為 $"{variable}"
  3. {% for item in collection %} 轉換為 C# foreach
  4. {% if condition %} 轉換為 C# if 語句 8.將 Liquid 過濾器轉換為 C# 方法 (例如: .| upcase.ToUpper())
  5. FluidParser 替換為 ChromePdfRenderer
  6. TemplateContext.SetValue() 替換為直接的 C# 變數 11.移除外部 PDF 函式庫呼叫 12.在啟動時增加IronPDF授權初始化功能

後遷移測試

轉移後,驗證這些方面:

  • 驗證 PDF 輸出符合預期
  • 測試所有範本變化是否能正確呈現
  • 檢查圖片和樣式顯示是否正確
  • 驗證分頁符是否正確
  • 使用各種資料大小進行測試
  • 效能測試 vs Fluid + 外部函式庫
  • 測試並發情況下的線程安全性

清理任務

  • 刪除 .liquid 範本檔案(如果不再需要)
  • 移除與 Fluid 相關的輔助程式碼
  • 更新文件
  • 清理未使用的相依性

遷移到IronPDF的主要優點。

從使用外部 PDF 函式庫的 Fluid (templating) 轉換到IronPDF提供了幾個關鍵的優勢:

單包解決方案:消除對兩個庫的依賴。IronPDF可在一個套件中處理模板(透過 HTML/CSS)和 PDF 的產生。

無需學習新語法:使用標準的 C# 字串插值和控制流,而不是學習 Liquid 模板語法。

線程安全渲染: ChromePdfRenderer 是線程安全的,與 TemplateContext 不同,簡化了並發 PDF 生成。

Chromium 渲染引擎:業界標準渲染確保完全支援 CSS3,包括 Flexbox 和 Grid,以及完整的 JavaScript 執行。

單一錯誤來源:只需對一個函式庫進行故障排除,而無需在範本和 PDF 產生階段之間進行協調,從而簡化了偵錯過程。

積極開發:隨著 .NET 10 和 C# 14 的普及,IronPDF 將持續更新,確保與目前和未來的 .NET 版本相容。

Curtis Chau
技術作家

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

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

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我