比较
PDFmyURL 与 IronPDF:技术比较指南
已发布:
当 .NET 开发人员需要将 URL 和 HTML 内容转换为 PDF 时,他们面临着一个关键的架构决策:使用像PDFmyURL这样的基于云的 API 服务,还是选择像IronPDF这样的本地处理库。 本文将从技术差异、隐私考虑以及对各种应用需求的适用性等方面对两种方案进行比较。
什么是 PDFmyURL? PDFmyURL 是一项基于云的 API 服务,旨在将 URL 转换为 PDF。 该服务在外部服务器上处理数据,使开发人员无需在本地计算机上投入大量处理能力。PDFmyURL在 .NET 应用程序中使用 Pdfcrowd SDK,提供`HtmlToPdfClient`类,该类与远程服务器通信以完成每个转换任务。 该服务以易用性为优先考量,并符合 W3C 标准,以实现一致的渲染效果。 但是,PDFmyURL 是一个 API 封装器而不是一个独立的库,因此它需要持续的互联网连接,并将所有文档发送到外部服务器进行处理。 PDFmyURL 的主要功能包括: -**基于云的处理:**所有转换都在PDFmyURL的外部服务器上进行。 **订阅价格:**每月 39 美元起,另有持续费用。 -**对互联网的依赖:**每次转换都需要网络连接。 - **API密钥认证:**每次请求都需要用户名和API密钥。 -**速率限制:** API 调用可以根据订阅计划进行限制。什么是 IronPDF? [IronPDF](https://ironpdf.com/)是一个完整的 .NET 库,可在您的应用程序环境中本地处理 PDF 文件。 [ChromePdfRenderer](https://ironpdf.com/object-reference/api/IronPdf.ChromePdfRenderer.html) 类使用基于 Chromium 的现代引擎进行 HTML 到IronPDF的转换,提供完整的 CSS3 和 JavaScript 支持,无需将数据发送到外部服务器。 与PDFmyURL基于云的方法不同,IronPDF 在您的基础架构内处理一切。 这种设置消除了与外部处理相关的隐私问题,同时提供了除基本转换之外的功能,包括 PDF 操作、文本提取、水印和安全功能。 ## 架构比较 PDFmyURL 和IronPDF的主要区别在于处理发生的位置:外部服务器处理与本地处理。 |方面|PDFmyURL|IronPDF| |--------|----------|---------| |**类型**|应用程序接口封装|.NET 库| |**处理地点**|外部服务器|本地(您的服务器)| |**依赖性**|需要连接互联网|本地处理| |**身份验证**|每次请求的 API 密钥|一次性许可证密钥| |**成本**|39+ 美元/月订阅|提供永久许可证| |**隐私**|外部发送的数据|数据保持本地化| |**费用限制**|是(取决于计划)| 无 | |**平台支持**|基于网络|跨平台| |**使用案例**|少量应用|大批量和企业| 对于处理敏感文档(合同、财务报告、个人数据)的应用程序来说,处理位置会对隐私和合规性产生重大影响。PDFmyURL通过外部服务器传输所有文档,而IronPDF则将所有文档保存在您可控的环境中。 ## 将 URL 转换为 PDF. 将网页转换为 PDF 可以突出这些解决方案之间的 API 模式差异。 **PDFmyURL URL 转 PDF 方法:** ```csharp // 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); } } } ``` **IronPDF URL 转 PDF 方法:** ```csharp // 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"); } } ``` PDFmyURL 的每次转换操作都需要 API 凭据,这就造成了对外部服务的依赖。`HtmlToPdfClient` 构造函数需要用户名和 API 密钥,转换方法包括针对 API 特定错误的 try-catch 处理。 IronPDF 的 `ChromePdfRenderer` 在初始设置后可独立运行。`RenderUrlAsPdf()` 方法使用其内置的 Chromium 引擎在本地处理 URL,并返回一个 `PdfDocument` 对象,该对象可以保存或进一步操作。 了解有关 [URL 至 PDF 转换](https://ironpdf.com/how-to/url-to-pdf/)的更多信息,请参阅IronPDF文档。 ## HTML 字符串到 PDF 的转换 将 HTML 内容直接转换为 PDF 显示出类似的架构差异。 **PDFmyURL HTML 字符串转换:** ```csharp // InstallPDFmyURLSDK using System; using Pdfcrowd; class Example { static void Main() { try { var client = new HtmlToPdfClient("username", "apikey"); string html = "Hello World
"; client.convertStringToFile(html, "output.pdf"); } catch(Error why) { Console.WriteLine("Error: " + why); } } } ``` **IronPDF HTML 字符串转换:** ```csharp // NuGet: Install-Package IronPdf using IronPdf; using System; class Example { static void Main() { var renderer = new ChromePdfRenderer(); string html = "Hello World
"; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); } } ``` 使用 PDFmyURL,HTML 内容可通过 `convertStringToFile()` 传输到外部服务器。 这意味着您的 HTML 模板、动态内容和任何嵌入式数据都要通过第三方基础设施。 IronPDF 的`RenderHtmlAsPdf()`可在本地处理 HTML,从而将内容保留在应用程序边界内。 有关 HTML 到IronPDF转换模式的详细指导,请参阅 [HTML 到 PDF 教程](https://ironpdf.com/how-to/html-file-to-pdf/)。 ## 带设置的 HTML 文件转换 配置页面设置可显示两种解决方案之间不同的 API 设计模式。 **带设置的PDFmyURL文件转换:** ```csharp // 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); } } } ``` **IronPDF 文件转换与设置:** ```csharp // 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"); } } ``` PDFmyURL 使用带有字符串参数的设置器方法(`setPageSize("A4")`, `setOrientation("landscape")`)。 这种方法要求了解 API 期望的确切字符串值。 IronPDF 通过 `RenderingOptions` 对象使用强类型属性。 `PdfPaperSize.A4` 和 `PdfPaperOrientation.Landscape` 是提供 IntelliSense 支持和编译时验证的枚举值。 边距值为数值(单位为毫米),而不是带有单位后缀的字符串。 ## API 映射参考 对于评估将PDFmyURL移植到IronPDF的团队来说,了解 API 映射有助于估算开发工作量。 ### 核心方法 |PDFmyURL (Pdfcrowd)|IronPDF| |---------------------|---------| |<代码>new HtmlToPdfClient("用户", "键")代码>new ChromePdfRenderer()client.convertUrlToFile(url, file)renderer.RenderUrlAsPdf(url).SaveAs(file)client.convertStringToFile(html, file)renderer.RenderHtmlAsPdf(html).SaveAs(file)client.convertFileToFile(输入,输出)renderer.RenderHtmlFileAsPdf(input).SaveAs(output)response.GetBytes()pdf.BinaryDatasetPageSize("A4")RenderingOptions.PaperSize = PdfPaperSize.A4setOrientation("横向")RenderingOptions.PaperOrientation = PdfPaperOrientation.LandscapesetMarginTop("10mm")RenderingOptions.MarginTop = 10setMarginBottom("10mm")RenderingOptions.MarginBottom = 10setMarginLeft("10mm")RenderingOptions.MarginLeft = 10setMarginRight("10mm")RenderingOptions.MarginRight = 10setHeaderHtml(html)setFooterHtml(html)setJavascriptDelay(500)RenderingOptions.RenderDelay = 500setUsePrintMedia(true)setUserPassword("pass")pdf.SecuritySettings.UserPassword = "pass"PdfDocument.Merge()pdf.ExtractAllText()pdf.ApplyWatermark()pdf.SecuritySettingspdf.Formpdf.Sign()Page {page_number} of {total_pages}
Hello World
"; client.convertStringToFile(html, "output.pdf"); } catch(Error why) { Console.WriteLine("Error: " + why); } } } ``` **IronPDF HTML 字符串转换:** ```csharp // NuGet: Install-Package IronPdf using IronPdf; using System; class Example { static void Main() { var renderer = new ChromePdfRenderer(); string html = "Hello World
"; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); } } ``` 使用 PDFmyURL,HTML 内容可通过 `convertStringToFile()` 传输到外部服务器。 这意味着您的 HTML 模板、动态内容和任何嵌入式数据都要通过第三方基础设施。 IronPDF 的`RenderHtmlAsPdf()`可在本地处理 HTML,从而将内容保留在应用程序边界内。 有关 HTML 到IronPDF转换模式的详细指导,请参阅 [HTML 到 PDF 教程](https://ironpdf.com/how-to/html-file-to-pdf/)。 ## 带设置的 HTML 文件转换 配置页面设置可显示两种解决方案之间不同的 API 设计模式。 **带设置的PDFmyURL文件转换:** ```csharp // 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); } } } ``` **IronPDF 文件转换与设置:** ```csharp // 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"); } } ``` PDFmyURL 使用带有字符串参数的设置器方法(`setPageSize("A4")`, `setOrientation("landscape")`)。 这种方法要求了解 API 期望的确切字符串值。 IronPDF 通过 `RenderingOptions` 对象使用强类型属性。 `PdfPaperSize.A4` 和 `PdfPaperOrientation.Landscape` 是提供 IntelliSense 支持和编译时验证的枚举值。 边距值为数值(单位为毫米),而不是带有单位后缀的字符串。 ## API 映射参考 对于评估将PDFmyURL移植到IronPDF的团队来说,了解 API 映射有助于估算开发工作量。 ### 核心方法 |PDFmyURL (Pdfcrowd)|IronPDF| |---------------------|---------| |<代码>new HtmlToPdfClient("用户", "键")代码>new ChromePdfRenderer()client.convertUrlToFile(url, file)renderer.RenderUrlAsPdf(url).SaveAs(file)client.convertStringToFile(html, file)renderer.RenderHtmlAsPdf(html).SaveAs(file)client.convertFileToFile(输入,输出)renderer.RenderHtmlFileAsPdf(input).SaveAs(output)response.GetBytes()pdf.BinaryDatasetPageSize("A4")RenderingOptions.PaperSize = PdfPaperSize.A4setOrientation("横向")RenderingOptions.PaperOrientation = PdfPaperOrientation.LandscapesetMarginTop("10mm")RenderingOptions.MarginTop = 10setMarginBottom("10mm")RenderingOptions.MarginBottom = 10setMarginLeft("10mm")RenderingOptions.MarginLeft = 10setMarginRight("10mm")RenderingOptions.MarginRight = 10setHeaderHtml(html)setFooterHtml(html)setJavascriptDelay(500)RenderingOptions.RenderDelay = 500setUsePrintMedia(true)setUserPassword("pass")pdf.SecuritySettings.UserPassword = "pass"PdfDocument.Merge()pdf.ExtractAllText()pdf.ApplyWatermark()pdf.SecuritySettingspdf.Formpdf.Sign()Page {page_number} of {total_pages}Page {page} of {total-pages}
" }; ``` PDFmyURL 使用 `{page_number}` 和 `{total_pages}` ,而IronPDF使用 `{page}` 和 `{total-pages}` 。 在任何PDFmyURL迁移工作中,都需要注意语法差异。 有关页眉和页脚的全面实现,请参阅 [ 页眉和页脚文档](https://ironpdf.com/how-to/headers-and-footers/)。 ## Async 模式的差异 两种解决方案处理异步操作的方式不同。 **PDFmyURL async:** ```csharp // PDFmyURL: Native async var response = await client.ConvertUrlAsync(url); ``` **IronPDF async:** ```csharp // IronPDF: Sync by default, wrap for async var pdf = await Task.Run(() => renderer.RenderUrlAsPdf(url)); ``` PDFmyURL 提供本地异步方法,反映了其依赖于网络的架构。 IronPdf 的操作默认为同步操作,但也可封装在 `Task.Run()` 中,用于异步上下文。 ## 错误处理 不同解决方案的异常类型和错误处理模式各不相同。 **PDFmyURL 错误处理:** ```csharp try { client.convertUrlToFile(url, file); } catch (Pdfcrowd.Error e) { Console.WriteLine("Error: " + e); } ``` **IronPDF 错误处理:** ```csharp try { var pdf = renderer.RenderUrlAsPdf(url); pdf.SaveAs(file); } catch (IronPdf.Exceptions.IronPdfRenderingException e) { Console.WriteLine("Error: " + e); } ``` 如果出现与 API 相关的问题(网络故障、身份验证问题、速率限制),PDFmyURL 将抛出 `Pdfcrowd.Error` 事件。IronPDF使用标准的 .NET 异常模式,具有特定的异常类型,如 `IronPdfRenderingException` 。 ## 团队何时考虑从PDFmyURL迁移到 IronPDF? 有几个因素促使团队将 IronPdf 作为PDFmyURL的替代品进行评估: **隐私和合规要求:**处理敏感数据的组织通常不能将文档发送到外部服务器。IronPDF的本地处理直接满足了这一要求。 **成本可预测性:**PDFmyURL的订阅模式会产生持续的费用,这些费用会在项目生命周期内累积。IronPDF的永久许可证选项提供固定成本,无需考虑基于数量的扩展问题。 **离线功能:**部署在受限网络环境或需要离线功能的应用程序不能依赖基于云的 API。IronPDF 在初始设置完成后,无需互联网连接即可运行。 **扩展的 PDF 功能:**PDFmyURL专注于转换,而IronPDF则在一个库中提供额外的功能——合并、拆分、文本提取、水印、表单填写和数字签名。 **速率限制解除:**高流量应用程序在高峰使用期间可能会遇到PDFmyURL限速。IronPDF可处理无限量文档,不受外部限制。 **服务依赖消除:**云 API 的可用性会影响应用程序的可靠性。 本地处理消除了对第三方服务正常运行时间的依赖。 ## 安装比较 **PDFmyURL安装:** ```bash # Install Pdfcrowd SDK Install-Package Pdfcrowd ``` Plus API 账户设置,包括用户名和 API 密钥。 **安装 IronPdf:** ```bash Install-Package IronPdf ``` IronPdf 需要配置许可证密钥: ```csharp IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; ``` 两种解决方案都通过 NuGet 进行集成。 IronPdf 的首次运行会下载 Chromium 渲染引擎(约 150MB),之后可实现离线操作。 该库支持 .NET Framework、.NET Core、.NET 5+,并向前兼容到 .NET 10 和 C# 14。 ## 做出决定 在PDFmyURL和IronPDF之间做出选择反映了不同的应用需求和组织优先级: **如果您符合以下条件,请考虑使用 PDFmyURL:**您需要快速集成到小批量应用程序中,对文档处理没有隐私限制,更倾向于操作简便而不是基础设施控制,并且能够接受持续的订阅费用。 **如果您有以下需求,请考虑使用 IronPDF:**处理需要本地处理的敏感文档、需要可预测的成本而无需订阅费、需要离线功能或在受限网络中运行、希望除了转换之外还拥有扩展的 PDF 功能,或者处理大量文档而不用担心速率限制。 对于大多数生产应用,特别是那些处理商业文档、客户数据或按照合规要求运行的应用,IronPDF 的本地处理架构在隐私性、成本可预测性和功能广泛性方面具有显著优势。 ## 开始使用 IronPDF 如需评估 IronPdf 是否满足您的 PDF 生成需求,请联系我们: 1.通过 NuGet 安装:<代码>安装-打包 IronPdf代码>入门文档