跳至页脚内容
迁移指南

如何用 C# 从 PDF Duo 迁移到 IronPDF

从 PDF Duo 迁移到 IronPDF:完整的 C# 迁移指南

从PDF Duo .NET迁移到IronPDF将您的 .NET PDF 工作流程从一个模糊、文档不全、维护状态不明确的库迁移到一个稳定、文档齐全、维护积极的解决方案。 本指南提供了一个全面、循序渐进的迁移路径,可消除与废弃库相关的风险,同时获得 PDF Duo 无法提供的高级功能。

为什么要从 PDF Duo 迁移到 IronPDF.

PDF 双风险问题

PDF Duo .NET 是 .NET 生态系统中一个难以捉摸、鲜为人知的库。 虽然它可能对追求简单的开发人员很有吸引力,但该库的模糊性给生产应用带来了巨大挑战:

1.来源不明:未知开发人员,无可验证的公司支持。 没有可见的 GitHub 仓库或源代码,NuGet 下载统计有限,许可条款不确定。

2.缺少文档:几乎不可能找到可靠的信息。 目前没有官方的 API 参考资料,社区示例稀少,也没有官方教程或指南。 由于缺乏可靠的文档,任何使用 PDF Duo 的尝试都会受到阻碍。

3.废弃或不活跃状态:零星更新或无更新,有明显被忽视的迹象。 支持论坛显示 2019 年以来的帖子,但没有回复。 对于重大项目来说,被弃用的现实风险影响了其可行性。

4.有限功能:只有基本功能--简单的 HTML 转 PDF 和基本的 PDF 合并,没有表单、安全或水印等高级功能。

5.未知渲染引擎:引擎盖下的内容不透明。 CSS/JavaScript 支持未知,渲染质量不可预测,现代网络功能支持也不确定。

6.支持风险:出现故障时无法求助。 没有专业支持,没有社区帮助,完全有被放弃的风险。

PDF Duo 与IronPDF对比

方面PDF Duo .NETIronPDF
维护未知/无活动积极、定期更新
文档稀疏/遗漏综合性
支持专业的支持团队
社区~0 用户41M+ NuGet 下载次数
渲染未知引擎现代 Chromium
译文特点基本的全功能
稳定性未知经过生产验证
许可不明确透明

对于计划在 2025 年和 2026 年之前采用 .NET 10 和 C# 14 的团队来说,IronPDF 提供了一个稳定的基础,拥有活跃的开发和全面的文档,消除了依赖废弃库的不确定性。


开始之前

前提条件

1..NET环境:.NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+ 2.NuGet 访问:安装 NuGet 软件包的能力 3.IronPDF 许可证:从 ironpdf.com 获取许可证密钥

NuGet 软件包变更

# RemovePDF Duo .NET(if you can find the correct package name)
dotnet remove package PDFDuo.NET
dotnet remove package PDFDuo
dotnet remove package PDF-Duo

# Install IronPDF
dotnet add package IronPdf
# RemovePDF Duo .NET(if you can find the correct package name)
dotnet remove package PDFDuo.NET
dotnet remove package PDFDuo
dotnet remove package PDF-Duo

# Install IronPDF
dotnet add package IronPdf
SHELL

许可配置

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

确定 PDF Duo 的用途

# Find all PDF Duo references
grep -r "PDFDuo\|HtmlToPdfConverter\|PdfMerger" --include="*.cs" .
# Find all PDF Duo references
grep -r "PDFDuo\|HtmlToPdfConverter\|PdfMerger" --include="*.cs" .
SHELL

完整的 API 参考

命名空间变更

PDF Duo .NETIronPDF
<代码>使用 PDFDuo;</代码<代码>使用 IronPdf;</ 代码
<代码>使用 PDFDuo.Document;</ 代码<代码>使用 IronPdf;</ 代码
<代码>使用 PDFDuo.Rendering;</ 代码<代码>使用 IronPdf.Rendering;</ 代码
<代码>使用 PDFDuo.Settings;</代码<代码>使用 IronPdf;</ 代码

HTML 到 PDF 转换映射

PDF Duo .NETIronPDF备注
<代码>new HtmlToPdfConverter()</ 代码<代码>new ChromePdfRenderer()</ 代码主呈现器
<代码>converter.ConvertHtmlString(html,路径)</代码<代码>renderer.RenderHtmlAsPdf(html).SaveAs(path)</代码HTML 字符串
<代码>converter.ConvertUrl(url, path)</ 代码<代码>renderer.RenderUrlAsPdf(url).SaveAs(path)</代码URL 转换
<代码>converter.ConvertFile(htmlPath, pdfPath)</ 代码<代码>renderer.RenderHtmlFileAsPdf(htmlPath).SaveAs(pdfPath)</代码HTML 文件

页面配置映射

PDF Duo .NETIronPDF备注
<代码>settings.PageSize = PageSize.A4</ 代码<代码>RenderingOptions.PaperSize = PdfPaperSize.A4</ 代码纸张大小
<代码>settings.PageSize = PageSize.Letter</ 代码<代码>RenderingOptions.PaperSize = PdfPaperSize.Letter</ 代码美国信函
<代码>settings.Orientation(设置)= Landscape(横向)</代码<代码>RenderingOptions.PaperOrientation = Landscape</代码定位
new Margins(top, right, bottom, left)(页边距)个别边距属性参见以下内容

边距映射

PDF Duo .NETIronPDF备注
new Margins(top, right, bottom, left)(页边距)个别属性无保证金对象
<代码>margins.Top</代码<代码>RenderingOptions.MarginTop</代码顶边距(毫米)
<代码>margins.Right</代码<代码>RenderingOptions.MarginRight</代码右边距(毫米)
<代码>margins.Bottom</代码<代码>RenderingOptions.MarginBottom</代码底边距(毫米)
<代码>margins.Left</代码<代码>RenderingOptions.MarginLeft</代码左页边距(毫米)

文档操作映射

PDF Duo .NETIronPDF备注
<代码>PDFDocument.Load(path)</代码<代码>PdfDocument.FromFile(路径)</代码加载 PDF
<代码>document.Save(路径)</代码<代码>pdf.SaveAs(路径)</代码保存 PDF
<代码>document.ToBytes()</代码<代码>pdf.BinaryData</代码获取字节数组
<代码>new PdfMerger()</ 代码<代码>PdfDocument.Merge()</代码静态方法
<代码>merger.AddFile(path)</代码<代码>PdfDocument.FromFile(路径)</代码加载然后合并
<代码>merger.Merge(output)</代码<代码>merged.SaveAs(输出)</代码合并后

PDF Duo 中不提供的新功能

特征IronPDF
页眉/页脚<代码>RenderingOptions.HtmlHeader</代码>, <代码>HtmlFooter</代码
页码{page}, {total-pages} 占位符
水印<代码>pdf.ApplyWatermark(html)</代码
密码保护<代码>pdf.SecuritySettings</代码
表格填写<代码>pdf.Form.Fields</代码
数字签名<代码>pdf.SignWithFile()</代码
文本提取<代码>pdf.ExtractAllText()</代码
将 PDF 转换为图像<代码>pdf.RasterizeToImageFiles()</代码

代码迁移示例

示例 1:HTML 到 PDF 的转换

之前(PDF Duo):

// NuGet: Install-Package PDFDuo.NET
using PDFDuo;
using System;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>";
        converter.ConvertHtmlString(htmlContent, "output.pdf");
        Console.WriteLine("PDF created successfully!");
    }
}
// NuGet: Install-Package PDFDuo.NET
using PDFDuo;
using System;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>";
        converter.ConvertHtmlString(htmlContent, "output.pdf");
        Console.WriteLine("PDF created successfully!");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

After (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>";
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully!");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var htmlContent = "<h1>Hello World</h1><p>This is a PDF document.</p>";
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully!");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

这里的根本区别在于 API 模式。 PDF Duo 的HtmlToPdfConverter.ConvertHtmlString()只需一次调用即可获取 HTML 和输出路径,同时处理转换和保存。IronPDF的 ChromePdfRenderer.RenderHtmlAsPdf() 首先返回一个 PdfDocument 对象,然后您可以使用 SaveAs() 保存该对象。

这种面向对象的方法具有显著的优势:您可以在保存之前对 PDF 进行操作(添加水印、合并文档、添加安全性、提取文本),而 PDF Duo 的直接到文件方法无法实现这些操作。 有关其他渲染选项,请参阅 HTML to PDF 文档

示例 2:URL 到 PDF 的转换

之前(PDF Duo):

// NuGet: Install-Package PDFDuo.NET
using PDFDuo;
using System;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        converter.ConvertUrl("https://www.example.com", "webpage.pdf");
        Console.WriteLine("Webpage converted to PDF!");
    }
}
// NuGet: Install-Package PDFDuo.NET
using PDFDuo;
using System;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        converter.ConvertUrl("https://www.example.com", "webpage.pdf");
        Console.WriteLine("Webpage converted to PDF!");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

After (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
        Console.WriteLine("Webpage converted to PDF!");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
        Console.WriteLine("Webpage converted to PDF!");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

PDF Duo 使用相同的 HtmlToPdfConverter 类与 ConvertUrl(url, outputPath) 进行 URL 转换。IronPDF使用 ChromePdfRenderer 和专用的 RenderUrlAsPdf(url) 方法,返回一个 PdfDocument 对象。

一个关键优势是IronPDF基于 Chromium 的渲染引擎提供了现代 CSS3 和 JavaScript 支持,而 PDF Duo 未知的渲染引擎使得 CSS/JavaScript 支持不确定,渲染质量不可预测。 了解有关 URL 至 PDF 转换的更多信息。

示例 3:PDF 合并

之前(PDF Duo):

// NuGet: Install-Package PDFDuo.NET
using PDFDuo;
using System;

class Program
{
    static void Main()
    {
        var merger = new PdfMerger();
        merger.AddFile("document1.pdf");
        merger.AddFile("document2.pdf");
        merger.Merge("merged.pdf");
        Console.WriteLine("PDFs merged successfully!");
    }
}
// NuGet: Install-Package PDFDuo.NET
using PDFDuo;
using System;

class Program
{
    static void Main()
    {
        var merger = new PdfMerger();
        merger.AddFile("document1.pdf");
        merger.AddFile("document2.pdf");
        merger.Merge("merged.pdf");
        Console.WriteLine("PDFs merged successfully!");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

After (IronPDF):

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

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
        Console.WriteLine("PDFs merged successfully!");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
        Console.WriteLine("PDFs merged successfully!");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

这个例子显示了一个基本的架构差异。 PDF Duo 使用一个专用的 PdfMerger 类,该类使用 AddFile() 方法对文件进行排队,然后使用 Merge() 一步完成合并和保存。

IronPDF 使用不同的模式:使用 PdfDocument.FromFile() 将每个 PDF 作为 PdfDocument 加载,然后使用静态<代码>PdfDocument.Merge()</代码方法将它们合并。 这会返回一个新的 PdfDocument 对象,您可以使用 SaveAs() 单独保存该对象。

IronPdf 方法提供了更大的灵活性--您可以在合并前对任何 PDF 进行操作,为合并后的结果添加水印,应用安全设置等。 要合并多个文件,可以使用 LINQ:

var paths = new[] { "document1.pdf", "document2.pdf", "document3.pdf" };
var pdfs = paths.Select(PdfDocument.FromFile).ToList();
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs("merged.pdf");
var paths = new[] { "document1.pdf", "document2.pdf", "document3.pdf" };
var pdfs = paths.Select(PdfDocument.FromFile).ToList();
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs("merged.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

了解有关 合并和拆分 PDF 的更多信息。


迁移后的新功能

迁移到IronPDF后,您将获得 PDF Duo 无法提供的功能:

带页码的页眉和页脚

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center; font-size:10px;'>Company Report</div>",
    MaxHeight = 25
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center; font-size:10px;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("report.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center; font-size:10px;'>Company Report</div>",
    MaxHeight = 25
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = "<div style='text-align:center; font-size:10px;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("report.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

PDF Duo 不支持页眉或页脚--没有相应的功能。IronPDF提供全面的 HTML/CSS 支持,并为页码等动态内容提供内置占位符。 请参见页眉和页脚指南

水印

using IronPdf;
using IronPdf.Editing;

var pdf = PdfDocument.FromFile("document.pdf");

pdf.ApplyWatermark(
    "<h1 style='color:red; opacity:0.3;'>CONFIDENTIAL</h1>",
    45,
    VerticalAlignment.Middle,
    HorizontalAlignment.Center);

pdf.SaveAs("watermarked.pdf");
using IronPdf;
using IronPdf.Editing;

var pdf = PdfDocument.FromFile("document.pdf");

pdf.ApplyWatermark(
    "<h1 style='color:red; opacity:0.3;'>CONFIDENTIAL</h1>",
    45,
    VerticalAlignment.Middle,
    HorizontalAlignment.Center);

pdf.SaveAs("watermarked.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

PDF Duo 不支持水印。IronPDF提供基于 HTML 的水印,并完全支持 CSS 样式。

密码保护

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("secured.pdf");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("secured.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

PDF Duo 不支持密码保护或安全设置。

文本提取

var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText();
var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText();
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

PDF Duo 不支持文本提取。


关键迁移说明

单个属性的边距对象

PDF Duo 使用单个 Margins 对象; IronPdf 使用个别属性:

// PDF Duo:
new Margins(top: 20, right: 15, bottom: 20, left: 15)

// IronPDF:
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginRight = 15;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 15;
// PDF Duo:
new Margins(top: 20, right: 15, bottom: 20, left: 15)

// IronPDF:
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginRight = 15;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 15;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

保存方法命名

不同的保存方法名称:

// PDF Duo:
document.Save("output.pdf");

// IronPDF:
pdf.SaveAs("output.pdf");
// PDF Duo:
document.Save("output.pdf");

// IronPDF:
pdf.SaveAs("output.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

加载 PDF 文件

不同的加载方法名称:

// PDF Duo:
PDFDocument.Load("document.pdf")

// IronPDF:
PdfDocument.FromFile("document.pdf")
// PDF Duo:
PDFDocument.Load("document.pdf")

// IronPDF:
PdfDocument.FromFile("document.pdf")
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

从设置对象到属性

PDF Duo 使用传递给构造函数的设置对象; IronPdf 使用属性:

// PDF Duo:
var settings = new PDFSettings { PageSize = PageSize.A4 };
var converter = new HtmlToPdfConverter(settings);

// IronPDF:
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
// PDF Duo:
var settings = new PDFSettings { PageSize = PageSize.A4 };
var converter = new HtmlToPdfConverter(settings);

// IronPDF:
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

功能对比

特征PDF Duo .NETIronPDF
HTML 至 PDF基本的完整的 CSS3、JavaScript
URL 至 PDF基本的完全支持授权
PDF 合并
页眉/页脚完全支持 HTML
页码内置占位符
水印基于 HTML
密码保护全面的安全选项
表格填写
数字签名
文本提取
将 PDF 转换为图像
异步支持未知完整的异步/等待
.NET Core/5+未知全面支持

迁移清单

迁移前

  • [ ] 在代码库中查找所有 PDF Duo 参考资料
  • [文档当前设置(页面大小、页边距等)
  • [ ] 列出使用的所有 PDF 操作
  • [ ] 确定新功能(页眉、水印、安全性)的机会
  • [ ] 获取 IronPdf 许可证密钥

软件包变更

  • [ ] 删除 PDFDuo.NET NuGet 软件包
  • [ ] 安装 IronPDF NuGet 软件包:<代码>dotnet 添加软件包 IronPdf
  • [ ] 将名称空间导入从<代码>使用 PDFDuo;</代码更新为 using IronPdf;

代码更改

  • [ ] 在启动时添加许可证密钥配置
  • [ ] 将 HtmlToPdfConverter 替换为 ChromePdfRenderer
  • [ ] 将 ConvertHtmlString(html, path) 替换为 RenderHtmlAsPdf(html).SaveAs(path)
  • [ ] 将 ConvertUrl(url, path) 替换为 RenderUrlAsPdf(url).SaveAs(path)
  • [ ] 将 PdfMerger 模式替换为<代码>PdfDocument.Merge()</代码模式
  • [ ] 将 Margins 对象转换为单个边距属性
  • [ ] 将 Save() 替换为 SaveAs()
  • [ ] 将 Load() 替换为 FromFile()

后迁移

  • [运行比较 PDF 输出的回归测试
  • [ ] 核实页面大小和页边距是否匹配
  • [ ] 使用复杂的 HTML/CSS 进行测试(IronPdf 的现代引擎应能更好地处理它)
  • [ ] 添加新功能(页眉、页脚、水印、安全性)
  • [ ] 更新文档

结论

从 PDF Duo 迁移到 IronPDF,可以消除依赖一个晦涩难懂、文档不全、维护状态不明确的库所带来的巨大风险。 迁移提供了一个稳定的、经过生产验证的基础,具有全面的文档、专业的支持和积极的开发。

本次迁移的主要变化有 1.稳定性:未知/废弃 → 正在开发中,下载次数超过 4100 万次 2.文档:稀少/遗漏 → 综合指南和 API 参考 3.渲染:未知引擎 → 基于 Chromium 的现代 4.:<代码>HtmlToPdfConverter</代码> → <代码>ChromePdfRenderer</代码 5.方法ConvertHtmlString()/ConvertUrl()RenderHtmlAsPdf()/RenderUrlAsPdf()。 6.合并PdfMerger 类 →<代码>PdfDocument.Merge()</代码静态方法 7.边距Margins 对象 → 单个 RenderingOptions 属性 8.新功能:页眉/页脚、水印、安全性、文本提取等

探索完整的IronPDF文档教程API参考,加速您的PDF Duo迁移。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。