如何通过数据分析制作文档(推荐一个跨平台支持Word)

我是编程乐趣,一个10年.Net开发经验老程序员,点击右上方“关注”,每天为你分享开源项目和编程知识。

在我们日常项目开发中,经常需要解析操作文档,比如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)(1)

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

技术架构

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

项目结构

如何通过数据分析制作文档(推荐一个跨平台支持Word)(2)

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

使用方法

Word文档操作

//解析docx文档 ParserContextcontext=newParserContext(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("LAMARCHEMONDIALEDESFEMMES",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

我是编程乐趣,一个10年.Net开发经验老程序员,专注开源项目和编程知识分享。

私信回复:【888】,领取.Net视频教程。

- End -

推荐阅读

一个简单、功能完整的WMS仓库管理系统

年度盘点10个最受欢迎的.Net开源项目

一个强大、支持100多种格式.Net图片操作库

一个.Net简单、易用的配置文件操作库

基于.NetCore,前端Layui、React、Vue且前后端分离快速开发框架

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页