前有许多在线转档工具可以解决使用者的格式转换需求,共通性是通过浏览器开启网站即可进行转换,无需额外下载、安装软件或工具,因为这些服务多半将文件上传远程服务器进行处理,即使是移动设备也能正常执行,例如 Convertr 就整合音讯、影片和其他文件格式的在线转档:
本文要介绍的「cdkm」是一个免费在线转档工具,号称次世代转换器、整合许多开放原始码项目建构而成,支持各种常见常用文件类型,包括文件、电子书、图片、影片、音乐或是一些比较少用的格式,不过要注意的是 cdkm 每次转换最多只能上传 10 个文件(如果有开启广告阻挡器就无法使用批次转换功能)。
cdkm 可转档的文件文件最大 40 MB,其他格式文件最大 200 MB,虽然转换速度快,若遇到文件过大就有很大的机会无法成功转换。
cdkm 支持以下格式(完整列表):
转换后文件可直接下载或是产生分享链接,提供给其他人下载、使用,有些文件格式还能直接在浏览器进行预览,如果临时需要转档、但手边又没有合适的转档工具就可以试试看。
网站链接:https://cdkm.com/
使用教学
开启 cdkm 网站后点选「Choose Files」选择要转换的源文件或选择「remote file URL」以远程文件链接方式输入文件进行转换。
cdkm 不会自动选择可转换的格式,使用者需要从右侧的「Target Format」目标格式选择要转换的文件新格式,依照不同类型分类更容易寻找。
选好后点选最右边的红色按钮「Start Convertsion」开始转换,转换时需要一段时间将文件上传到远程服务器,完成后结果文件就会显示在下方的 Output Files 字段,点选后方「Download」按钮就能将转换后的文件下载保存。
有些文件还可以直接在线预览,如果要复制下载链接可点选「Copy to clipboard」就能将文件网址复制到剪贴簿。
值得一试的三个理由:
是编程乐趣,一个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。
如上图所示,该项目对各种文件格式进行底层封装,我们只需专注业务的开发,不需要了解底层细节。
1、跨平台:基于.Net Standard 2.0开发,支持Windows、Liunx、Mac。
通过项目引入的包,我们可以清晰的看到,该项目实际上是针对不同文件格式,通过引用第三方包进行统一封装,比如使用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
我是编程乐趣,一个10年.Net开发经验老程序员,专注开源项目和编程知识分享。
私信回复:【888】,领取.Net视频教程。
- End -
推荐阅读
一个简单、功能完整的WMS仓库管理系统
年度盘点10个最受欢迎的.Net开源项目
一个强大、支持100多种格式.Net图片操作库
一个.Net简单、易用的配置文件操作库
基于.NetCore,前端Layui、React、Vue且前后端分离快速开发框架
家工作、学习时间长了,各类文档也多了,如何快速文档中的某个特定字词、语句呢?
Windows 10自带的索引无法搜索文本中的文字,那么有没有好用的免费工具,可以帮助老师们解决这个难题呢?
胖胖老师推荐给大家一款GitHub上免费开源的小工具——AnyTXT Searcher。
官网地址:anytxt.net
AnyTXT Searcher是功能强大的本地数据全文搜索引擎,就像本地磁盘Google搜索引擎一样。它是您理想的桌面内容搜索工具。
AnyTXT Searcher内置了功能强大的文档解析引擎,该引擎无需安装任何其他软件即可提取常用文档的文本,并且结合了内置的高速索引系统来存储文本的元数据。
您可以使用AnyTXT Searcher快速找到计算机上存在的任何单词。
它可以在Windows 10、8、7,Vista,XP,2008、2012、2016等操作系统上完美运行。
支持的格式
特色功能
软件下载安装,选择“中文”安装,安装后就会是中文界面。
点击“工具”-“文件索引管理器”,可以自定义搜索文件类型和目录,默认排除C:\windows系统根目录搜索。
第一次使用会自动生成索引文件,只要在搜索栏输入想要查找的单词或是短语就可以轻松找到。亲测SSD上搜索文件中有“智慧教育”文本的文件只有0.093秒,找到了全部的177个文件。
当然,我们还可以点击右上角的“分类显示”按钮,实现文档类型的精准定位。
此外,软件还能支持简单的文件复制移动的管理操作。
之前胖胖老师也使用过谷歌桌面搜索、everything等软件来搜索文本,不过如果只是临时应急查找的话,推荐试试AnyTXT Searcher,简单方便,还是免费的。
胖胖老师给大家准备了网盘下载地址,私信回复“文本”即可获得。
*请认真填写需求信息,我们会在24小时内与您取得联系。