【愚公系列】2023年05月 .NET CORE工具案例 您所在的位置:网站首页 tika直播 【愚公系列】2023年05月 .NET CORE工具案例

【愚公系列】2023年05月 .NET CORE工具案例

#【愚公系列】2023年05月 .NET CORE工具案例| 来源: 网络整理| 查看: 265

前言

作为一个开发者对于写代码操作各种办公文件是非常常见的需求,但是操作这些不同办公文件需要安装各种对应的第三方包来处理,下面就来介绍统一的第三方包Toxy,Toxy是一个.NET数据/文本提取框架,类似于Java中的Apache Tika。它支持许多流行的格式,如docx,xlsx,xls,pdf,csv,txt,epub,html等。

Toxy的架构图如下: 在这里插入图片描述 如上图所示,该项目对各种文件格式进行底层封装,我们只需专注业务的开发,不需要了解底层细节。

Toxy的网址:github.com/nissl-lab/t… 在这里插入图片描述

一、办公文档神器Toxy的使用

Toxy相关对象如下:

ToxyDocument - 为文档提取的数据结构 ToxySpreadsheet - 为电子表格提取的数据结构 ToxyEmail - 为电子邮件提取的数据结构 ToxyBusinessCard - 为名片提取的数据结构 ToxyDom - 为基于 DOM 的文档提取的数据结构 ToxyMetadata - 为其他具有元数据的文件提取的数据结构 1.安装对应的包 Toxy 复制代码

在这里插入图片描述

2.Word文档操作 2.1 普通文档解析

在这里插入图片描述 1、ITextParser解析文档

//解析docx文档 using ConsoleTest; using NUnit.Framework; using Toxy; ParserContext context = new ParserContext(TestDataSample.GetWordPath("SampleDoc.docx")); ITextParser parser = ParserFactory.CreateText(context); string doc = parser.Parse(); Assert.IsNotNull(doc); string[] lines = doc.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); Assert.AreEqual(7, lines.Length); Assert.AreEqual("I am a test document", lines[0]); Assert.AreEqual("This is page 1", lines[1]); Assert.AreEqual("I am Calibri (Body) in font size 11", lines[2]); Assert.AreEqual("\n", lines[3]); Assert.AreEqual("This is page two", lines[4]); Assert.AreEqual("It’s Arial Black in 16 point", lines[5]); Assert.AreEqual("It’s also in blue", lines[6]); Console.ReadLine(); 复制代码

在这里插入图片描述 2、IDocumentParser解析文档

//解析docx文档 using ConsoleTest; using NUnit.Framework; using Toxy; 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); Assert.AreEqual("This is page 1", doc.Paragraphs[1].Text); Assert.AreEqual("I am Calibri (Body) in font size 11", doc.Paragraphs[2].Text); Assert.AreEqual("\n", doc.Paragraphs[3].Text); Assert.AreEqual("This is page two", doc.Paragraphs[4].Text); Assert.AreEqual("It’s Arial Black in 16 point", doc.Paragraphs[5].Text); Assert.AreEqual("It’s also in blue", doc.Paragraphs[6].Text); Console.ReadLine(); 复制代码

在这里插入图片描述

2.2 表格文档解析

在这里插入图片描述 1、IDocumentParser解析文档

//解析docx文档 using ConsoleTest; using NUnit.Framework; using Toxy; ParserContext context = new ParserContext(TestDataSample.GetWordPath("simple-table.docx")); IDocumentParser parser = ParserFactory.CreateDocument(context); ToxyDocument doc = parser.Parse(); Assert.AreEqual(8, doc.Paragraphs.Count); Assert.AreEqual("This is a Word document that was created using Word 97 – SR2. It contains a paragraph, a table consisting of 2 rows and 3 columns and a final paragraph.", doc.Paragraphs[0].Text); Assert.AreEqual("This text is below the table.", doc.Paragraphs[1].Text); Assert.AreEqual("Cell 1,1", doc.Paragraphs[2].Text); Assert.AreEqual("Cell 1,2", doc.Paragraphs[3].Text); Assert.AreEqual("Cell 1,3", doc.Paragraphs[4].Text); Assert.AreEqual("Cell 2,1", doc.Paragraphs[5].Text); Assert.AreEqual("Cell 2,2", doc.Paragraphs[6].Text); Assert.AreEqual("Cell 2,3", doc.Paragraphs[7].Text); Console.ReadLine(); 复制代码

在这里插入图片描述

3.Excel文件操作

后续都已一种方式,不在像word那样了 在这里插入图片描述

//解析xlsx文档 using ConsoleTest; using NUnit.Framework; using Toxy; ParserContext context = new ParserContext(TestDataSample.GetExcelPath("Employee.xls")); 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); Console.ReadLine(); 复制代码

在这里插入图片描述

4.PDF文档操作

在这里插入图片描述

using NUnit.Framework; using Toxy.Parsers; using Toxy; 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 : UN MOUVEMENT IRRÉVERSIBLE", result.Paragraphs[0].Text); Console.ReadLine(); 复制代码

在这里插入图片描述

5.图片文件操作

在这里插入图片描述

//解析jpg图片 using ConsoleTest; using NUnit.Framework; using Toxy; 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); Console.ReadLine(); 复制代码

在这里插入图片描述

总结

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

具体支持的文件如下: 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有