如何用 C# 从 Spire.PDF 迁移到 IronPDF
从 Spire.PDF 迁移到 IronPDF:完整的 C# 迁移指南
从 Spire.PDF 迁移到IronPDF可将您的 PDF 生成工作流程从将文本渲染为图像的库转变为使用现代 Chromium 渲染引擎生成真实、可选择、可搜索文本的库。本指南提供了完整的分步迁移路径,可解决 Spire.PDF 关键的 HTML 渲染限制和字体嵌入问题。
为什么要从 Spire.PDF 迁移到 IronPDF.
了解 Spire.PDF.
Spire.PDF 是一个功能强大的商用 PDF 库,专为 .NET 开发人员高效处理 PDF 文档而设计。 Spire.PDF 因其特殊功能(尤其是在传统应用程序中)而在编程界声名鹊起,其集成功能可与 E-iceblue 工具集中的其他组件无缝对接。
然而,Spire.PDF 存在几个影响实际使用的基本问题,特别是 HTML 到 PDF 的转换和对现代网络标准的支持。
关键技术问题
| 问题 | 影响 | IronPdf 解决方案 |
|---|---|---|
| 以图像形式呈现的文本 | PDF 无法搜索、无法访问、无法复制文本 | 真实文本渲染 |
| Internet Explorer 依赖性 | 过时的渲染、安全风险 | 现代 Chromium 引擎 |
| 字体嵌入失败 | 文件在其他系统上看起来不对 | 可靠的字体处理 |
| 大量部署足迹 | 内存使用率高,启动速度慢 | 高效部署 |
| 有限的 CSS 支持 | 现代布局无法正确呈现 | 完全支持 CSS3 |
核心问题:基于图像的 PDF 文件
Spire.PDF 的一个明显缺点是倾向于将 HTML 文档中的文本呈现为图像。 这将导致 PDF 文本无法选择或搜索,对于需要搜索功能或文档文本交互的应用程序来说,这可能是一个严重的限制。
当您使用 Spire.PDF 的 LoadFromHTML() 方法时,它通常会将文本渲染为位图图像而非实际文本,从而产生这些问题:
- 文本不能选择
- 不能搜索文本
- 文本不得复制
- 屏幕阅读器无法阅读(违反可访问性原则)
- 文件较大
- 缩放导致像素化
Spire.PDF 与IronPDF对比
| 特征 | Spire.PDF | IronPDF |
|---|---|---|
| HTML 到 PDF 渲染 | 文本呈现为图像 | 真正的文本渲染(可选择、可搜索) |
| 渲染引擎 | 某些系统依赖于 Internet Explorer | 基于 Chromium,符合现代网络标准 |
| 字体处理 | 字体嵌入的已知问题 | 可靠、稳健的字体处理 |
| CSS3 支持。 | 有限的 | 满的 |
| Flexbox/网格 | 不支持 | 全面支持 |
| JavaScript语言 | 有限的 | 完整的 ES6+ |
| PDF 辅助功能 | 差(基于图像) | 出色的 |
| API 设计 | 复杂 | 简单直观 |
| 部署足迹 | 大型项目 | 缓和 |
| 许可 | 免费/商业 | 商业翻译 |
对于计划在 2025 年和 2026 年之前采用 .NET 10 和 C# 14 的团队,IronPDF 通过将文本呈现为实际可选择的文本而不是图像,解决了 Spire.PDF 的 HTML 到 PDF 转换中的关键问题,确保了 PDF 的可搜索性和可访问性。
开始之前
前提条件
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 软件包变更
# Remove Spire.PDF
dotnet remove package Spire.PDF
dotnet remove package FreeSpire.PDF # If using free version
# Install IronPDF
dotnet add package IronPdf# Remove Spire.PDF
dotnet remove package Spire.PDF
dotnet remove package FreeSpire.PDF # If using free version
# Install IronPDF
dotnet add package IronPdf许可配置
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IRON VB CONVERTER ERROR developers@ironsoftware.com完整的 API 参考
命名空间变更
// Before: Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.HtmlConverter;
// After: IronPDF
using IronPdf;
using IronPdf.Editing;// Before: Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.HtmlConverter;
// After: IronPDF
using IronPdf;
using IronPdf.Editing;IRON VB CONVERTER ERROR developers@ironsoftware.com核心 API 映射
| Spire.PDF | IronPDF | 备注 |
|---|---|---|
| <代码>new PdfDocument()</ 代码 | <代码>new ChromePdfRenderer()</ 代码 | 用于 HTML 渲染 |
| <代码>pdf.LoadFromHTML()</代码 | <代码>renderer.RenderHtmlAsPdf()</代码 | HTML 转换 |
| <代码>pdf.LoadFromFile()</代码 | <代码>PdfDocument.FromFile()</代码 | 加载现有 PDF |
| <代码>pdf.SaveToFile()</代码 | <代码>pdf.SaveAs()</代码 | 保存到文件 |
| <代码>pdf.Close()</代码 | 不需要 | 使用处置模式 |
| <代码>pdf.Pages.Add()</代码 | <代码>renderer.RenderHtmlAsPdf()</代码 | 从 HTML 创建页面 |
| <代码>pdf.InsertPageRange()</代码 | <代码>PdfDocument.Merge()</代码 | 合并 PDF |
| <代码>page.Canvas.DrawString()</代码 | TextStamper + ApplyStamp() | 添加文本 |
| <代码>PDFFont</代码 | HTML 中的 CSS 样式 | 字体配置 |
| <代码>PdfBrush</代码 | HTML 中的 CSS 样式 | 颜色/填充配置 |
代码迁移示例
示例 1:HTML 到 PDF 的转换
之前 (Spire.PDF):
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
pdf.LoadFromHTML(htmlString, false, true, true);
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
pdf.LoadFromHTML(htmlString, false, true, true);
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlString);
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlString);
pdf.SaveAs("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com本例展示了 HTML 渲染的根本区别。 Spire.PDF 使用 LoadFromHTML() 和 PdfHtmlLayoutFormat 对象,该对象通常将文本渲染为位图图像。 结果是用户无法选择、复制或搜索文本的 PDF 文件。
IronPDF 使用 ChromePdfRenderer 与 RenderHtmlAsPdf() ,生成完全可选择、可搜索和可访问的真实文本。 无需调用 Close() -IronPDF使用处置模式进行自动清理。有关全面的示例,请参阅 HTML to PDF 文档。
示例 2:合并多个 PDF 文件
之前 (Spire.PDF):
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using System;
class Program
{
static void Main()
{
PdfDocument pdf1 = new PdfDocument();
pdf1.LoadFromFile("document1.pdf");
PdfDocument pdf2 = new PdfDocument();
pdf2.LoadFromFile("document2.pdf");
pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1);
pdf1.SaveToFile("merged.pdf");
pdf1.Close();
pdf2.Close();
}
}// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using System;
class Program
{
static void Main()
{
PdfDocument pdf1 = new PdfDocument();
pdf1.LoadFromFile("document1.pdf");
PdfDocument pdf2 = new PdfDocument();
pdf2.LoadFromFile("document2.pdf");
pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1);
pdf1.SaveToFile("merged.pdf");
pdf1.Close();
pdf2.Close();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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");
}
}// 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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comSpire.PDF 需要使用<代码>new PdfDocument()</ 代码+ LoadFromFile() 手动加载每个文档,然后使用 InsertPageRange() 指定要插入的页面,最后在每个文档上调用 Close() 。
IronPDF 使用更简单的<代码>PdfDocument.FromFile()</代码模式和静态<代码>PdfDocument.Merge()</代码方法,该方法可接受多个文档。 无需调用 Close()。 在我们的教程中了解更多信息。
示例 3:向 PDF 添加文本
之前 (Spire.PDF):
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfPageBase page = pdf.Pages.Add();
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20);
PdfBrush brush = new PdfSolidBrush(Color.Black);
page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, new PointF(50, 50));
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfPageBase page = pdf.Pages.Add();
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20);
PdfBrush brush = new PdfSolidBrush(Color.Black);
page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, new PointF(50, 50));
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");
var textStamper = new TextStamper()
{
Text = "Hello from IronPDF!",
FontSize = 20,
VerticalOffset = 50,
HorizontalOffset = 50
};
pdf.ApplyStamp(textStamper);
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");
var textStamper = new TextStamper()
{
Text = "Hello from IronPDF!",
FontSize = 20,
VerticalOffset = 50,
HorizontalOffset = 50
};
pdf.ApplyStamp(textStamper);
pdf.SaveAs("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comSpire.PDF 采用基于画布的绘图模型,使用 PdfFont,<代码>PdfBrush</代码和<代码>page.Canvas.DrawString()</代码在特定坐标处使用 PointF 定位文本。
IronPdf 使用一个 TextStamper 对象,该对象具有 Text, FontSize, VerticalOffset 和 HorizontalOffset 等直观属性,然后使用 ApplyStamp() 进行应用。 这种方法更具声明性,更易于维护。
文本即图像问题
为什么这一点至关重要
当 Spire.PDF 使用基于图像的渲染技术将 HTML 转换为 PDF 时,您的文档将失去基本功能:
1.无文本搜索:用户不能使用 Ctrl+F 查找文本。 文档管理系统无法对内容进行索引。
2.无文本选择/复制:用户在尝试复制引用、参考或数据时无法选择文本--这是一张图片。
3.可访问性违规:基于图像的 PDF 不符合 WCAG 2.1 合规性、第 508 条合规性(美国政府)、ADA 要求和屏幕阅读器兼容性。
4.文件大小:相同内容比较显示,Spire.PDF(基于图像)生成的文件比 IronPDF(基于文本)大 16 倍。






