使用IText7和miniExcel处理pdf并输出内容
使用框架:.net 8.0、winform
操作系统:windows 11
编译器:vs 2022
内容:使用
iText7
、miniExcel
,介绍如何简单读取pdf文件文字内容,并做处理后输出至excel文件中
秉承着一贯的风格,还是只讲操作,囫囵吞枣就是要讲究一个稳准狠🤓
读取PDF
iText7
读取操作十分简单,只要有文件地址即可,代码如下
PdfDocument pdfDoc = new PdfDocument(new PdfReader(yourFilPath));
for (int i = 1; i <= pdfDoc.GetNumberOfPages(); i++)
{
LocationTextExtractionStrategy strategy = new LocationTextExtractionStrategy();
new PdfCanvasProcessor(strategy).ProcessPageContent(pdfDoc.GetPage(i));
string pageText = strategy.GetResultantText();
//对pdf内容进行处理
}
在winform
中,一般读取本地文件时都是使用OpenFileDialog
控件,这里直接代码中创建。通过该控件读取到文件名及文件地址
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
openFileDialog.Title = "选择文件";
openFileDialog.Multiselect = true; //是否多选
openFileDialog.Filter = "所有文件 (*.*)|*.*"; //过滤文件类型
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
foreach (string fileName in openFileDialog.FileNames)
{
string fileNameOnly = System.IO.Path.GetFileName(fileName);
dic.Add(fileNameOnly, fileName);
lstPaper.Items.Add(fileNameOnly);
}
}
}
输出Excel
使用miniExcel
进行表格的简单输出也十分简单。
创建输出模型
通过miniExcel
所提供的一系列特性,对输出的表格属性进行定义
public class ExportDto
{
[ExcelColumnWidth(70),ExcelColumnName("名称1")]
public string Name1 { get; set; }
[ExcelColumnWidth(100),ExcelColumnName("名称2")]
public string Name2 { get; set; }
}
private async Task Process(L)
{
List<ExportDto> values = new List<ExportDto>()
{
//将输出内容赋值
}
//输出路径
var preFileName = DateTime.Now.ToString("yyyyMMddHHmmssyyyy");
string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
var basePath = Path.Combine(desktopPath, "temp");
if (!Directory.Exists(basePath)) Directory.CreateDirectory(basePath);
var filePath = Path.Combine(basePath, $"{preFileName}.xlsx");
//输出文件
await MiniExcel.SaveAsAsync(filePath, values);
}
总结
本篇仅仅使用[IText7](Chapter 1: Introducing basic building blocks (itextpdf.com))和[miniExcel](MiniExcel: 简单、高效避免OOM的.NET处理Excel查、写、模版填充数据工具。 (gitee.com))的最基本的功能,在此贴出官方文档。
待笔者继续研习发现好玩的功能后,另行更新之事大概不会。