比较

PDFmyURL 与 IronPDF:技术比较指南

PDFmyURLvs IronPDF:用于生成 PDF 的云 API 与本地 .NET 库对比。

当 .NET 开发人员需要将 URL 和 HTML 内容转换为 PDF 时,他们会遇到一个基本的架构选择:基于云的 API 服务(如 PDFmyURL)或本地处理库(如 IronPDF)。 本比较研究了这两种方法,分析了它们在技术上的差异、对隐私的影响以及对不同应用要求的适用性。

什么是 PDFmyURL? PDFmyURL 是一项基于云的 API 服务,旨在将 URL 转换为 PDF。 该服务可在外部服务器上进行处理,使开发人员无需在本地机器上使用强大的处理能力。PDFmyURL在 .NET 应用程序中使用了 Pdfcrowd SDK,提供了一个 `HtmlToPdfClient` 类,该类可在每次转换操作中与远程服务器进行通信。 该服务强调网络易用性,并符合 W3C 标准,以实现一致的渲染效果。 不过,作为一个 API 封装程序而非独立库,PDFmyURL 需要持续的互联网连接,并将所有文档发送到外部服务器进行处理。 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}
"); ``` **IronPDF占位符:** ```csharp renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter { HtmlFragment = "
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。 **如果**:您处理需要本地处理的敏感文档,需要可预测的成本而无需订阅费用,需要离线功能或在受限制的网络中运行,希望获得除转换之外的扩展 PDF 功能,或处理大量文档而无需考虑速率限制问题,请考虑 IronPDF。 对于大多数生产应用,特别是那些处理商业文档、客户数据或按照合规要求运行的应用,IronPDF 的本地处理架构在隐私性、成本可预测性和功能广泛性方面具有显著优势。 ## 开始使用 IronPDF 如需评估 IronPdf 是否满足您的 PDF 生成需求,请联系我们: 1.通过 NuGet 安装:<代码>安装-打包 IronPdf入门文档