推荐一个跨平台支持Word, Excel, CSV, Email等30多种格式的.NET操作库toxy

在我们日常项目开发中,经常需要解析操作文档,比如Office文档、Email文件、PDF、Xml、图片、Mp3等音频文件,操作Office、PDF文件我们需要用到IFilter,操作文本、图片文件需要用到File,每一个文档格式都需要用到不同接口,或者引入不同的第三方插件。

今天给大家推荐一个开源库,这些文档格式通通支持,一网打尽,让我们不需要再关心这些文档底层操作。

项目简介

这是一个基于.Net开发的数据/文本操作开源项目,支持docx、xlsx、xls、pdf、csv、txt、epub、html等30多种格式,使用简单友好,是一个可以帮助我们识别文件格式,并将数据/文本提取为统一结构的智能框架。.

支持文档格式有:

txt,xml,csv,xls,xlsx,ppt,vsd,pub,shw,sldprt,pptx,pubx,vsdx,doc,docx,rtf,pdf,html,htm,eml,msg,vcf,zip,mp3,ape,wma,flac,aif,jpeg,jpg,gif,tiff,png。

推荐一个跨平台支持Word, Excel, CSV, Email等30多种格式的.NET操作库toxy

如上图所示,该项目对各种文件格式进行底层封装,我们只需专注业务的开发,不需要了解底层细节。

技术架构

1、跨平台:基于.Net Standard 2.0开发,支持Windows、Liunx、Mac。

项目结构

推荐一个跨平台支持Word, Excel, CSV, Email等30多种格式的.NET操作库toxy

通过项目引入的包,我们可以清晰的看到,该项目实际上是针对不同文件格式,通过引用第三方包进行统一封装,比如使用NPOI进行解析Office文档、使用iText来解析PDF,使用TagLib解析MP3、Wav等音频文件。

使用方法

Word文档操作

//解析docx文档ParserContext context = new ParserContext(TestDataSample.GetWordPath("SampleDoc.docx"));IDocumentParser parser = ParserFactory.CreateDocument(context);ToxyDocument doc = parser.Parse();//获取段落的数量Assert.AreEqual(7,doc.Paragraphs.Count);//判断第一段落的文本Assert.AreEqual("I am a test document",doc.Paragraphs[0].Text);

Excel文件操作

//解析xlsx文档ParserContext context = new ParserContext(TestDataSample.GetExcelPath('text.xlsx'));ISpreadsheetParser parser = ParserFactory.CreateSpreadsheet(context);ToxySpreadsheet ss = parser.Parse();
//获取Excel表格数量与名称Assert.AreEqual(3, ss.Tables.Count);Assert.AreEqual("Sheet1", ss.Tables[0].Name);Assert.AreEqual("Sheet2", ss.Tables[1].Name);Assert.AreEqual("Sheet3", ss.Tables[2].Name);
//获取总行数Assert.AreEqual(5, ss.Tables[0].Rows.Count);Assert.AreEqual(0, ss.Tables[1].Rows.Count);Assert.AreEqual(0, ss.Tables[2].Rows.Count);
//获取指定行数ToxyTable table = ss.Tables[0];Assert.AreEqual(1, table.Rows[0].RowIndex);Assert.AreEqual(2, table.Rows[1].RowIndex);Assert.AreEqual(3, table.Rows[2].RowIndex);Assert.AreEqual(4, table.Rows[3].RowIndex);Assert.AreEqual(5, table.Rows[4].RowIndex);
//获取总表格数Assert.AreEqual(1, table.Rows[0].Cells.Count);Assert.AreEqual(0, table.Rows[1].Cells.Count);Assert.AreEqual(2, table.Rows[2].Cells.Count);Assert.AreEqual(2, table.Rows[3].Cells.Count);Assert.AreEqual(2, table.Rows[4].Cells.Count);
//获取指定表格的值Assert.AreEqual("Employee Info", table.Rows[0].Cells[0].ToString());Assert.AreEqual(1, table.Rows[0].Cells[0].CellIndex);

PDF文档操作

//解析PDF文档string path = TestDataSample.GetPdfPath("Sample1.PDF");var parser = new PDFDocumentParser(new ParserContext(path));var result = parser.Parse();//获取段落数Assert.AreEqual(1474, result.Paragraphs.Count);//判断第一段落的文本Assert.AreEqual("LA MARCHE MONDIALE DES FEMMES", result.Paragraphs[0].Text);

图片文件操作

//解析jpg图片string path = Path.GetFullPath(TestDataSample.GetImagePath("sample_sony1.jpg"));ParserContext context = new ParserContext(path);IMetadataParser parser = (IMetadataParser)ParserFactory.CreateMetadata(context);ToxyMetadata x = parser.Parse();//属性数量Assert.AreEqual(12, x.Count);//图片宽模式时间等信息Assert.AreEqual(2592, x.Get("PhotoHeight").Value);Assert.AreEqual(95, x.Get("PhotoQuality").Value);Assert.AreEqual(3872, x.Get("PhotoWidth").Value);Assert.AreEqual("DSLR-A200", x.Get("Model").Value);Assert.AreEqual((uint)400, x.Get("ISOSpeedRatings").Value );Assert.AreEqual(5.6, x.Get("FNumber").Value);Assert.AreEqual((double)35, x.Get("FocalLength").Value );Assert.AreEqual((uint)52, x.Get("FocalLengthIn35mmFilm").Value );Assert.AreEqual(new DateTime(2009, 11, 21, 12, 39, 39), x.Get("DateTime").Value);

以上是部分文件格式的解析例子,更多功能,大家可以下载源码学习,针对每一种格式,都有非常详细的单元测试例子,看完例子完全不需要文档。

项目地址

https://github.com/nissl-lab/toxy