比较

PDFmyURL 与 IronPDF:技术比较指南

当 .NET 开发人员需要将 URL 和 HTML 内容转换为 PDF 时,他们面临着一个关键的架构决策:使用像PDFmyURL这样的基于云的 API 服务,还是选择像IronPDF这样的本地处理库。 本文将从技术差异、隐私考虑以及对各种应用需求的适用性等方面对两种方案进行比较。

什么是 PDFmyURL?

PDFmyURL 是一个云API服务,旨在将URL和HTML转换为PDF。 该服务在外部服务器上处理文档。 对于.NET集成,PDFmyURL提供了一个可下载的DLL组件(PDFmyURL类。 该组件封装了云API,将内容发送到PDFmyURL的服务器进行渲染。

该服务以易用性为优先考量,并符合 W3C 标准,以实现一致的渲染效果。 但是,每次转换都需要互联网连接,并将文档内容发送到外部服务器进行处理。

PDFmyURL 的主要功能包括:

-基于云的处理:所有转换都在PDFmyURL的外部服务器上进行。 订阅价格:每月 39 美元起,另有持续费用。 -对互联网的依赖:每次转换都需要网络连接。

  • 许可证密钥认证:需要一个.NET组件的许可证密钥。 -速率限制: API 调用可以根据订阅计划进行限制。

什么是 IronPDF?

IronPDF是一个完整的 .NET 库,可在您的应用程序环境中本地处理 PDF 文件。 ChromePdfRenderer 类使用基于 Chromium 的现代引擎进行 HTML 到IronPDF的转换,提供完整的 CSS3 和 JavaScript 支持,无需将数据发送到外部服务器。

与PDFmyURL基于云的方法不同,IronPDF 在您的基础架构内处理一切。 这种设置消除了与外部处理相关的隐私问题,同时提供了除基本转换之外的功能,包括 PDF 操作、文本提取、水印和安全功能。

架构比较

PDFmyURL 和IronPDF的主要区别在于处理发生的位置:外部服务器处理与本地处理。

方面PDFmyURLIronPDF
类型应用程序接口封装.NET 库
处理地点外部服务器本地(您的服务器)
依赖性需要连接互联网本地处理
身份验证每次请求的 API 密钥一次性许可证密钥
成本39+ 美元/月订阅提供永久许可证
隐私外部发送的数据数据保持本地化
费用限制是(取决于计划)None
平台支持基于网络跨平台
使用案例少量应用大批量和企业

对于处理敏感文档(合同、财务报告、个人数据)的应用程序来说,处理位置会对隐私和合规性产生重大影响。PDFmyURL通过外部服务器传输所有文档,而IronPDF则将所有文档保存在您可控的环境中。

将 URL 转换为 PDF.

将网页转换为 PDF 可以突出这些解决方案之间的 API 模式差异。

PDFmyURL URL 转 PDF 方法:

// Download PDFmyURL.NET.dll from pdfmyurl.com
using System;
using PDFmyURLdotNET;

class Example
{
    static void Main()
    {
        try
        {
            var pdf = new PDFmyURL("your-license-key");
            pdf.ConvertURL("https://example.com", "output.pdf");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: " + ex.Message);
        }
    }
}
// Download PDFmyURL.NET.dll from pdfmyurl.com
using System;
using PDFmyURLdotNET;

class Example
{
    static void Main()
    {
        try
        {
            var pdf = new PDFmyURL("your-license-key");
            pdf.ConvertURL("https://example.com", "output.pdf");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: " + ex.Message);
        }
    }
}
Imports System
Imports PDFmyURLdotNET

Class Example
    Shared Sub Main()
        Try
            Dim pdf = New PDFmyURL("your-license-key")
            pdf.ConvertURL("https://example.com", "output.pdf")
        Catch ex As Exception
            Console.WriteLine("Error: " & ex.Message)
        End Try
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF URL 转 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");
    }
}
// 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");
    }
}
Imports IronPdf
Imports System

Class Example
    Shared Sub Main()
        Dim renderer As New ChromePdfRenderer()
        Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

PDFmyURL需要许可证密钥,并将URL发送到其云服务器进行渲染。 ConvertURL()负责处理云端往返。

IronPDF的PdfDocument对象。 了解有关 URL 至 PDF 转换的更多信息,请参阅IronPDF文档。

HTML 字符串到 PDF 的转换

将 HTML 内容直接转换为 PDF 显示出类似的架构差异。

PDFmyURL HTML 字符串转换:

// Download PDFmyURL.NET.dll from pdfmyurl.com
using System;
using PDFmyURLdotNET;

class Example
{
    static void Main()
    {
        try
        {
            var pdf = new PDFmyURL("your-license-key");
            string html = "<html><body><h1>Hello World</h1></body></html>";
            pdf.ConvertHTML(html, "output.pdf");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: " + ex.Message);
        }
    }
}
// Download PDFmyURL.NET.dll from pdfmyurl.com
using System;
using PDFmyURLdotNET;

class Example
{
    static void Main()
    {
        try
        {
            var pdf = new PDFmyURL("your-license-key");
            string html = "<html><body><h1>Hello World</h1></body></html>";
            pdf.ConvertHTML(html, "output.pdf");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: " + ex.Message);
        }
    }
}
Imports System
Imports PDFmyURLdotNET

Module Example
    Sub Main()
        Try
            Dim pdf = New PDFmyURL("your-license-key")
            Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
            pdf.ConvertHTML(html, "output.pdf")
        Catch ex As Exception
            Console.WriteLine("Error: " & ex.Message)
        End Try
    End Sub
End Module
$vbLabelText   $csharpLabel

IronPDF HTML 字符串转换:

// 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");
    }
}
Imports IronPdf
Imports System

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

使用PDFmyURL,HTML内容通过ConvertHTML()传输到外部服务器。 这意味着您的 HTML 模板、动态内容和任何嵌入式数据都要通过第三方基础设施。

IronPDF的RenderHtmlAsPdf()在本地处理HTML,将内容保留在您的应用程序边界内。 有关 HTML 到IronPDF转换模式的详细指导,请参阅 HTML 到 PDF 教程

带设置的 HTML 文件转换

配置页面设置可显示两种解决方案之间不同的 API 设计模式。

带设置的PDFmyURL文件转换:

// Download PDFmyURL.NET.dll from pdfmyurl.com
using System;
using System.IO;
using PDFmyURLdotNET;

class Example
{
    static void Main()
    {
        try
        {
            var pdf = new PDFmyURL("your-license-key");
            pdf.PageSize = "A4";
            pdf.PageOrientation = "landscape";
            pdf.Margins = "10 10 10 10";
            var htmlContent = File.ReadAllText("input.html");
            pdf.ConvertHTML(htmlContent, "output.pdf");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: " + ex.Message);
        }
    }
}
// Download PDFmyURL.NET.dll from pdfmyurl.com
using System;
using System.IO;
using PDFmyURLdotNET;

class Example
{
    static void Main()
    {
        try
        {
            var pdf = new PDFmyURL("your-license-key");
            pdf.PageSize = "A4";
            pdf.PageOrientation = "landscape";
            pdf.Margins = "10 10 10 10";
            var htmlContent = File.ReadAllText("input.html");
            pdf.ConvertHTML(htmlContent, "output.pdf");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: " + ex.Message);
        }
    }
}
Imports System
Imports System.IO
Imports PDFmyURLdotNET

Class Example
    Shared Sub Main()
        Try
            Dim pdf = New PDFmyURL("your-license-key")
            pdf.PageSize = "A4"
            pdf.PageOrientation = "landscape"
            pdf.Margins = "10 10 10 10"
            Dim htmlContent = File.ReadAllText("input.html")
            pdf.ConvertHTML(htmlContent, "output.pdf")
        Catch ex As Exception
            Console.WriteLine("Error: " & ex.Message)
        End Try
    End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF 文件转换与设置:

// 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");
    }
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System

Class Example
    Shared Sub Main()
        Dim renderer As New ChromePdfRenderer()
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
        renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
        renderer.RenderingOptions.MarginTop = 10
        Dim pdf = renderer.RenderHtmlFileAsPdf("input.html")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

PDFmyURL在PageSize, PageOrientation, Margins)。 组件没有专门的文件转换方法,因此必须首先使用File.ReadAllText()读取HTML文件。

IronPDF使用RenderingOptions对象的强类型属性。 PdfPaperOrientation.Landscape是提供IntelliSense支持和编译时验证的枚举值。 边距值为数值(单位为毫米),而不是带有单位后缀的字符串。

API 映射参考

对于评估将PDFmyURL移植到IronPDF的团队来说,了解 API 映射有助于估算开发工作量。

核心方法

PDFmyURL (.NET组件)IronPDF
new PDFmyURL("licenseKey")new ChromePdfRenderer()
pdf.ConvertURL(url, file)renderer.RenderUrlAsPdf(url).SaveAs(file)
pdf.ConvertHTML(html, file)renderer.RenderHtmlAsPdf(html).SaveAs(file)
读取文件 + pdf.ConvertHTML(content, file)renderer.RenderHtmlFileAsPdf(input).SaveAs(output)

配置选项

PDFmyURLIronPDF
pdf.PageSize = "A4"RenderingOptions.PaperSize = PdfPaperSize.A4
pdf.PageOrientation = "landscape"RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
pdf.Margins = "10 10 10 10"RenderingOptions.MarginTop/Bottom/Left/Right = 10
pdf.Header = htmlRenderingOptions.HtmlHeader = new HtmlHeaderFooter { HtmlFragment = html }
pdf.Footer = htmlRenderingOptions.HtmlFooter = new HtmlHeaderFooter { HtmlFragment = html }
pdf.JavaScriptDelay = 500RenderingOptions.RenderDelay = 500
pdf.CssMediaType = "print"RenderingOptions.CssMediaType = PdfCssMediaType.Print
pdf.UserPassword = "pass"pdf.SecuritySettings.UserPassword = "pass"

PDFmyURL无法提供的功能

IronPDF 特点说明
PdfDocument.Merge()合并多个 PDF
pdf.ExtractAllText()提取文本内容
pdf.ApplyWatermark()添加水印
pdf.SecuritySettings密码保护和加密
pdf.Form表格填写和操作
pdf.Sign()数字签名

IronPDF 的这些附加功能超越了基本的转换功能,可提供完整的 PDF 生命周期管理。 有关 PDF 操作功能,请参阅 合并和拆分 PDF 指南

隐私和数据安全

处理地点的不同会对数据处理产生重大影响。

PDFmyURL隐私注意事项:

所有文档都会传输到外部服务器并通过外部服务器。

  • 敏感合同、财务报告和个人数据由外部机构处理。
  • 无法控制第三方基础设施上的数据保留。
  • 合规要求可能禁止外部处理。

IronPDF 隐私优势:

  • 文档永远不会离开您的服务器。
  • 对数据处理拥有完全控制权。
  • 适用于受监管行业(医疗保健、金融、法律)。
  • 不泄露第三方数据。

对于处理敏感信息或按照合规要求(GDPR、HIPAA、SOC 2)运行的组织而言,本地处理消除了评估第三方数据处理实践的复杂性。

成本结构比较

订阅许可和永久许可的定价模式存在本质区别。

定价方面PDFmyURLIronPDF
模型按月订购提供永久许可证
起始成本39 美元/月一次性购买
每年成本468+ 美元/年无经常性费用
费用限制取决于计划None
体积缩放需要更高层次无限制处理

对于长期项目或大批量应用而言,PDFmyURL 的订阅模式会随着时间的推移累积大量成本。IronPDF 的永久许可证选项可提供可预测的经济效益,而无需持续付费或数量限制。

身份验证模式

两种解决方案的验证方法有很大不同。

PDFmyURL验证:

// License key required for the .NET component
var pdf = new PDFmyURL("your-license-key");
// License key required for the .NET component
var pdf = new PDFmyURL("your-license-key");
' License key required for the .NET component
Dim pdf = New PDFmyURL("your-license-key")
$vbLabelText   $csharpLabel

IronPDF 身份验证:

// One-time license configuration at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// One-time license configuration at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' One-time license configuration at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

PDFmyURL需要每个PDFmyURL对象实例化一个许可证密钥。 IronPDF的许可证密钥在应用程序启动时设置一次,通常在配置中,从而消除了每个实例需要处理凭据的麻烦。

页眉和页脚占位符语法

从PDFmyURL迁移的团队应注意动态页眉和页脚的占位符语法差异。

PDFmyURL占位符:

pdf.Header = "<div>Page header content</div>";
pdf.Footer = "<div>Page footer content</div>";
pdf.Header = "<div>Page header content</div>";
pdf.Footer = "<div>Page footer content</div>";
pdf.Header = "<div>Page header content</div>"
pdf.Footer = "<div>Page footer content</div>"
$vbLabelText   $csharpLabel

IronPDF占位符:

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div>Page {page} of {total-pages}</div>"
};
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = "<div>Page {page} of {total-pages}</div>"
};
Imports System

renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
    .HtmlFragment = "<div>Page {page} of {total-pages}</div>"
}
$vbLabelText   $csharpLabel

PDFmyURL通过Footer属性支持页眉和页脚中的HTML内容。 IronPDF使用{total-pages}占位符实现动态页码。 有关页眉和页脚的全面实现,请参阅 页眉和页脚文档

Async 模式的差异

两种解决方案处理异步操作的方式不同。

PDFmyURL async:

// PDFmyURL: Event-based async via DownloadCompleted handler
var pdf = new PDFmyURL("your-license-key");
pdf.DownloadCompleted += (s, e) => { /* handle completed PDF */ };
pdf.ConvertURL("https://example.com", "output.pdf", true); // async = true
// PDFmyURL: Event-based async via DownloadCompleted handler
var pdf = new PDFmyURL("your-license-key");
pdf.DownloadCompleted += (s, e) => { /* handle completed PDF */ };
pdf.ConvertURL("https://example.com", "output.pdf", true); // async = true
Imports PDFmyURLNamespace

Dim pdf As New PDFmyURL("your-license-key")
AddHandler pdf.DownloadCompleted, Sub(s, e)
    ' handle completed PDF
End Sub
pdf.ConvertURL("https://example.com", "output.pdf", True) ' async = true
$vbLabelText   $csharpLabel

IronPDF async:

// IronPDF: Sync by default, wrap for async
var pdf = await Task.Run(() => renderer.RenderUrlAsPdf(url));
// IronPDF: Sync by default, wrap for async
var pdf = await Task.Run(() => renderer.RenderUrlAsPdf(url));
$vbLabelText   $csharpLabel

PDFmyURL通过true作为异步参数。 IronPDF操作默认是同步的,但可以包装在Task.Run()中以适应异步环境。

错误处理

不同解决方案的异常类型和错误处理模式各不相同。

PDFmyURL 错误处理:

try
{
    var pdf = new PDFmyURL("your-license-key");
    pdf.ConvertURL(url, file);
}
catch (Exception ex)
{
    Console.WriteLine("Error: " + ex.Message);
}
try
{
    var pdf = new PDFmyURL("your-license-key");
    pdf.ConvertURL(url, file);
}
catch (Exception ex)
{
    Console.WriteLine("Error: " + ex.Message);
}
Imports System

Try
    Dim pdf As New PDFmyURL("your-license-key")
    pdf.ConvertURL(url, file)
Catch ex As Exception
    Console.WriteLine("Error: " & ex.Message)
End Try
$vbLabelText   $csharpLabel

IronPDF 错误处理:

try
{
    var pdf = renderer.RenderUrlAsPdf(url);
    pdf.SaveAs(file);
}
catch (IronPdf.Exceptions.IronPdfRenderingException e)
{
    Console.WriteLine("Error: " + e);
}
try
{
    var pdf = renderer.RenderUrlAsPdf(url);
    pdf.SaveAs(file);
}
catch (IronPdf.Exceptions.IronPdfRenderingException e)
{
    Console.WriteLine("Error: " + e);
}
Imports IronPdf.Exceptions

Try
    Dim pdf = renderer.RenderUrlAsPdf(url)
    pdf.SaveAs(file)
Catch e As IronPdfRenderingException
    Console.WriteLine("Error: " & e.ToString())
End Try
$vbLabelText   $csharpLabel

PDFmyURL为与API相关的问题(网络故障、认证问题)抛出标准.NET异常。 它还支持用于异步错误处理的WebException事件处理程序。 IronPDF使用标准的.NET异常模式,包含像IronPdfRenderingException这样的特定异常类型。

团队何时考虑从PDFmyURL迁移到 IronPDF?

有几个因素促使团队将IronPDF作为PDFmyURL的替代品进行评估:

隐私和合规要求:处理敏感数据的组织通常不能将文档发送到外部服务器。IronPDF的本地处理直接满足了这一要求。

成本可预测性:PDFmyURL的订阅模式会产生持续的费用,这些费用会在项目生命周期内累积。IronPDF的永久许可证选项提供固定成本,无需考虑基于数量的扩展问题。

离线功能:部署在受限网络环境或需要离线功能的应用程序不能依赖基于云的 API。IronPDF 在初始设置完成后,无需互联网连接即可运行。

扩展的 PDF 功能:PDFmyURL专注于转换,而IronPDF则在一个库中提供额外的功能——合并、拆分、文本提取、水印、表单填写和数字签名。

速率限制解除:高流量应用程序在高峰使用期间可能会遇到PDFmyURL限速。IronPDF可处理无限量文档,不受外部限制。

服务依赖消除:云 API 的可用性会影响应用程序的可靠性。 本地处理消除了对第三方服务正常运行时间的依赖。

安装比较

PDFmyURL安装:pdfmyurl.com下载PDFmyURL.NET.dll(32位或64位),并将其引用添加到您的项目中。 需要许可证密钥。

安装 IronPDF:

Install-Package IronPdf
Install-Package IronPdf
SHELL

IronPDF 需要配置许可证密钥:

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

IronPDF通过NuGet安装,并支持.NET Framework、.NET Core、.NET 5+,以及向.NET 10和C# 14的前向兼容性。

做出决定

在PDFmyURL和IronPDF之间做出选择反映了不同的应用需求和组织优先级:

如果您符合以下条件,请考虑使用 PDFmyURL:您需要快速集成到小批量应用程序中,对文档处理没有隐私限制,更倾向于操作简便而不是基础设施控制,并且能够接受持续的订阅费用。

如果您有以下需求,请考虑使用 IronPDF:处理需要本地处理的敏感文档、需要可预测的成本而无需订阅费、需要离线功能或在受限网络中运行、希望除了转换之外还拥有扩展的 PDF 功能,或者处理大量文档而不用担心速率限制。

对于大多数生产应用,特别是那些处理商业文档、客户数据或按照合规要求运行的应用,IronPDF 的本地处理架构在隐私性、成本可预测性和功能广泛性方面具有显著优势。

开始使用 IronPDF

如需评估IronPDF是否满足您的 PDF 生成需求,请联系我们:

  1. 通过NuGet安装: Install-Package IronPdf 2.查看 入门文档</a 3.探索 HTML 转 PDF 教程 的转换模式 4.请查看 API 参考 以获取完整的方法文档

IronPDF 教程提供了全面的示例,涵盖从基本转换到高级 PDF 操作的常见场景。

结论

PDFmyURL 和IronPDF代表了在 .NET 应用程序中生成 PDF 的根本不同方法。PDFmyURL提供基于云的便利性,但需要权衡外部数据处理、持续订阅成本和互联网依赖性。IronPDF提供具有隐私保证的本地处理控制、永久许可选项和扩展 PDF 功能。

决策范围不仅包括技术实施,还包括围绕数据处理、成本结构和能力需求的组织要求。 对于需要文档隐私、可预测的经济性或基本转换以外功能的应用,IronPDF 的本地处理架构可在您的受控环境中提供全面的解决方案。

在选择这些方法时,请评估您的具体要求--隐私限制、数量预期、功能需求和成本偏好。 处理位置的选择不仅会影响技术实施,还会影响合规性、运营成本和长期应用架构。

请注意PDFCrowd和PDFMyUrl是各自所有者的注册商标。 本网站与PDFmyURL或Pdfcrowd无关联、无认可或未被其赞助。 所有产品名称、徽标和品牌均为各自所有者的财产。 比较仅供参考,反映撰写时公开可用的信息。)}]