在企业和财务部门中,处理大量的电子票据(如发票、收据等)是一项繁琐且耗时的任务。为了提高效率,自动化处理这些票据变得尤为重要。本项目旨在开发一个基于C#的应用程序,能够批量提取PDF电子票据中的关键信息(如发票编号、日期、金额等),并根据这些信息对PDF文件进行重命名,或将提取的区域内容导出为结构化的表格(如Excel文件)。这将大大减少人工操作,提高数据处理的准确性和效率。
iTextSharp
或 PdfPig
EPPlus
使用Windows Forms Designer设计一个简单的用户界面,包含以下控件:
Button
:用于选择PDF文件夹Button
:用于开始处理ProgressBar
:显示处理进度TextBox
:显示日志信息CheckBox
:选择是重命名PDF还是导出表格csharp复制private void btnSelectFolder_Click(object sender, EventArgs e)
{
using (var dialog = new FolderBrowserDialog())
{
if (dialog.ShowDialog() == DialogResult.OK)
{
txtFolderPath.Text = dialog.SelectedPath;
}
}
}
使用iTextSharp
或PdfPig
库来提取PDF中的文本内容。以下以iTextSharp
为例:
csharp复制using iTextSharp.text.pdf;
using iTextSharp.text.pdf.parser;
private string ExtractTextFromPdf(string filePath)
{
using (PdfReader reader = new PdfReader(filePath))
{
string text = "";
for (int i = 1; i <= reader.NumberOfPages; i++)
{
text += PdfTextExtractor.GetTextFromPage(reader, i);
}
return text;
}
}
假设我们要从票据中提取发票编号,并将其作为PDF文件的新名称:
csharp复制private string ExtractInvoiceNumber(string pdfText)
{
// 假设发票编号在文本中以"Invoice Number:"开头
int startIndex = pdfText.IndexOf("Invoice Number:") + "Invoice Number:".Length;
int endIndex = pdfText.IndexOf("\n", startIndex);
return pdfText.Substring(startIndex, endIndex - startIndex).Trim();
}
private void RenamePdfFiles(string folderPath, List<string> pdfFiles)
{
foreach (var pdfFile in pdfFiles)
{
string fullPath = Path.Combine(folderPath, pdfFile);
string pdfText = ExtractTextFromPdf(fullPath);
string invoiceNumber = ExtractInvoiceNumber(pdfText);
if (!string.IsNullOrEmpty(invoiceNumber))
{
string newFileName = $"{invoiceNumber}.pdf";
string newFullPath = Path.Combine(folderPath, newFileName);
File.Move(fullPath, newFullPath);
}
}
}
使用EPPlus
库将提取的数据导出为Excel文件:
csharp复制using OfficeOpenXml;
private void ExportToExcel(List<string> invoiceNumbers, List<string> dates, List<decimal> amounts, string filePath)
{
using (ExcelPackage excelPackage = new ExcelPackage())
{
ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add("Invoices");
// 添加表头
worksheet.Cells[1, 1].Value = "Invoice Number";
worksheet.Cells[1, 2].Value = "Date";
worksheet.Cells[1, 3].Value = "Amount";
// 添加数据
for (int i = 0; i < invoiceNumbers.Count; i++)
{
worksheet.Cells[i + 2, 1].Value = invoiceNumbers[i];
worksheet.Cells[i + 2, 2].Value = dates[i];
worksheet.Cells[i + 2, 3].Value = amounts[i];
}
// 保存文件
FileInfo excelFile = new FileInfo(filePath);
excelPackage.SaveAs(excelFile);
}
}
在btnProcess_Click
事件中整合所有功能,并更新进度条和日志信息:
csharp复制private async void btnProcess_Click(object sender, EventArgs e)
{
string folderPath = txtFolderPath.Text;
if (string.IsNullOrEmpty(folderPath))
{
MessageBox.Show("请选择文件夹路径!");
return;
}
List<string> pdfFiles = Directory.GetFiles(folderPath, "*.pdf").ToList();
int totalFiles = pdfFiles.Count;
int processedFiles = 0;
foreach (var pdfFile in pdfFiles)
{
string fullPath = Path.Combine(folderPath, pdfFile);
string pdfText = ExtractTextFromPdf(fullPath);
string invoiceNumber = ExtractInvoiceNumber(pdfText);
if (!string.IsNullOrEmpty(invoiceNumber))
{
// 重命名PDF
string newFileName = $"{invoiceNumber}.pdf";
string newFullPath = Path.Combine(folderPath, newFileName);
File.Move(fullPath, newFullPath);
// 记录数据用于导出Excel
// 假设从pdfText中提取了日期和金额
string date = ExtractDate(pdfText);
decimal amount = ExtractAmount(pdfText);
// 添加到列表中
invoiceNumbers.Add(invoiceNumber);
dates.Add(date);
amounts.Add(amount);
}
processedFiles++;
progressBar.Value = (processedFiles * 100) / totalFiles;
txtLog.AppendText($"Processed: {pdfFile}\n");
}
// 导出Excel
if (chkExportExcel.Checked)
{
string excelFilePath = Path.Combine(folderPath, "Invoices.xlsx");
ExportToExcel(invoiceNumbers, dates, amounts, excelFilePath);
txtLog.AppendText($"Excel file exported to: {excelFilePath}\n");
}
MessageBox.Show("处理完成!");
}
通过上述步骤,您可以开发一个基于C#的桌面应用程序,批量提取PDF电子票据中的关键信息,并根据这些信息对PDF文件进行重命名或导出为表格。该项目不仅提高了工作效率,还减少了人工操作的错误率。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有