如何用 C# 从 PDFmyURL 迁移到 IronPDF
从PDFmyURL迁移到 IronPDF:完整的 C# 开发人员指南。
PDFmyURL 是一项基于云的 API 服务,旨在将 URL 和 HTML 内容转换为 PDF 文档。 该服务在外部服务器上处理所有转换,提供了一个直接的集成路径,只需最少的本地基础设施。 然而,对于处理敏感数据、需要离线功能或需要避免持续订阅成本的生产应用程序来说,这种依赖云的架构会带来很大的问题。
本指南提供了从PDFmyURL到IronPDF的完整迁移路径,为评估这一过渡的 .NET 专业开发人员提供了分步说明、代码比较和实用示例。
为什么要从PDFmyURL迁移
PDFmyURL 的云处理模式带来了开发团队必须考虑的几个挑战:
隐私和数据安全:您转换的每份文档都会在PDFmyURL的服务器上传输,敏感的合同、财务报告和个人数据都会在外部处理。
持续订阅成本:起价为 39 美元/月,年费超过 468 美元/年,且无所有权。这种订阅模式意味着无论使用模式如何,都将持续支出。
互联网依赖性:每次转换都需要网络连接。 应用程序不能离线或在网络中断时处理 PDF。
速率限制和节流:在使用高峰期,API 调用可能会被节流,从而对应用程序性能造成潜在影响。
服务可用性:您的应用程序依赖于第三方服务的在线和功能性。
供应商锁定:API 的更改可能会在未通知的情况下破坏您的集成,因此需要进行反应式代码更新。
IronPDF与 PDFmyURL:功能比较
了解架构差异有助于技术决策者评估迁移投资:
| 方面 | PDFmyURL | IronPDF |
|---|---|---|
| 处理地点 | 外部服务器 | 本地(您的服务器) |
| 类型 | 应用程序接口封装 | .NET 库 |
| 身份验证 | 每次请求的 API 密钥 | 一次性许可证密钥 |
| 网络要求 | 每次转换 | 仅初始设置 |
| 定价模式 | 按月订购(39 美元以上) | 提供永久许可证 |
| 费用限制 | 是(取决于计划) | 无 |
| 数据隐私 | 外部发送的数据 | 数据保持本地化 |
| HTML/CSS/JS 支持 | 符合 W3C 标准 | 完整的 Chromium 引擎 |
| 同步模式 | 要求(仅限异步) | 同步和异步选项 |
| PDF 操作 | 有限的 | 全套(合并、拆分、编辑) |
| 使用案例 | 少量应用 | 大批量和企业 |
快速入门:PDFmyURL 到IronPDF的迁移。
迁移工作可以通过以下基本步骤立即开始。
步骤 1:替换 NuGet 软件包
删除PDFmyURL软件包:
# RemovePDFmyURLpackages
dotnet remove package PdfMyUrl
dotnet remove package Pdfcrowd# RemovePDFmyURLpackages
dotnet remove package PdfMyUrl
dotnet remove package Pdfcrowd安装 IronPDF:
# Install IronPDF
dotnet add package IronPdf# Install IronPDF
dotnet add package IronPdf步骤 2:更新命名空间
用 IronPdf 替换PDFmyURL命名空间:
// Before: PDFmyURL
using PdfMyUrl;
using Pdfcrowd;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;// Before: PDFmyURL
using PdfMyUrl;
using Pdfcrowd;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;IRON VB CONVERTER ERROR developers@ironsoftware.com步骤 3:初始化许可证
在应用程序启动时添加许可证初始化:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"代码迁移示例
将 URL 转换为 PDF
URL-to-PDF 操作演示了PDFmyURL和IronPDF之间基本的 API 差异。
PDFmyURL 方法:
// InstallPDFmyURLSDK
using System;
using Pdfcrowd;
class Example
{
static void Main()
{
try
{
var client = new HtmlToPdfClient("username", "apikey");
client.convertUrlToFile("https://example.com", "output.pdf");
}
catch(Error why)
{
Console.WriteLine("Error: " + why);
}
}
}// InstallPDFmyURLSDK
using System;
using Pdfcrowd;
class Example
{
static void Main()
{
try
{
var client = new HtmlToPdfClient("username", "apikey");
client.convertUrlToFile("https://example.com", "output.pdf");
}
catch(Error why)
{
Console.WriteLine("Error: " + why);
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPdf 方法:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Example
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Example
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comPDFmyURL 要求为每个转换请求创建一个带有用户名和 API 密钥凭证的<代码>HtmlToPdfClient</代码,然后调用带有 URL 和输出路径的 convertUrlToFile() 。 整个操作必须用PDFmyURL的自定义 Error 类型的 try-catch 封装。
IronPDF 将此简化为三行:创建 ChromePdfRenderer, 调用 RenderUrlAsPdf(), 并使用内置的 SaveAs() 方法。 无需每次请求的证书--许可证在应用程序启动时设置一次。
有关高级 URL-to-PDF 场景,请参阅 URL to PDF 文档。
将HTML字符串转换为PDF
HTML 字符串转换清楚地显示了模式差异。
PDFmyURL 方法:
// InstallPDFmyURLSDK
using System;
using Pdfcrowd;
class Example
{
static void Main()
{
try
{
var client = new HtmlToPdfClient("username", "apikey");
string html = "<html><body><h1>Hello World</h1></body></html>";
client.convertStringToFile(html, "output.pdf");
}
catch(Error why)
{
Console.WriteLine("Error: " + why);
}
}
}// InstallPDFmyURLSDK
using System;
using Pdfcrowd;
class Example
{
static void Main()
{
try
{
var client = new HtmlToPdfClient("username", "apikey");
string html = "<html><body><h1>Hello World</h1></body></html>";
client.convertStringToFile(html, "output.pdf");
}
catch(Error why)
{
Console.WriteLine("Error: " + why);
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPdf 方法:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Example
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string 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 Example
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comPDFmyURL 使用 convertStringToFile() 将 HTML 内容发送到外部服务器进行处理。IronPDF的 RenderHtmlAsPdf() 使用 Chromium 渲染引擎在本地处理所有内容。
探索 HTML 至 PDF 转换指南,了解更多选项。
带页面设置的 HTML 文件转换
配置纸张大小、方向和页边距需要在每个库中采用不同的方法。
PDFmyURL 方法:
// InstallPDFmyURLSDK
using System;
using Pdfcrowd;
class Example
{
static void Main()
{
try
{
var client = new HtmlToPdfClient("username", "apikey");
client.setPageSize("A4");
client.setOrientation("landscape");
client.setMarginTop("10mm");
client.convertFileToFile("input.html", "output.pdf");
}
catch(Error why)
{
Console.WriteLine("Error: " + why);
}
}
}// InstallPDFmyURLSDK
using System;
using Pdfcrowd;
class Example
{
static void Main()
{
try
{
var client = new HtmlToPdfClient("username", "apikey");
client.setPageSize("A4");
client.setOrientation("landscape");
client.setMarginTop("10mm");
client.convertFileToFile("input.html", "output.pdf");
}
catch(Error why)
{
Console.WriteLine("Error: " + why);
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronPdf 方法:
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Example
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 10;
var pdf = renderer.RenderHtmlFileAsPdf("input.html");
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Example
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 10;
var pdf = renderer.RenderHtmlFileAsPdf("input.html");
pdf.SaveAs("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comPDFmyURL 使用带有字符串参数的设置器方法,如<代码>setPageSize("A4")</代码和<代码>setMarginTop("10mm")</代码。IronPDF通过 RenderingOptions 提供强类型属性,如 PdfPaperSize.A4 枚举和以毫米为单位的页边距整数值。
PDFmyURLAPI 到IronPDF映射参考
这种映射通过显示直接的 API 对应关系来加速迁移:
核心类
| PDFmyURL | IronPDF | 备注 |
|---|---|---|
| <代码>HtmlToPdfClient</代码 | <代码>ChromePdfRenderer</代码 | 主要转换类 |
| <代码>PdfMyUrlClient</代码 | <代码>ChromePdfRenderer</代码 | 替代客户端类 |
| API 响应对象 | <代码>PDF 文档</代码 | 结果 PDF 对象 |
方法
| PDFmyURL | IronPDF | 备注 |
|---|---|---|
| <代码>client.convertUrlToFile(url, file)</ 代码 | <代码>renderer.RenderUrlAsPdf(url).SaveAs(file)</代码 | URL 至 PDF |
| <代码>client.convertStringToFile(html, file)</ 代码 | <代码>renderer.RenderHtmlAsPdf(html).SaveAs(file)</代码 | HTML 字符串到 PDF |
| <代码>client.convertFileToFile(输入,输出)</代码 | <代码>renderer.RenderHtmlFileAsPdf(input).SaveAs(output)</代码 | 文件到文件 |
| <代码>response.GetBytes()</代码 | <代码>pdf.BinaryData</代码 | 获取原始字节 |
| <代码>response.GetStream()</代码 | <代码>pdf.Stream</代码 | 以流形式获取 |
配置选项
| PDFmyURL (setXxx 方法) | IronPdf (渲染选项) | 备注 |
|---|---|---|
| <代码>setPageSize("A4")</代码 | <代码>.PaperSize = PdfPaperSize.A4</ 代码 | 纸张大小 |
| <代码>setPageSize("Letter")</代码 | <代码>.PaperSize = PdfPaperSize.Letter</ 代码 | 美国信函 |
| <代码>setOrientation("横向")</代码 | <代码>.PaperOrientation = PdfPaperOrientation.Landscape</ 代码 | 定位 |
| <代码>setOrientation("portrait")</代码 | <代码>.PaperOrientation = PdfPaperOrientation.Portrait</ 代码 | 肖像 |
| <代码>setMarginTop("10mm")</代码 | <代码>.MarginTop = 10</ 代码 | 顶边距(毫米) |
| <代码>setMarginBottom("10mm")</代码 | <代码>.MarginBottom = 10</ 代码 | 底边距(毫米) |
| <代码>setMarginLeft("10mm")</代码 | <代码>.MarginLeft = 10</ 代码 | 左页边距(毫米) |
| <代码>setMarginRight("10mm")</代码 | <代码>.MarginRight = 10</ 代码 | 右边距(毫米) |
| <代码>setHeaderHtml(html)</代码 | .HtmlHeader = new HtmlHeaderFooter { HtmlFragment = html }. | 页眉 |
| <代码>setFooterHtml(html)</代码 | .HtmlFooter = new HtmlHeaderFooter { HtmlFragment = html }. | 页脚 |
| <代码>setJavascriptDelay(500)</代码 | .RenderDelay = 500. | JS 等待时间(毫秒) |
| <代码>setDisableJavascript(true)</代码 | .EnableJavaScript = false. | 禁用 JS |
| <代码>setUsePrintMedia(true)</代码 | .CssMediaType = PdfCssMediaType.Print. | 打印 CSS |
身份验证比较
| PDFmyURL | IronPDF |
|---|---|
| <代码>new HtmlToPdfClient("username", "apikey")</代码 | <代码>IronPDF.License.LicenseKey = "LICENSE-KEY"</ 代码 |
| 每次请求的 API 密钥 | 启动时一次性 |
| 每次通话都需要 | 全球设置一次 |
常见迁移问题和解决方案
问题 1:API 密钥与许可证密钥
PDFmyURL:每次转换请求都需要证书。
解决方案:在应用程序启动时设置一次IronPDF许可证:
// PDFmyURL: API key per request
var client = new HtmlToPdfClient("username", "apikey");
// IronPDF: One-time license at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Set once, typically in Program.cs or Startup.cs// PDFmyURL: API key per request
var client = new HtmlToPdfClient("username", "apikey");
// IronPDF: One-time license at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Set once, typically in Program.cs or Startup.csIRON VB CONVERTER ERROR developers@ironsoftware.com问题 2:页眉/页脚中的占位符语法
PDFmyURL: 使用 {page_number} 和 {total_pages} 占位符。
解决方案:更新为IronPDF的占位符格式:
// PDFmyURL: "Page {page_number} of {total_pages}"
// IronPDF: "Page {page} of {total-pages}"// PDFmyURL: "Page {page_number} of {total_pages}"
// IronPDF: "Page {page} of {total-pages}"IRON VB CONVERTER ERROR developers@ironsoftware.com第 3 期:异步模式
PDFmyURL:需要异步/等待模式。
解决方案:IronPDF默认为同步; 如有需要,请对 async 进行包装:
// PDFmyURL: Native async
var response = await client.ConvertUrlAsync(url);
// IronPDF: Sync by default, wrap for async
var pdf = await Task.Run(() => renderer.RenderUrlAsPdf(url));// PDFmyURL: Native async
var response = await client.ConvertUrlAsync(url);
// IronPDF: Sync by default, wrap for async
var pdf = await Task.Run(() => renderer.RenderUrlAsPdf(url));IRON VB CONVERTER ERROR developers@ironsoftware.com问题 4:错误处理
PDFmyURL:使用自定义 Pdfcrowd.Error 异常类型。
解决方案:更新IronPDF异常的捕获块:
// PDFmyURL: Pdfcrowd.Error
catch (Pdfcrowd.Error e) { ... }
// IronPDF: Standard exceptions
catch (IronPdf.Exceptions.IronPdfRenderingException e) { ... }// PDFmyURL: Pdfcrowd.Error
catch (Pdfcrowd.Error e) { ... }
// IronPDF: Standard exceptions
catch (IronPdf.Exceptions.IronPdfRenderingException e) { ... }IRON VB CONVERTER ERROR developers@ironsoftware.com第 5 期:配置模式
PDFmyURL:使用带有字符串值的设置器方法。
解决方案:使用强类型的 RenderingOptions 属性:
// PDFmyURL: Setter methods
client.setPageSize("A4");
client.setOrientation("landscape");
// IronPDF: Properties with enums
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;// PDFmyURL: Setter methods
client.setPageSize("A4");
client.setOrientation("landscape");
// IronPDF: Properties with enums
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;IRON VB CONVERTER ERROR developers@ironsoftware.comPDFmyURL迁移清单
迁移前任务
审核您的代码库,以确定PDFmyURL的所有使用情况:
# FindPDFmyURLusage
grep -r "PdfMyUrl\|Pdfcrowd\|HtmlToPdfClient" --include="*.cs" .
# Find API key references
grep -r "apikey\|api-key\|api_key" --include="*.cs" --include="*.json" --include="*.config" .
# Find placeholder patterns to migrate
grep -r "{page_number}\|{total_pages}" --include="*.cs" .# FindPDFmyURLusage
grep -r "PdfMyUrl\|Pdfcrowd\|HtmlToPdfClient" --include="*.cs" .
# Find API key references
grep -r "apikey\|api-key\|api_key" --include="*.cs" --include="*.json" --include="*.config" .
# Find placeholder patterns to migrate
grep -r "{page_number}\|{total_pages}" --include="*.cs" .记录当前使用的配置选项。 使用环境变量规划许可证密钥存储。
代码更新任务
1.删除 PDFmyURL/Pdfcrowd NuGet 软件包 2.安装 IronPdf NuGet 软件包 3.更新所有命名空间导入 4.用 IronPdf 许可证密钥替代 API 密钥验证 5.将设置器方法转换为 RenderingOptions 属性 6.更新页眉/页脚中的占位符语法({page_number} → {page}, {total_pages} → {total-pages}) 7.更新 IronPdf 异常类型的错误处理代码 8.在启动时添加 IronPdf 许可证初始化功能
迁移后测试
迁移后,验证这些方面:
- 测试 PDF 输出质量是否符合预期
- 验证异步模式是否正常工作
- 将渲染保真度与以前的输出进行比较
- 测试所有模板变体是否能正确呈现
- 验证页面设置(大小、方向、页边距)
- 如果部署到 Linux 服务器,请安装 Linux 依赖项
迁移到IronPDF的主要优势
从PDFmyURL迁移到IronPDF有几个关键优势:
完全隐私:文档永远不会离开您的服务器。 所有处理都在本地进行,消除了敏感内容的数据安全顾虑。
一次性成本:永久许可选项免除了经常性订阅费用。 无论使用量多少,都不再需要每月付款。
离线功能:初始设置后无需网络即可使用。网络中断不会影响 PDF 生成。
无速率限制:处理不受限制的文档,无节流问题。
更低的延迟:没有网络开销意味着更快的转换速度,尤其是对于大容量应用程序而言。
完全控制:您可以控制处理环境,而不是第三方服务。
现代 Chromium 引擎:采用与 Chrome 浏览器相同的渲染引擎,全面支持 CSS3 和 JavaScript。
主动开发:随着 .NET 10 和 C# 14 在 2026 年之前的采用率不断提高,IronPDF 的定期更新可确保与当前和未来的 .NET 版本兼容。
结论
PDFmyURL 为少量 PDF 生成需求提供了直接的基于云的解决方案。 然而,外部处理模式会产生隐私问题、持续成本和依赖风险,这是许多生产应用程序无法接受的。
IronPdf 提供本地处理功能,可将敏感数据保存在服务器上,通过永久许可免除订阅费用,并提供基于 Chromium 的现代渲染引擎。迁移路径简单明了:替换 NuGet 软件包,将设置器方法更新为强类型属性,并调整占位符语法。
立即开始迁移,免费试用 IronPDF,体验本地 PDF 处理的优势。
有关全面的实施指导,请浏览 IronPDF 文档和 教程。






