利用Minidx Extract-Text Com组件从Word,Xls,Pdf……等文件中读取文本内容 - 祥龙之子 - 博客园
来源:百度文库 编辑:神马文学网 时间:2024/05/01 17:13:39
利用MinidxExtract-Text Com组件从Word,Xls,Pdf……等文件中读取文本内容
By Minidxer | December 31, 2007
不少人对Google,Baidu等搜索引擎可以“找到”你放在服务器上的Word的Doc,Excel的xls以及Pdf等各种文件而感到惊叹不已,也有不少人发来邮件询问我Minidx文件管理器中从各种格式的文件中读取文本内容是如何实现的。Linux平台实现起来比较复杂一些,不过对于Windows用户来说,其实利用微软Ifilter的Indexingservice接口,可以比较容易的实现上面的功能。Minidx支持200多种文件格式,其实也是利用了Ifilter的接口。实现的基本原理,就是写一个Com组件,去查找系统中相应文件格式的API接口所在的Dll路径,然后调用抽取文本。
在上面的微软Ifilter中有关于IFilter的基本概念的介绍,这里不再重复,另外在codeproject的Using IFilter in C#中,可以找到C#的实现并且可以下载到源代码。因为性能上的考虑,Minidx文件管理器的这一部分完全利用C++实现,并封装为Com组件,下面主要是对如何通过调用这一Com组件在自己的程序中实现Doc,Xls,Pdf,msg等等文本阅读等功能作一些说明。
●Demo压缩包构造(压缩包可以从这里下载)
demo_vb.zip———–demo_vb.sln 整个解决方案(solution)文件
|———demo_vb.suo 用户配置文件
|———demo_vb—-bin——–Debug—-demo_vb.exe Debug版本目标文件
|———Release—demo_vb.exe Release版本目标文件
|—My Project(忽略)
|—obj 编译生成的临时文件
|—demo_vb.vbproj 工程文件
|—ExtractText.dll 文本抽取Com组件
|—Form1.Designer.vb Demo的GUI文件
|—Form1.resx 资源文件
|—Form1.vb Demo的源代码文件
|—run.bat Com组件注册命令
●执行Demo
①、双击run.bat执行,注册Com组件
②、双击demo_vb\bin\Release或者demo_vb\bin\Debug目录下的demo_vb.exe
③、点“File”,选择对象文件
④、选中文件,查看抽取文本结果。(下面分别是中日英Word的抽取结果)
注意:抽取文本对象文件需要有读写权限,正在编辑中的文件抽取文本时可能会出错。
●Demo代码说明
首先当然需要导入Dll组件,下面的代码很简单,也都有注释,应该不难理解,这里不再累述,有什么不明白或者有什么问题的话,可以提出来一起探讨,:)
1: '----------------------------- 2: ' desc: Extract text from selected file 3: '----------------------------- 4: Private Sub SelectFileDialog_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles SelectFileDialog.FileOk 5: On Error GoTo ErrH 6: 7: ' get selected full-path file name 8: Dim sFile As String = SelectFileDialog.FileName 9: 10: ' set file name 11: txtFilePath.Text = sFile 12: 13: ' set ExtractText module 14: Dim te As ExtractTextLib.TextExtractor = New ExtractTextLib.TextExtractor 15: Dim sText As String 16: sText = te.ExtractText(sFile, MAX_EXTRACT_TEXT_SIZE) 17: Err.Clear() 18: 19: 'Me.FileLength.Text = Len(sText).ToString() 20: Me.ExtractText.Text = sText 21: 22: Exit Sub 23: ErrH: 24: MsgBox("Error extracting text from '" & sFile & "' Err=" & Err.Number & "-" & Err.Description & " in " & Err.Source) 25: End Sub
工程的DLL和Demo源代码从这里下载,C/C++调用的Demo还在制作中,有兴趣的高手们也可以制作Php,Delphi,C#等各种语言调用的Demo以供分享~~,实际上原理是一样的。有什么问题可以直接在这里留言或者在Minidx帮助论坛发贴寻找帮助。该模块可用于任何商业和非商业的用途,如果你愿意的话,可以发一个邮件给我告诉我这一模块被用在了你的项目中,那么当你取得成功的时候,我也可以向我的朋友们吹嘘一下,当然这不是必需的,:)
By Minidxer | December 31, 2007
不少人对Google,Baidu等搜索引擎可以“找到”你放在服务器上的Word的Doc,Excel的xls以及Pdf等各种文件而感到惊叹不已,也有不少人发来邮件询问我Minidx文件管理器中从各种格式的文件中读取文本内容是如何实现的。Linux平台实现起来比较复杂一些,不过对于Windows用户来说,其实利用微软Ifilter的Indexingservice接口,可以比较容易的实现上面的功能。Minidx支持200多种文件格式,其实也是利用了Ifilter的接口。实现的基本原理,就是写一个Com组件,去查找系统中相应文件格式的API接口所在的Dll路径,然后调用抽取文本。
在上面的微软Ifilter中有关于IFilter的基本概念的介绍,这里不再重复,另外在codeproject的Using IFilter in C#中,可以找到C#的实现并且可以下载到源代码。因为性能上的考虑,Minidx文件管理器的这一部分完全利用C++实现,并封装为Com组件,下面主要是对如何通过调用这一Com组件在自己的程序中实现Doc,Xls,Pdf,msg等等文本阅读等功能作一些说明。
●Demo压缩包构造(压缩包可以从这里下载)
demo_vb.zip———–demo_vb.sln 整个解决方案(solution)文件
|———demo_vb.suo 用户配置文件
|———demo_vb—-bin——–Debug—-demo_vb.exe Debug版本目标文件
|———Release—demo_vb.exe Release版本目标文件
|—My Project(忽略)
|—obj 编译生成的临时文件
|—demo_vb.vbproj 工程文件
|—ExtractText.dll 文本抽取Com组件
|—Form1.Designer.vb Demo的GUI文件
|—Form1.resx 资源文件
|—Form1.vb Demo的源代码文件
|—run.bat Com组件注册命令
●执行Demo
①、双击run.bat执行,注册Com组件
②、双击demo_vb\bin\Release或者demo_vb\bin\Debug目录下的demo_vb.exe
③、点“File”,选择对象文件
④、选中文件,查看抽取文本结果。(下面分别是中日英Word的抽取结果)
注意:抽取文本对象文件需要有读写权限,正在编辑中的文件抽取文本时可能会出错。
●Demo代码说明
首先当然需要导入Dll组件,下面的代码很简单,也都有注释,应该不难理解,这里不再累述,有什么不明白或者有什么问题的话,可以提出来一起探讨,:)
1: '----------------------------- 2: ' desc: Extract text from selected file 3: '----------------------------- 4: Private Sub SelectFileDialog_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles SelectFileDialog.FileOk 5: On Error GoTo ErrH 6: 7: ' get selected full-path file name 8: Dim sFile As String = SelectFileDialog.FileName 9: 10: ' set file name 11: txtFilePath.Text = sFile 12: 13: ' set ExtractText module 14: Dim te As ExtractTextLib.TextExtractor = New ExtractTextLib.TextExtractor 15: Dim sText As String 16: sText = te.ExtractText(sFile, MAX_EXTRACT_TEXT_SIZE) 17: Err.Clear() 18: 19: 'Me.FileLength.Text = Len(sText).ToString() 20: Me.ExtractText.Text = sText 21: 22: Exit Sub 23: ErrH: 24: MsgBox("Error extracting text from '" & sFile & "' Err=" & Err.Number & "-" & Err.Description & " in " & Err.Source) 25: End Sub
工程的DLL和Demo源代码从这里下载,C/C++调用的Demo还在制作中,有兴趣的高手们也可以制作Php,Delphi,C#等各种语言调用的Demo以供分享~~,实际上原理是一样的。有什么问题可以直接在这里留言或者在Minidx帮助论坛发贴寻找帮助。该模块可用于任何商业和非商业的用途,如果你愿意的话,可以发一个邮件给我告诉我这一模块被用在了你的项目中,那么当你取得成功的时候,我也可以向我的朋友们吹嘘一下,当然这不是必需的,:)
利用Minidx Extract-Text Com组件从Word,Xls,Pdf……等文件中读取文本内容 - 祥龙之子 - 博客园
博客园 - 灵感之源的Smart Forge智能工厂 - 利用iTextSharp把DataTable导出为PDF和RTF(Rich Text Format)文件
我如何从文件读取文本,然后使用我刚读取的文本重命名该文件?
我如何从文件读取文本,然后使用我刚读取的文本重命名该文件?
中国Linux公社 -viewtopic-Servlet直接打开pdf、doc、xls等文件。
Office组件轻松把PDF文件转成Word文档
Office组件轻松把PDF文件转成Word
利用word将PDF转换DOC文件的方法 --电脑高手
利用word将PDF转换DOC文件的方法--
PDF转成WORD文件
PDF文件中利用金山词霸进行屏幕取词- -
Office组件实现PDF转Word
Word转换为pdf文件!
【解惑】深入jar包:从jar包中读取资源文件
3.5.1 从Hadoop URL中读取数据 - 51CTO.COM
COM 组件设计与应用(一) - cdo - 博客园
COM组件设计与应用(十二) - cdo - 博客园
COM组件设计与应用(十三) - cdo - 博客园
COM组件设计与应用(十五) - cdo - 博客园
如何把pdf文件转换成word?
Office把PDF文件转成Word文档
将Word文件转换为Pdf格式文件
Word转换为pdf文件cs
JR 精品文章 - 利用jdom实现读取数据库生成XML及读取XML文件插入数据库