vc6.0 实现 从pdf提取文本内容-尊龙官方平台

vc6.0 实现 从pdf提取文本内容

el/2024/3/25 15:37:47

本文摘录了vc6.0下,利用minidx extract-text com组件读取文本内容的方法的两篇文章,并做了一些自己的笔记


一、《利用minidx extract-text com组件从word,xls,pdf……等文件中读取文本内容》

      http://blog.minidx.com/2008/01/10/373.html

 

demo(vc )源代码从这里下载 (相关文档资料分类中的“doc,xls,pdf等文件中抽取文本的com组件及 demo(vc )源代码”)

●执行demo

①、双击run.bat执行,注册com组件

 

②、双击demo_vc/release或者demo_vc/debug目录下的demo_vc.exe

③、点“file”,选择对象文件(ex: 从demo_vc/test-data中选择)

④、选中文件,查看抽取文本结果。(下面分别是中日英word的抽取结果)

注意:抽取文本对象文件需要有读写权限,正在编辑中的文件抽取文本时可能会出错。

 

●实际调用方法:

①、复制下面三个文件到自己工程的相应目录下

・extracttext.dll
・extracttext.h
・extracttext_i.c

 

②、在需要的文件中用下面的代码引入

#include “extracttext.h”
#include “extracttext_i.c”

 

③、抽取文本部分代码:

1:  itextextractor *te = null;
   2:  // declare and hresult and a pointer to the simple_atl interface
   3:  hresult            hr;
   4:  
   5:  // now we will intilize com
   6:  hr = coinitialize(0);
   7:  bstr filename = ::sysallocstring(strfilename);
   8:  if(succeeded(hr))
   9:  {
  10:  hr = cocreateinstance( clsid_textextractor, null, clsctx_inproc_server,
  11:  iid_itextextractor, (void**) &te);
  12:  
  13:  hr = te->extracttext(filename, (long)lfilesize, &cval);  // 这是关键,仅用这一个函数即实现了文本的抽取,非常方便!
  14:  if( cval ) txt_extract_text.setwindowtext(cval);
  15:             
  16:  hr = te->release();
  17:  }
  18:  // uninitialize com
  19:  couninitialize();


当然,也可以通过getprocaddress的方式导入函数,函数的接口请参照extracttext.h,loadlibrary方式的使用方 法也很简单,有兴趣的可以自己做着试试看,这里不再重复说明了。同样的,有什么问题可以直接在这里留言或者在 minidx帮助论坛 发 贴寻找帮助。 该模块可用于任何商业和非商业的用途,如果你愿意的话,可以发一个邮件给我告诉我这一模块被用在了你的项目中,那么当你取 得成功的时候,我也可以向我的朋友们吹嘘一下,当然这不是必需的,:)

 

二、vc6.0 项目测试结果

下载的demo(vc )源代码包里面也没有编译好的可执行文件,而且是vs2005 编辑的,而我只安装了vc6.0。

因此自己创建一个vc6.0的项目来测试,按照上面的步骤编写代码。

效果图:

 

由于代码中的bstr是双字节字符,因此需要让vc6.0支持unicode,下面这篇文章解决了这个问题

 

三、《vc6创建unicode版windows程序》文件来源网络,作者未知

 

v6中开发可运行在不同语言系统的unicode程 序,大致步骤如下:

1、project -> settings -> c/c tab -> preprocessor definitions:中加入_unicode, unicode 。这里的_unicode和unicode的区别在于:_unicode用于windows头文件,unicode用于c运行时头文件。

 

2、将代码中的所有所有的 char 用tchar代替,所有char* 用lptstr代替。所有的win32字符串api用_tcs代替以前的str。比如strcpy 改成 _tcscpy,不过有的变化不是这样的。 另 外所有的字符串常量放到_t()里(或_text())里。

 

3、project -> settings -> link -> category:output -> entry-point symbol:中如果是exe执行文件添加 entry:wwinmaincrtstartup 程序入口,如果是dll添加:dllmaincrtstartup或什么也不添。

应用程序类型 进入点 c 运行库启动函数
ansi的gui程序 winmain winmaincrtstartup
unicode的gui程序 wwinmain wwinmaincrtstartup
ansi的cui程序 main maincrtstartup
unicode的cui程序 wmain wmaincrtstartup
cui是指控制台程序

我这里创建的是mfc对话框项目,第3步似乎可以省略


 

4、所过编译时提示缺少 mfc42ud.dll 等文件时,可以去安装文件中找到这些文件复制到vc的安装目录 /vc98/mfc/lib下即可。

依照上面四步做完以后,你就可以开发一个unicode 程序了。如果想生成一个ascii的程序,只需将第一步骤中的_unicode, unicode去掉即可。编译器会根据是否有此声明来编译相对的程序文件。

的确少了 mfc42ud,到vc6.0光盘目录下搜索之,将mfc42ud.lib复制到

vc安装目录 d:/program files/microsoft visual studio/vc98/lib

同时将mfc42ud.dll复制到项的debug目录下。


此外还缺少mfco42ud,类似地将mfco42ud.lib复制到vc98/lib,将mfco42ud.dll复制到项目debug目录


--------------------------------------------------------------------------------------------------------------------

使用ansi/unicode通用数据类型

  微软提供了一些ansi和unicode兼容的通用数据类型,我们最常用的数据类型有_t ,tchar,lptstr,lpctstr。
  顺便说一下,lpctstr和const tchar*是完全等同的。其中l表示long指针,这是为了兼容windows 3.1等16位操作系统遗留下来的,在win32 中以及其它的32位操作系统中,long指针和near指针及far修饰符都是为了兼容的作用,没有实际意义。p(pointer)表示这是一个指针;c (const)表示是一个常量;t(_t宏)表示兼容ansi和unicode,str(string)表示这个变量是一个字符串。综上可以看出, lpctstr表示一个指向常固定地址的可以根据一些宏定义改变语义的字符串。比如:

tchar* sztext=_t(“hello!”);tchar sztext[]=_t(“i love you”);lpctstr lpsztext=_t(“大家好!”);使用函数中的参数最好也要有变化,比如:messagebox(_t(“你好”));

  其实,在上面的语句中,即使您不加_t宏,messagebox函数也会自动把“你好”字符串进行强制转换。但我还是推荐您使用_t宏,以表示 您有unicode编码 意识。

 

4、修改字符串运算问题

  一些字符串操作函数需要获取字符串的字符数(sizeof(szbuffer)/sizeof(tchar)),而另一些函数可能需要获取字符 串的字节数sizeof(szbuffer)。您应该注意该问题并仔细分析字符串操作函数,以确定能够得到正确的结果。
ansi操作函数以str开头,如strcpy(),strcat(),strlen();
unicode操作函数以wcs开头,如wcscpy,wcscpy(),wcslen();
ansi/unicode操作函数以_tcs开头 _tcscpy(c运行期库);
ansi/unicode操作函数以lstr开头 lstrcpy(windows函数);
考虑ansi和unicode的兼容,我们需要使用以_tcs开头或lstr开头的通用字符串操作函数。

 

 

 

 


http://www.ngui.cc/el/5126764.html

相关文章

ahk 切换/获取当前的输入法

用ahk代码实现输入法的切换,和获取当前的输入法,这只是一个示例,你可以发挥把它做成更有用的程序,例如对指定的窗口使用指定的输入法,可以为 每个输入法设置一个单独的快捷键等。不过有个 bug,当输入法切换…

让虚拟机可以无线上网而主机不能上网

我的要求比较变态,希望笔记本(主机)不能上网,而虚拟机客户机可以无线上网。这是因为自从用过华硕那 款可以8秒启动系统的上网本之后,就越来越对预装了vista操作系统的hp笔记本的速度,无法容忍!多…

设置 vim 自动缩进

我用vim编辑autohotkey脚本,写脚本也算写程序吧,但是发现不能自动缩进,于是寻找自动缩进的设置方法,找到如下: 在ahk的语法文件vim/vim72/syntax/autohotkey.vim中添加这行代码即可: set autoindent …

使用autohotkey分析日志文件,得到分析报告。

使用 autohotkey 分析日志文件,得到分析报告。 由程序自动生成的日志文件一般有固定的格式,而且文件大小通常比较大。当需要分析这样的日志文件,需要用肉眼在成千上万条记录里面寻找异常,那将是大海捞针,十分费力费时…

vc6、 bcb6 如何设置程序版本号?

今天突然忘记如何设置程序的版本号了,问过同事才记起来,于是把它记录下来,方便以后查阅! 一、 vc 设置版本号的方法: 在 vc 的资源窗口里有个 vs_version_info 的资源,在这个资源里可以修改版本号信…

去掉vim中的换行符^m

在 dos/windows 里, 文本文件的换行符为 /r/n ,而在*nix 系统里则为/n ,所以 dos/windows 里编辑过的文本文件到了 *nix 里,每一行都多了个 ^m 。在window 操作系统下使用gvim打开一些文本文件也经常遇到行末有^m的符号&…

autohotkey辅助生成doxygen风格的注释

遵守doxygen 注释规范,可以使代码注释更加完善的同时,还能自动生成帮助文档。但在初次接触它时,隐约之中对它会有些担心,总担心要去记忆注释的格式,担心要用的时候老忘记格式,从而要经常去翻阅它的帮助文档…

用 autohotkey分析日志文件得到耗时最大的记录

用 autohotkey分析日志文件得到耗时最大的记录 现在有上百个日志文件如 log20100621.txt,每个文件几万条记录,记录示例: [开始发布时间:2010-06-21 09:04:25][发布最终页1个,耗费1: 2秒][刷新列表页1个,耗费2: 3秒][总共耗费:6秒] 现在…

向程序员推荐autohotkey

已经使用autohotkey两三年了,它是 windows操作系统下的脚本工具,程序员使用它,可以大大优化操作、辅助编写代码、帮助分析文件、节省大量时间。而对于程序员而言,写 autohotkey脚本是轻而易举的事情,因此在这里向程序员…

“飞扬小字典” -- 辅助记忆的小工具

关于飞扬小字典 v2.13  飞扬小字典,致力于打造一个辅助记忆的小工具,  要求能够极速地记录和搜索零碎的文本片段,追求速度!    其特点如下:  1、一个快捷键瞬间启动,esc立刻退出(快到不会…
网站地图