.NET 的免费 PDF 库:C# 中的隐藏成本和更好的替代方案
Telerik Document Processing Libraries (DPL) 是一个增值包,包含在更广泛的UI套件中:买家购买Telerik UI(Blazor、WPF、WinForms、ASP.NET Core/MVC/AJAX或MAUI)或DevCraft(Complete每年每开发者$1,763.02起,Ultimate每年每开发者$2,253.02起),DPL随许可证一起免费提供。Iron Suite 则相反:从Iron Software以每名开发人员固定费用的形式独立出售的十产品包,从$2,998起价,无需上游UI套件依赖,并可在基本许可证下免版税部署。
这篇文章主要谈及实际影响采购决策的是什么:团队是否已经为Telerik UI付费,每个套件的定价方式,以及实际上有些什么。 继而是即将集成它的工程师的能力细节。
一目了然的比较
| 维度 | Telerik DPL | Iron Suite |
|---|---|---|
| 定价定位 | 捆绑在Telerik UI / DevCraft中无额外费用(DevCraft Complete 1,763.02美元/开发者/年; DevCraft Ultimate 2,253.02美元/开发者/年) | Lite $2,998 / Plus $4,498 / Professional $8,998 / Unlimited $17,998(Enterprise定制); 全部10个产品以2个的价格 |
| 许可模式 | 每开发者的年度订阅通过Telerik UI / DevCraft(没有独立SKU) | 每开发者的永久许可; 免版税基本费加再分发附加选项用于SaaS/OEM |
| 捆绑中的组件 | 5个库(PDF, Word, Excel, Streaming Excel, ZIP) | 10个产品(PDF、Word、Excel、PPT、OCR、条码、QR、打印、ZIP、Web Scraper) |
| 格式/功能覆盖范围 | PDF, DOCX, XLSX, ZIP,无OCR、条码、PowerPoint、打印或网络抓取 | PDF, DOCX, XLSX, PPTX, OCR, Barcode, QR, Print, ZIP, 网络抓取 |
| 跨平台/云 | 通过.NET Standard 2.0实现跨平台; 没有本机二进制文件 | Windows、Linux、macOS、Docker、Azure、AWS Lambda |
| .NET运行时支持 | .NET Framework 4.6.2+, .NET Standard 2.0(兼容.NET 6/8/9/10) | .NET Framework 4.6.2+, .NET Core, .NET 6/7/8/9/10 |
| 目标市场 | 已经许可给Telerik UI / DevCraft的团队 | .NET开发人员和ISV希望在一个许可证内获取独立的文档+识别捆绑包 |
| 供应商 | Progress Software(Telerik品牌) | Iron Software |
如果通过RadSpreadStreamProcessing流式导出超大XLSX工作簿对工作负载最为重要,Telerik DPL内置该功能。 如果识别堆栈(手写OCR、条码、QR)、PowerPoint生成、网页抓取和程序化打印与PDF和Office同样重要,Iron Suite以一个永久捆绑包覆盖这些需求。
定价和许可
Telerik DPL没有单独的价格。它包含在任何付费的Telerik UI套件或DevCraft层中,无需附加费用。 公开的定价参考(2026年第一季度,ComponentSource)将DevCraft Complete定价为每位开发人员每年1,763.02美元,DevCraft Ultimate定价为每位开发人员每年2,253.02美元(都是需要续订的年度订阅,以保留支持和更新)。 各个Telerik UI套件许可证(Blazor, WPF, WinForms, MAUI等)也包括DPL,无需额外费用。 该模型假设购买者正在购买Telerik UI; 对于只想要文档处理的买家,DPL捆绑包无法单独购买。
Iron Suite以每名开发人员的永久许可证形式出售,从$2,998起打包所有十个组件,单次购买即可。 营销定位,"所有10个产品的价格买2件,节省75%",反映了捆绑中比单独购买Iron产品的折扣。 基础许可证对于授权座位免版税; SaaS、OEM和分发再分发场景超出基础许可证的有单独的再分发附加项覆盖。
已经支付Telerik UI费用的买家以$0的边际成本获取DPL作为增值包。未投资Telerik UI的买家选择Iron Suite作为独立套件,以$2,998每名开发人员的价格永久拥有,无需年度更新以保持所购版本运行。
什么是Telerik文档处理库
Telerik文档处理库是Progress Software的托管代码文档工具包,捆绑在每个付费的Telerik UI套件和DevCraft层中。 它不作为单独的SKU出售。 买家为Telerik UI(Blazor, WPF, WinForms, ASP.NET Core/MVC/AJAX或MAUI)付费,DPL随许可证一起提供,无需额外费用。库面向.NET Standard 2.0平台,因此相同的程序集可在Windows, Linux, macOS, 服务器和云上运行,无需本机依赖。
DPL的定位是"UI套件中的增值"而不是"最佳文档SDK"。它不试图在每个维度上超过专用的PDF/Office引擎,但消除了团队在Telerik生态系统中已经无需Office Interop或Adobe依赖的需求。
关键捆绑库:
- RadPdfProcessing:PDF创建,操作和导出
- RadWordsProcessing:DOCX, RTF和纯文本生成和编辑
- RadSpreadProcessing:XLSX工作簿创建,公式和样式
- RadSpreadStreamProcessing:用于非常大XLSX导出的内存高效流式写入器(百万行)
- RadZipLibrary:ZIP档案创建和提取
- 所有库面向.NET Standard 2.0,与.NET 6/8/9/10和.NET Framework 4.6.2以上版本兼容
什么是Iron Suite
Iron Suite是Iron Software的独立.NET文档工具包,没有捆绑UI控件,也不需要购买UI套件。 十个文档和识别产品在一个永久的每名开发者许可证下交付,五个层级起步价为$2,998,对受许可证保护的席位免版税。 SaaS和OEM再分发使用单独的Redistribution Add-On。
这十个组件,按与编程的Office和PDF工作流的相关性进行分组:
- Office堆栈:IronWord(DOCX创建和编辑); IronXL(XLSX带公式重新计算,图表和数据透视表); IronPPT(PPTX创建和编辑)。
- PDF生成 (IronPDF):HTML到PDF和URL到PDF渲染,本地合并和拆分通过
PdfDocument.Merge,PKCS#12加HSM加TSA签名,PDF/A-1至PDF/A-4,PDF/UA-1和PDF/UA-2,加密,AcroForm填充和平面化,字体管理,栅格化,压缩和线性化,文本提取。 - 识别:IronOCR(Tesseract 5,125+种语言,手写支持约90%英语); IronBarcode(30多种符号); IronQR(由机器学习驱动)。
- 实用工具: IronPrint(安静和对话打印); IronZIP(ZIP/TAR/GZIP/BZIP2,带AES); IronWebScraper(进程内结构化抓取)。
能力比较
PDF处理
程序化PDF生成是两个套件中的一种主力功能:发票,报表,证书和任何需要在代码中具有预测布局的结构文档,而不是从模板语言中生成。
//Telerik DPL— RadPdfProcessing
using Telerik.Windows.Documents.Fixed.FormatProviders.Pdf;
using Telerik.Windows.Documents.Fixed.Model;
using Telerik.Windows.Documents.Fixed.Model.Editing;
RadFixedDocument document = new RadFixedDocument();
RadFixedPage page = document.Pages.AddPage();
FixedContentEditor editor = new FixedContentEditor(page);
editor.DrawText("Hello RadPdfProcessing!");
PdfFormatProvider provider = new PdfFormatProvider();
using (Stream output = File.OpenWrite("Hello.pdf"))
{
provider.Export(document, output, TimeSpan.FromSeconds(10));
}//Telerik DPL— RadPdfProcessing
using Telerik.Windows.Documents.Fixed.FormatProviders.Pdf;
using Telerik.Windows.Documents.Fixed.Model;
using Telerik.Windows.Documents.Fixed.Model.Editing;
RadFixedDocument document = new RadFixedDocument();
RadFixedPage page = document.Pages.AddPage();
FixedContentEditor editor = new FixedContentEditor(page);
editor.DrawText("Hello RadPdfProcessing!");
PdfFormatProvider provider = new PdfFormatProvider();
using (Stream output = File.OpenWrite("Hello.pdf"))
{
provider.Export(document, output, TimeSpan.FromSeconds(10));
}Imports Telerik.Windows.Documents.Fixed.FormatProviders.Pdf
Imports Telerik.Windows.Documents.Fixed.Model
Imports Telerik.Windows.Documents.Fixed.Model.Editing
Imports System.IO
Dim document As New RadFixedDocument()
Dim page As RadFixedPage = document.Pages.AddPage()
Dim editor As New FixedContentEditor(page)
editor.DrawText("Hello RadPdfProcessing!")
Dim provider As New PdfFormatProvider()
Using output As Stream = File.OpenWrite("Hello.pdf")
provider.Export(document, output, TimeSpan.FromSeconds(10))
End Using//Iron Suite— IronPDF
using IronPdf;
var renderer = new ChromePdfRenderer();
string html = "<h1>Invoice 2026-0428</h1><p>Total due: $1,240.00</p>";
using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("invoice.pdf");//Iron Suite— IronPDF
using IronPdf;
var renderer = new ChromePdfRenderer();
string html = "<h1>Invoice 2026-0428</h1><p>Total due: $1,240.00</p>";
using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("invoice.pdf");Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim html As String = "<h1>Invoice 2026-0428</h1><p>Total due: $1,240.00</p>"
Using pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("invoice.pdf")
End UsingTelerik DPL使用代码优先的流式布局:开发者通过FixedContentEditor直接定位内容,具有明确的文档/页面/编辑器对象和流式导出器。 IronPDF的主要路径是通过捆绑的Chromium引擎进行HTML到PDF渲染,设计人员可以生成HTML,而引擎处理布局。 这两种方法针对不同的团队进行了优化:Telerik面向在坐标空间中思考的工程师,而IronPDF面向已经具有HTML/CSS技能的团队。
文字处理
两个套件都通过托管代码文档模型生成和编辑DOCX文件(服务器上不需要安装Microsoft Word)。
//Telerik DPL— RadWordsProcessing
using Telerik.Windows.Documents.Flow.FormatProviders.Docx;
using Telerik.Windows.Documents.Flow.Model;
using Telerik.Windows.Documents.Flow.Model.Editing;
RadFlowDocument document = new RadFlowDocument();
RadFlowDocumentEditor editor = new RadFlowDocumentEditor(document);
editor.InsertText("Hello world!");
using (Stream output = new FileStream("output.docx", FileMode.OpenOrCreate))
{
DocxFormatProvider provider = new DocxFormatProvider();
provider.Export(document, output, TimeSpan.FromSeconds(10));
}//Telerik DPL— RadWordsProcessing
using Telerik.Windows.Documents.Flow.FormatProviders.Docx;
using Telerik.Windows.Documents.Flow.Model;
using Telerik.Windows.Documents.Flow.Model.Editing;
RadFlowDocument document = new RadFlowDocument();
RadFlowDocumentEditor editor = new RadFlowDocumentEditor(document);
editor.InsertText("Hello world!");
using (Stream output = new FileStream("output.docx", FileMode.OpenOrCreate))
{
DocxFormatProvider provider = new DocxFormatProvider();
provider.Export(document, output, TimeSpan.FromSeconds(10));
}Imports Telerik.Windows.Documents.Flow.FormatProviders.Docx
Imports Telerik.Windows.Documents.Flow.Model
Imports Telerik.Windows.Documents.Flow.Model.Editing
Imports System.IO
Dim document As New RadFlowDocument()
Dim editor As New RadFlowDocumentEditor(document)
editor.InsertText("Hello world!")
Using output As Stream = New FileStream("output.docx", FileMode.OpenOrCreate)
Dim provider As New DocxFormatProvider()
provider.Export(document, output, TimeSpan.FromSeconds(10))
End Using//Iron Suite— IronWord
using IronWord;
using IronWord.Models;
var doc = new WordDocument();
var heading = new Paragraph();
heading.AddChild(new TextRun("Quarterly Report — Q1 2026") { FontSize = 18, Bold = true });
doc.AddParagraph(heading);
doc.SaveAs("report.docx");//Iron Suite— IronWord
using IronWord;
using IronWord.Models;
var doc = new WordDocument();
var heading = new Paragraph();
heading.AddChild(new TextRun("Quarterly Report — Q1 2026") { FontSize = 18, Bold = true });
doc.AddParagraph(heading);
doc.SaveAs("report.docx");Imports IronWord
Imports IronWord.Models
Dim doc As New WordDocument()
Dim heading As New Paragraph()
heading.AddChild(New TextRun("Quarterly Report — Q1 2026") With {.FontSize = 18, .Bold = True})
doc.AddParagraph(heading)
doc.SaveAs("report.docx")两个API都遵循文档/段落/文本运行的形状,任何熟悉OpenXML对象模型的人都会认识到。IronWord的API在处理简单的段落和格式化工作时稍微更简洁——RadWordsProcessing通过其流编辑器在位置控制方面有所投资。 这种权衡反映了更广泛的套件框架:Telerik的流编辑器覆盖了更多的复杂布局的位置表面,而IronWord在简单文档上快速落地。
电子表格处理
XLSX生成是一个常见的服务器端任务,用于导出报告,仪表板和客户数据,而无需在部署中安装Office。
//Telerik DPL— RadSpreadProcessing
using Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsx;
using Telerik.Windows.Documents.Spreadsheet.Model;
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets.Add();
CellSelection selection = worksheet.Cells[1, 1];
selection.SetValue("Hello RadSpreadProcessing");
XlsxFormatProvider formatProvider = new XlsxFormatProvider();
using (Stream output = new FileStream("SampleFile.xlsx", FileMode.Create))
{
formatProvider.Export(workbook, output, TimeSpan.FromSeconds(10));
}//Telerik DPL— RadSpreadProcessing
using Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsx;
using Telerik.Windows.Documents.Spreadsheet.Model;
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets.Add();
CellSelection selection = worksheet.Cells[1, 1];
selection.SetValue("Hello RadSpreadProcessing");
XlsxFormatProvider formatProvider = new XlsxFormatProvider();
using (Stream output = new FileStream("SampleFile.xlsx", FileMode.Create))
{
formatProvider.Export(workbook, output, TimeSpan.FromSeconds(10));
}Imports Telerik.Windows.Documents.Spreadsheet.FormatProviders.OpenXml.Xlsx
Imports Telerik.Windows.Documents.Spreadsheet.Model
Imports System.IO
Dim workbook As New Workbook()
Dim worksheet As Worksheet = workbook.Worksheets.Add()
Dim selection As CellSelection = worksheet.Cells(1, 1)
selection.SetValue("Hello RadSpreadProcessing")
Dim formatProvider As New XlsxFormatProvider()
Using output As Stream = New FileStream("SampleFile.xlsx", FileMode.Create)
formatProvider.Export(workbook, output, TimeSpan.FromSeconds(10))
End Using//Iron Suite— IronXL
using IronXL;
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Sales");
sheet["A1"].Value = "Product";
sheet["B1"].Value = "Units";
sheet["A2"].Value = "Widget A";
sheet["B2"].Value = 1024;
workbook.SaveAs("sales.xlsx");//Iron Suite— IronXL
using IronXL;
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Sales");
sheet["A1"].Value = "Product";
sheet["B1"].Value = "Units";
sheet["A2"].Value = "Widget A";
sheet["B2"].Value = 1024;
workbook.SaveAs("sales.xlsx");Imports IronXL
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim sheet As WorkSheet = workbook.CreateWorkSheet("Sales")
sheet("A1").Value = "Product"
sheet("B1").Value = "Units"
sheet("A2").Value = "Widget A"
sheet("B2").Value = 1024
workbook.SaveAs("sales.xlsx")IronXL的单元格引用语法 (sheet["A1"]) 更接近开发者实际讨论电子表格的方式; Telerik的Cells[1, 1] 索引更加程式化。 对于超大XLSX导出(数百万行,内存压力重要),Telerik DPL提供RadSpreadStreamProcessing,一个仅前进的流式写入器。 IronXL 在内存中操作——极限规模流式导出工作负载中,行数超过内存限制的情况是 RadSpreadStreamProcessing 出售的原因。
ZIP档案处理
ZIP实用程序是没有人具体购买套件的功能,但每个多文档工作流最终需要。
//Telerik DPL— RadZipLibrary
using Telerik.Windows.Zip;
using (Stream stream = File.Open("test.zip", FileMode.Create))
using (ZipArchive archive = ZipArchive.Create(stream, null))
using (ZipArchiveEntry entry = archive.CreateEntry("text.txt"))
{
StreamWriter writer = new StreamWriter(entry.Open());
writer.WriteLine("Hello world!");
writer.Flush();
}//Telerik DPL— RadZipLibrary
using Telerik.Windows.Zip;
using (Stream stream = File.Open("test.zip", FileMode.Create))
using (ZipArchive archive = ZipArchive.Create(stream, null))
using (ZipArchiveEntry entry = archive.CreateEntry("text.txt"))
{
StreamWriter writer = new StreamWriter(entry.Open());
writer.WriteLine("Hello world!");
writer.Flush();
}Imports Telerik.Windows.Zip
Imports System.IO
Using stream As Stream = File.Open("test.zip", FileMode.Create)
Using archive As ZipArchive = ZipArchive.Create(stream, Nothing)
Using entry As ZipArchiveEntry = archive.CreateEntry("text.txt")
Dim writer As New StreamWriter(entry.Open())
writer.WriteLine("Hello world!")
writer.Flush()
End Using
End Using
End UsingIron Suite包括IronZIP作为其十个捆绑产品之一,涵盖等效的档案创建,提取和操作操作,基于习惯的.NET API。 Telerik在Telerik.Zip (.NET Standard 2.0) 和 Telerik.Windows.Zip (.NET Framework) 之间的分割是部署时的考虑标准; IronZIP在两个运行时系列中提供单一API界面。
为何选择Iron Suite进行代码优先的.NET文档自动化
每层的公开USD定价(Lite $2,998,Plus $4,498,Professional $8,998,Unlimited $17,998,Enterprise根据报价)。 所购买版本的永久所有权。 基础许可证下的免版税部署。 单一再分发附加件,适用于大规模SaaS和OEM场景。 十个产品的活跃每月发布。 识别堆栈(IronOCR手写识别大约90%英文,IronBarcode支持30多个符号体系,IronQR具有机器学习驱动的检测)包含在与IronPDF,IronWord,IronXL,IronPPT,IronPrint,IronZIP和IronWebScraper相同的捆绑包中。 这就是没有Telerik UI投资的后端团队的Iron Suite提案。
对于这种买家配置文件,Iron Suite的结构优势:
- 独立捆绑:无上游UI套件依赖; Iron Suite将文档库作为产品发布,而不是作为附加价值
- 永久许可:一次性支付,永久保留该版本; 没有年度续订压力
- 透明的公开定价:Lite,Plus,Professional和Unlimited层及美元价格公布在网站上
- 内置识别功能:IronOCR,IronBarcode和IronQR随捆绑包发货; Telerik DPL完全没有识别功能
- 免版税基础许可:包含许可座位的再分发权,无需谈判; 适用于大规模SaaS/OEM的再分发附加件
- 十个产品的单一包安装,无需管理UI/DPL/许可证密钥排列
Iron Suite与Telerik文档处理库的区别
- 捆绑广度。Iron Suite涵盖10个产品类别(PDF,Word,Excel,PowerPoint,OCR,条形码,QR,打印,ZIP,Web抓取); Telerik DPL涵盖4(PDF,Word,Excel,ZIP)。 识别功能,PowerPoint,打印和抓取在DPL中完全缺失。
- 每开发者一次性购买对比每年续订的UI捆绑订阅。Iron Suite买一次便可以永久保留该版本; Telerik DPL捆绑在DevCraft或Telerik UI订阅中,必须每年续订以获得持续支持和更新。
- 独立对比捆绑定位。Iron Suite作为文档SDK出售; Telerik DPL作为UI套件的附加价值定位。 目标买家根本不同。
- 再分发。Iron Suite的基础许可对许可座位免版税,而OEM/SaaS的明确再分发附加件; Telerik DPL的再分发权由母UI/DevCraft EULA管辖。
- HTML渲染保真度。IronPDF的Chromium驱动的HTML到PDF渲染,为复杂CSS生成像素精确的输出; DPL的RadPdfProcessing是一个代码优先的布局引擎,没有HTML渲染管道。
- 流式Excel,Telerik DPL有投资。
RadSpreadStreamProcessing是Telerik DPL投资用于内存受限的超大XLSX工作簿导出的仅前进写入器,而IronXL在内存中操作,适合典型的后端XLSX工作流。
结论
在DevCraft Complete 每年每开发者$1,763.02起(或DevCraft Ultimate每年每开发者$2,253.02起),Telerik DPL凭借许可证作为增值附加:PDF,Word,Excel和ZIP库与Telerik UI套件一起交付,正当其价。在$2,998的Iron Suite Lite层级,捆绑包提供十个独立产品,涵盖PDF(包括简要中的所有标准层级工作),Office,带手写功能的OCR,条形码和QR,打印,ZIP和网页抓取,永久且对授权席位免版税。 已经为Telerik UI支付费用的团队免费获得DPL; 自行挑选文库的团队选择Iron Suite。
