如何提取账单线项目和结构表
如何提取账单线项目和结构表
从账单中提取线条项目和表是完全自动化可支付的账户、审计和支出分析的关键。Aspose.OCR Invoice to Text for .NET 允许您从扫描或拍摄的文件中分配详细、多层、多个列数据。
现实世界问题
账单包含产品/服务的表格 - 手动翻译这些是时间和错误的。
解决方案概述
使用 OCR 识别表区域,分割每个行和列,并出口到结构化格式为 ERP、BI 或进一步分析。
原則
- Visual Studio 2019 或以后
- .NET 6.0 或更高版本(或 .Net Framework 4.6.2+)
- Aspose.OCR 为 .NET 从 NuGet
- 示例发票图像或与线条项目/表格的PDF
PM> Install-Package Aspose.OCR
步骤实施
步骤 1: 准备发票图像/PDF
string invoiceFile = "invoice_with_items.pdf";
步骤2:识别表/线条项目区域
using Aspose.OCR;
InvoiceRecognitionSettings settings = new InvoiceRecognitionSettings();
settings.Language = Language.English;
AsposeOcr ocr = new AsposeOcr();
OcrInput input = new OcrInput(InputType.PDF);
input.Add(invoiceFile);
List<RecognitionResult> results = ocr.RecognizeInvoice(input, settings);
string fullText = results[0].RecognitionText;
步骤3:将认可的文本分成桌面环/列
- 使用 regex 或自定义逻辑,以按序列/列分数分离线元件。
// Example: Split into lines, then columns (simplified)
string[] lines = fullText.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
foreach (var line in lines)
{
if (Regex.IsMatch(line, @"\d+\s+[A-Za-z].*\s+\d+[.,]\d{2}")) // crude line item match
{
string[] columns = line.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
// Map columns: SKU, description, qty, price, total, etc.
}
}
步骤4:导出线元件/表到CSV
using (var writer = new StreamWriter("invoice_lineitems.csv"))
{
writer.WriteLine("SKU,Description,Qty,UnitPrice,Total");
// Loop and write line items parsed above
}
步骤5:完整的例子
using Aspose.OCR;
using System;
using System.IO;
using System.Text.RegularExpressions;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
string invoiceFile = "invoice_with_items.pdf";
InvoiceRecognitionSettings settings = new InvoiceRecognitionSettings();
settings.Language = Language.English;
AsposeOcr ocr = new AsposeOcr();
OcrInput input = new OcrInput(InputType.PDF);
input.Add(invoiceFile);
List<RecognitionResult> results = ocr.RecognizeInvoice(input, settings);
string fullText = results[0].RecognitionText;
var lineItems = new List<string[]>();
string[] lines = fullText.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
foreach (var line in lines)
{
if (Regex.IsMatch(line, @"\d+\s+[A-Za-z].*\s+\d+[.,]\d{2}"))
lineItems.Add(line.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));
}
using (var writer = new StreamWriter("invoice_lineitems.csv"))
{
writer.WriteLine("SKU,Description,Qty,UnitPrice,Total");
foreach (var item in lineItems)
writer.WriteLine(string.Join(",", item));
}
}
}
使用案例和应用程序
花费分析和AP自动化
提前提取的支出报告,预测和批准。
账单审计与审查
流线审计/批准,可出口、可机器阅读的细节。
ERP / 金融系统集成
直接上传结构化表数据到金融或ERP软件。
共同挑战与解决方案
挑战1:多样式桌面格式
** 解決方案:** 為每個供應商 / 模板提供規格和分配邏輯。
挑战2:列中的OCR识别错误
** 解决方案:** 使用列重量,请求高品质的扫描或手动审查的旗帜。
挑战3:错过或失去的列
** 解決方案:** 標準化、分裂或即時審查雙重情況。
绩效考虑
- Batch 同时处理多个发票
- 标志/旗帜投标问题为人类评论
最佳实践
- 创建已知模板的雷格斯图书馆
- 评论 样品输出 到 Tune Parsing
- 安全的原始/处理文件进行审计
- 更新提取逻辑作为供应商/模板变更
先进的场景
场景1:地图线项目直接到ERP/数据库
使用 ORM 或 API 通话来压缩提取的表数据。
场景2:处理多页表
将逻辑扩展到通过PDF/图像页面中断。
结论
Aspose.OCR Invoice to Text for .NET 允许提取详细的发票线项目和表格,从而从扫描/照片到结构化、可操作的数据进行完整的自动化。
查看更多结构化提取代码在 ASPOSE.OCR 为 .NET API 参考 .