在 .NET 中将 HTML 转换为 PDF
$8,820的价格(用于单个开发人员的一年年度维护许可证(ComponentSource 2024年3月)),加上每个开发人员席位的分开的运行时/服务器部署费用,LEADTOOLS Document Suite SDK定价针对需要深度识别基元(ICR, OMR, MICR, 主模板表单, TWAIN扫描) 的政府、医疗保健和银行领域的企业捕获买家。 Iron Suite以$2,998的入门级价格提供,并将十款Iron产品打包在一张永久的每开发者许可证下,授权席位免版税,带有一个用于超出基础的SaaS或OEM再分发的单一再分发附加组件。 因此,总成本曝光非常不同:LEADTOOLS根据开发者席位和每台服务器的运行费用进行扩展; Iron Suite仅随着开发者数量进行扩展。
这种比较带出一个采购驱动的决策实际依赖于:每个套件的定价,许可证实际涵盖的内容,以及捆绑包所提供的内容。 产品描述和能力代码请参见下文,适用于将进行集成的工程师。
一目了然的比较
| 维度 | LEADTOOLS Document Suite | Iron Suite |
|---|---|---|
| 定价定位 | 从$8,820(1开发者/1年年度维护,ComponentSource March 2024)+分开的运行时/部署费用 | Lite $2,998 / Plus $4,498 / Professional $8,998 / Unlimited $17,998(企业自定义)。 所有10款产品以2款的价格,节省75% |
| 许可模式 | 永久每开发者+运行时/服务器部署许可证; royalty-free options at higher tiers | 永久单个开发者,免版税基础; SaaS/OEM再分发附加工具包 |
| 捆绑组件 | OCR + ICR/OMR + MICR + 条形码 + 表单 + PDF + 文档查看器 + TWAIN/WIA + 压缩 + 文档写入程序 | 10个Iron产品作为一个捆绑包 |
| 格式/能力覆盖 | 跨165多种格式的捕获、识别、成像、扫描、表单处理 | PDF + OCR + Barcode + QR + Excel + Word + PowerPoint + Print + ZIP + WebScraper |
| 跨平台 / 云 | Windows,Linux,macOS,iOS,Android,UWP,.NET MAUI,Xamarin,HTML5/JS | Windows / Linux / macOS / Docker / Azure / AWS Lambda |
| .NET运行时支持 | .NET Framework 4.0+, .NET Standard 2.0, .NET 6.0 | .NET Framework 4.6.2+, .NET Core, .NET 6/7/8/9/10 |
| 目标市场 | 政府、医疗保健、银行业的企业捕获/表单处理商店 | 需要一位供应商提供日常文档自动化的.NET开发者和ISV |
| 供应商 | LEAD Technologies, Inc. | Iron Software |
如果对工作负载来说,专业精确度的ICR、OMR、MICR、主模板表单识别或TWAIN/WIA扫描仪集成最为重要,LEADTOOLS就是那些工作负载围绕的工具包。 如果通常目的的OCR(笔迹约为90%的英语),条形码和QR读取,以及在单一永久许可证下的PDF和Office生成最为重要,Iron Suite以固定的每开发者成本涵盖该范围。
定价和许可
LEADTOOLS Document Suite以双组件许可证模式出售:开发许可证(每个使用SDK的程序员都需要)和运行许可证(每个已部署的可再分发副本都需要)。 ComponentSource显示Document Suite v23 1开发者1年年度维护起价为$8,820(截至2024年3月的数字)。 运行时/部署费用根据部署模式(每服务器、每应用程序或更高层级的免版税OEM)单独报价。 拥有总成本需要同时建模开发者席位和每次部署的运行时曝光。
Iron Suite以$2,998的入门级价格提供,并被市场定位为"10款产品的价格仅为2款,节省75%"。 级别通过Lite、Plus、Professional、Unlimited和Enterprise升级。基础许可证对已授权的席位和地点免版税; 不需要用于基础部署的单独运行时/服务器许可证。 SaaS或OEM超出基础的再分发需要单独的Redistribution Add-On,这是一个已经发布的附加组件而非自定义合同。
在3至5年的范围内,LEADTOOLS TCO复合:每开发者年度维护费用$8,820加上应用于每个生产部署的每服务器运行费用。Iron SuiteTCO为固定的每开发者费用; 一旦购买了永久席位,部署将在没有额外服务器费用的情况下扩展(默认许可证范围内,使用Redistribution Add-On进行更大规模的SaaS和OEM扩展)。
什么是LEADTOOLS Document Suite
LEADTOOLS Document Suite SDK是LEAD Technologies的图像SDK集的以文档为核心的集合,是一个在企业扫描、表单处理和捕获繁重工作流中有着悠久历史的产品组合。 它面向政府、医疗保健、银行以及在建立扫描门户、表单处理管道和文档捕获前端时,原始识别准确性和图像格式广度比办公文档保真度更重要的ISV。
关键捆绑引擎和模块:
- OCR(LEAD和OmniPage引擎,200多种语言)和ICR/OMR(手写/泡泡表单识别)
- MICR银行使用的支票字体识别
- 条形码读取和写入1D和2D符号
- 表单识别/处理具有主模板库(AutoFormsEngine)
- PDF读/写/编辑/PDF/A
- 文档查看器 (HTML5/JS)和文档写入器适用于165多种格式
- TWAIN/WIA扫描硬件采集驱动程序
- 压缩编解码器(CCITT, JBIG2, JPEG2000)用于归档成像
什么是Iron Suite
Iron Suite是Iron Software的十款产品.NET捆绑包,其识别堆栈(IronOCR, IronBarcode, IronQR)涵盖任何捕获步骤后的后续流程。围绕识别功能,该捆绑包还增加了IronPDF用于生成和操控,IronWord, IronXL和IronPPT用于Office输出,以及IronPrint, IronZIP和IronWebScraper用于相邻实用工具。 售为单一的永久每开发者许可证,提供五个级别的价格选择,起价为$2,998,授权席位免版税。 SaaS和OEM再分发由单独的再分发附加项覆盖。
十个组件,按与以识别为导向的工作流的相关性分组:
- 识别堆栈(锚点):IronOCR(Tesseract 5,125种以上语言,内置手写识别,约90%英语准确性,去歪斜/去噪/对比预处理,可搜索PDF/UA和hOCR输出); IronBarcode(30多种符号,包括QR, Aztec, 数据矩阵, PDF417,带图像预处理和MAUI扫描支持); IronQR(基于机器学习的批量
ReadPdfs多文档工作流读取)。 - 文档生成:IronPDF(HTML到PDF的渲染,本地合并/拆分,PKCS#12 + HSM + TSA 签名,PDF/A-1到PDF/A-4家族,PDF/UA-1和PDF/UA-2,AES加密,AcroForm填充和平面化,字体管理,光栅化,压缩和线性化); IronWord(DOCX); IronXL(XLSX,带公式重新计算); IronPPT(PPTX)。
- 实用工具: IronPrint(安静和对话打印); IronZIP(ZIP/TAR/GZIP/BZIP2,带AES); IronWebScraper(进程内结构化抓取)。
能力比较
OCR
LEADTOOLS提供两个OCR引擎(LEAD和OmniPage),支持200多种语言,具有显式IOcrEngine生命周期管理。
using (RasterCodecs codecs = new RasterCodecs())
using (IOcrEngine engine = OcrEngineManager.CreateEngine(OcrEngineType.LEAD))
{
engine.Startup(codecs, null, null, @"C:\LEADTOOLS\Bin\Common\OcrLEADRuntime");
using (IOcrDocument doc = engine.DocumentManager.CreateDocument())
{
doc.Pages.AddPages("scan.tif", 1, -1, null);
doc.Pages.AutoZone(null);
doc.Pages.Recognize(null);
doc.Save("searchable.pdf", DocumentFormat.Pdf, null);
}
engine.Shutdown();
}using (RasterCodecs codecs = new RasterCodecs())
using (IOcrEngine engine = OcrEngineManager.CreateEngine(OcrEngineType.LEAD))
{
engine.Startup(codecs, null, null, @"C:\LEADTOOLS\Bin\Common\OcrLEADRuntime");
using (IOcrDocument doc = engine.DocumentManager.CreateDocument())
{
doc.Pages.AddPages("scan.tif", 1, -1, null);
doc.Pages.AutoZone(null);
doc.Pages.Recognize(null);
doc.Save("searchable.pdf", DocumentFormat.Pdf, null);
}
engine.Shutdown();
}Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.Ocr
Using codecs As New RasterCodecs()
Using engine As IOcrEngine = OcrEngineManager.CreateEngine(OcrEngineType.LEAD)
engine.Startup(codecs, Nothing, Nothing, "C:\LEADTOOLS\Bin\Common\OcrLEADRuntime")
Using doc As IOcrDocument = engine.DocumentManager.CreateDocument()
doc.Pages.AddPages("scan.tif", 1, -1, Nothing)
doc.Pages.AutoZone(Nothing)
doc.Pages.Recognize(Nothing)
doc.Save("searchable.pdf", DocumentFormat.Pdf, Nothing)
End Using
engine.Shutdown()
End Using
End UsingIronOCR的等效流程是一个类:
var ocr = new IronTesseract();
using var input = new OcrInput("scanned-document.png");
input.Deskew();
input.DeNoise();
var result = ocr.Read(input);
Console.WriteLine($"Confidence: {result.Confidence}");var ocr = new IronTesseract();
using var input = new OcrInput("scanned-document.png");
input.Deskew();
input.DeNoise();
var result = ocr.Read(input);
Console.WriteLine($"Confidence: {result.Confidence}");Imports IronTesseract
Dim ocr As New IronTesseract()
Using input As New OcrInput("scanned-document.png")
input.Deskew()
input.DeNoise()
Dim result = ocr.Read(input)
Console.WriteLine($"Confidence: {result.Confidence}")
End UsingLEADTOOLS公开了完整的识别管道:引擎启动/关闭,编解码器注册,自动分区,多页文档对象,输出写入器。 IronOCR是具有观点的且紧凑的。 需要OmniPage在退化扫描或200种语言OCR上提供准确性且具有引擎可调参数的工作负载是LEADTOOLS定位的——而对于具有预处理内置的普通扫描文档OCR(加上笔迹识别约90%英语准确性),IronOCR提供更快的交付。
条形码
using (RasterCodecs codecs = new RasterCodecs())
using (RasterImage image = codecs.Load("barcoded.tif"))
{
BarcodeEngine engine = new BarcodeEngine();
BarcodeData[] results = engine.Reader.ReadBarcodes(
image, LeadRect.Empty, 0,
new BarcodeSymbology[]
{
BarcodeSymbology.QR, BarcodeSymbology.Datamatrix,
BarcodeSymbology.PDF417, BarcodeSymbology.Code128, BarcodeSymbology.UPCA
});
foreach (BarcodeData bc in results)
Console.WriteLine($"{bc.Symbology}: {bc.Value}");
}using (RasterCodecs codecs = new RasterCodecs())
using (RasterImage image = codecs.Load("barcoded.tif"))
{
BarcodeEngine engine = new BarcodeEngine();
BarcodeData[] results = engine.Reader.ReadBarcodes(
image, LeadRect.Empty, 0,
new BarcodeSymbology[]
{
BarcodeSymbology.QR, BarcodeSymbology.Datamatrix,
BarcodeSymbology.PDF417, BarcodeSymbology.Code128, BarcodeSymbology.UPCA
});
foreach (BarcodeData bc in results)
Console.WriteLine($"{bc.Symbology}: {bc.Value}");
}Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.Barcode
Using codecs As New RasterCodecs()
Using image As RasterImage = codecs.Load("barcoded.tif")
Dim engine As New BarcodeEngine()
Dim results As BarcodeData() = engine.Reader.ReadBarcodes(image, LeadRect.Empty, 0, New BarcodeSymbology() {BarcodeSymbology.QR, BarcodeSymbology.Datamatrix, BarcodeSymbology.PDF417, BarcodeSymbology.Code128, BarcodeSymbology.UPCA})
For Each bc As BarcodeData In results
Console.WriteLine($"{bc.Symbology}: {bc.Value}")
Next
End Using
End UsingIronBarcode将条形码读取简化为一次调用:
var results = BarcodeReader.Read("shipment-label.png");
foreach (var barcode in results)
{
Console.WriteLine($"Value: {barcode.Value}");
Console.WriteLine($"Format: {barcode.BarcodeType}");
}var results = BarcodeReader.Read("shipment-label.png");
foreach (var barcode in results)
{
Console.WriteLine($"Value: {barcode.Value}");
Console.WriteLine($"Format: {barcode.BarcodeType}");
}Dim results = BarcodeReader.Read("shipment-label.png")
For Each barcode In results
Console.WriteLine($"Value: {barcode.Value}")
Console.WriteLine($"Format: {barcode.BarcodeType}")
NextLEADTOOLS提供显式的符号数组、编解码器加载和LeadRect搜索区域,当需要定位结构化表单的特定区域时非常有用。 IronBarcode自动检测符号并从任何图像返回结果,无需预先配置。 对于符号已知且搜索区域重要的大批量扫描工作流程,LEADTOOLS可调; 对于通用目的的条形码读取,IronBarcode更易集成。
表单识别
LEADTOOLS文档套件包括一个主模板表单识别引擎(AutoFormsEngine),可将扫描的表单与模板库匹配,并提取命名字段。 这是一个Iron Suite不涉及的类别。
DiskMasterFormsRepository repository = new DiskMasterFormsRepository(codecs, @"C:\Forms\Masters");
AutoFormsEngine autoEngine = new AutoFormsEngine(repository, null, null, null,
AutoFormsRecognitionManager.Default, 30, 80, true);
using (RasterImage form = codecs.Load("filled-form.tif"))
{
AutoFormsRunResult result = autoEngine.Run(form, null);
foreach (FormPage page in result.FormFields)
foreach (FormField field in page)
Console.WriteLine($"{field.Name}: {field.Result}");
}DiskMasterFormsRepository repository = new DiskMasterFormsRepository(codecs, @"C:\Forms\Masters");
AutoFormsEngine autoEngine = new AutoFormsEngine(repository, null, null, null,
AutoFormsRecognitionManager.Default, 30, 80, true);
using (RasterImage form = codecs.Load("filled-form.tif"))
{
AutoFormsRunResult result = autoEngine.Run(form, null);
foreach (FormPage page in result.FormFields)
foreach (FormField field in page)
Console.WriteLine($"{field.Name}: {field.Result}");
}Imports System
Dim repository As New DiskMasterFormsRepository(codecs, "C:\Forms\Masters")
Dim autoEngine As New AutoFormsEngine(repository, Nothing, Nothing, Nothing, AutoFormsRecognitionManager.Default, 30, 80, True)
Using form As RasterImage = codecs.Load("filled-form.tif")
Dim result As AutoFormsRunResult = autoEngine.Run(form, Nothing)
For Each page As FormPage In result.FormFields
For Each field As FormField In page
Console.WriteLine($"{field.Name}: {field.Result}")
Next
Next
End UsingIron Suite的表单工作流路径依赖于组合,IronOCR带有自定义正则表达式和字段提取用于扫描表单,或IronPDF的AcroForm读取(填充,提取,扁平化)用于结构化PDF模板。 针对命名模板库的主模板表单识别,适用于高容量的政府/医疗表单数字化,其中布局固定且字段名映射到数据库列,是LEADTOOLS的AutoFormsEngine围绕的工作负载。
PDF处理
using (PDFDocument pdf = new PDFDocument("input.pdf"))
{
PDFDocumentProperties props = pdf.DocumentProperties;
props.Title = "Processed";
props.Author = "Internal";
pdf.SetDocumentProperties(props);
using (RasterCodecs codecs = new RasterCodecs())
pdf.Convert(1, -1, "input_pdfa.pdf", DocumentFormat.PdfA, codecs);
}using (PDFDocument pdf = new PDFDocument("input.pdf"))
{
PDFDocumentProperties props = pdf.DocumentProperties;
props.Title = "Processed";
props.Author = "Internal";
pdf.SetDocumentProperties(props);
using (RasterCodecs codecs = new RasterCodecs())
pdf.Convert(1, -1, "input_pdfa.pdf", DocumentFormat.PdfA, codecs);
}Imports System
Using pdf As New PDFDocument("input.pdf")
Dim props As PDFDocumentProperties = pdf.DocumentProperties
props.Title = "Processed"
props.Author = "Internal"
pdf.SetDocumentProperties(props)
Using codecs As New RasterCodecs()
pdf.Convert(1, -1, "input_pdfa.pdf", DocumentFormat.PdfA, codecs)
End Using
End UsingIronPDF的等效PDF/A导出流:
// NuGet: Install-Package IronPdf
// Docs: https://ironpdf.com/how-to/pdfa/
using IronPdf;
class Program
{
static void Main()
{
// SaveAsPdfA exports to a PDF/A archival profile.
// PdfAVersions exposes PdfA1a, PdfA1b, PdfA2a, PdfA2b, PdfA3a, PdfA3b.
PdfDocument pdf = PdfDocument.FromFile("invoice.pdf");
// PDF/A-3b is the common archival target for long-term retention.
pdf.SaveAsPdfA("invoice-archive.pdf", PdfAVersions.PdfA3b);
}
}// NuGet: Install-Package IronPdf
// Docs: https://ironpdf.com/how-to/pdfa/
using IronPdf;
class Program
{
static void Main()
{
// SaveAsPdfA exports to a PDF/A archival profile.
// PdfAVersions exposes PdfA1a, PdfA1b, PdfA2a, PdfA2b, PdfA3a, PdfA3b.
PdfDocument pdf = PdfDocument.FromFile("invoice.pdf");
// PDF/A-3b is the common archival target for long-term retention.
pdf.SaveAsPdfA("invoice-archive.pdf", PdfAVersions.PdfA3b);
}
}Imports IronPdf
Module Program
Sub Main()
' SaveAsPdfA exports to a PDF/A archival profile.
' PdfAVersions exposes PdfA1a, PdfA1b, PdfA2a, PdfA2b, PdfA3a, PdfA3b.
Dim pdf As PdfDocument = PdfDocument.FromFile("invoice.pdf")
' PDF/A-3b is the common archival target for long-term retention.
pdf.SaveAsPdfA("invoice-archive.pdf", PdfAVersions.PdfA3b)
End Sub
End ModuleLEADTOOLS的PDF模型建立在成像堆栈上:Convert用于PDF/A导出。 IronPDF通过PdfAVersions枚举支持相同的PDF/A一致级别(A-1a,A-1b,A-2a,A-2b,A-3a,A-3b,加上PDF/A-4/4E/4F系列,根据ISO 19005-4:2020)通过SaveAsPdfA进行。 IronPDF还提供专用的PDF/UA可访问性支持:RenderHtmlAsPdfUA(html)在一次调用中生成标记的可访问PDF(默认PDF/UA-1; 也支持PDF/UA-2),记录可直接符合第508节和WCAG 2.0 AA。 对于在现有成像管道内将扫描的图像输出转换为PDF/A(其中RasterCodecs已经拥有光栅生命周期)的情况,LEADTOOLS是自然的选择; 对于将HTML源或已加载的PDF归档为PDF/A,IronPDF的单行SaveAsPdfA是更直接的路径。
TWAIN扫描
LEADTOOLS包括一个本地TWAIN/WIA扫描仪驱动包装器用于硬件采集,这是Iron Suite不提供的能力。
TwainSession session = new TwainSession();
session.Startup(host, TwainStartupFlags.None);
if (session.SelectSource(null) == DialogResult.OK)
{
using (RasterCodecs codecs = new RasterCodecs())
{
session.AcquirePage += (s, e) =>
codecs.Save(e.Image, "scanned.tif", RasterImageFormat.CcittGroup4, 1,
1, -1, 1, CodecsSavePageMode.Append);
session.Acquire(TwainUserInterfaceFlags.Show);
}
}
session.Shutdown();TwainSession session = new TwainSession();
session.Startup(host, TwainStartupFlags.None);
if (session.SelectSource(null) == DialogResult.OK)
{
using (RasterCodecs codecs = new RasterCodecs())
{
session.AcquirePage += (s, e) =>
codecs.Save(e.Image, "scanned.tif", RasterImageFormat.CcittGroup4, 1,
1, -1, 1, CodecsSavePageMode.Append);
session.Acquire(TwainUserInterfaceFlags.Show);
}
}
session.Shutdown();Dim session As New TwainSession()
session.Startup(host, TwainStartupFlags.None)
If session.SelectSource(Nothing) = DialogResult.OK Then
Using codecs As New RasterCodecs()
AddHandler session.AcquirePage, Sub(s, e)
codecs.Save(e.Image, "scanned.tif", RasterImageFormat.CcittGroup4, 1, 1, -1, 1, CodecsSavePageMode.Append)
End Sub
session.Acquire(TwainUserInterfaceFlags.Show)
End Using
End If
session.Shutdown()Iron Suite的捆绑包专注于采购后文档自动化、OCR、识别、PDF、Office等。 从.NET驱动物理TWAIN/WIA扫描仪,硬件等级的端到端扫描门户,是LEADTOOLS的TWAIN包装器销售的工作负载 - Iron Suite用户与外部TWAIN库组合,并将获得的图像输入到IronOCR或IronPDF中进行下游处理。
当捕获深度不是主要需求时,为什么选择Iron Suite
对于运行日常文档自动化(发票、报告、偶尔扫描的OCR、运输标签上的条形码、Office输出、档案)的.NET后端团队,没有专门的表单处理管道,Iron Suite的表面面积匹配这些工作负载,其总成本仅为LEADTOOLS的一个小部分。LEADTOOLS的捕获原始深度(ICR,OMR,MICR,扫描仪驱动)在实际应用这些原始的工作流中物有所值; 在专注于采购后自动化的后端,未使用的捕获表面仍然是一个付费成本。
具体而言,当:
- 通用OCR和条形码读取满足您的准确性标准(不需要ICR,OMR,MICR)
- 您不通过.NET驱动物理扫描仪(不需要TWAIN/WIA)
- 您需要跨切文档自动化:PDF + Word + Excel + OCR + Barcode一个捆绑包
- 您想要固定的每开发者定价,没有每个服务器的运行时费用
- 您想要公开的永久定价以实现可预测的采购
Iron Suite与LEADTOOLS Document Suite有何区别
- 没有运行时/部署费用: Iron Suite对已授权的席位免版税默认设置; LEADTOOLS在每开发者定价之上添加了运行时/服务器部署费用。
- 公开的永久定价从$2,998开始: Iron Suite是公布价格;LEADTOOLS文档套件的起价为8,820美元/年+单独的运行时费用。
- 现代惯用的.NET API 套件: Iron Suite在所有10个组件中都使用现代的.NET习惯用法; LEADTOOLS的API模式源自COM(全局
Shutdown生命周期,手动编解码器注册)。 - 每个组件一个包安装: Iron Suite每个组件提供一个NuGet; LEADTOOLS Document Suite需要多个交叉引用的包(
Leadtools.Forms,OCR运行时,本地DLLs)。 - 捕获和IDP,是LEADTOOLS的专长。 OMR(泡泡表格),MICR(支票字体),TWAIN/WIA扫描仪驱动以及JBIG2/JPEG2000编解码器深度是LEADTOOLS定位于的工作负载。 IronOCR包括通用手写识别(约90%的英语文本准确性)和扫描中的标准符号条形码检测——生产级的ICR具有专业准确性和OMR/MICR管道仍然是LEADTOOLS的专业领域。
- LEADTOOLS跨越iOS, Android, UWP, MAUI和HTML5/JS,除此之外还有.NET,而Iron Suite则聚焦于服务器和桌面上的.NET。
结论
$8,820加上每服务器的运行时费用,LEADTOOLS Document Suite买下了捕捉深度:ICR、OMR、MICR、主模板表单识别、TWAIN和WIA扫描仪驱动,以及与档案级扫描的成像编解码器目录。 以$2,998的Iron Suite Lite级别价格,该捆绑包购买了十款产品,涵盖一般文档自动化,涉及PDF(加上介绍中所有的标准级功能)、Office、~90%英语准确率的手写OCR、条形码和QR、打印、ZIP和网络抓取,授权席位免版税,无每台服务器的运行时费用。 以捕获为先的工作流,在运行时预算中选择LEADTOOLS; 日常.NET文档自动化选择Iron Suite在ironsoftware.com/csharp/suite。
