XPDF 心得 windows下的mfc应用和非mfc

  XPDF是一个免费开源的软件,用于显示PDF文件,应用起来有些难度

xpdf现在官网的最新版本为xpdf3.02,20101026查询


前面有一篇文章,介绍了xpdf的编译,我就不废话了,编译好了以后生成的几个exe文件,其实对于开发者来说作用很小,因为我们是developer,下面我就来说说xpdf如何应用到windows


首先先编译xpdf,如果没有编译成功,请看前面的文章 xpdf的编译

编译成功后,在xpdf3.02/xpdf里有几个exe文件,其中pdftoppm.exe最复杂,pdftoppm.exe一定要有
因为这证明我们下面所用的库,你已经全部具备了

应用于非mfc,也就是如控制台等简单win32程序


1,

看ms_make.bat文件,这个文件是从官网下载来的,解压后在xpdf3.02文件夹里,我挑一个最难生成的exe

请看此句

%CXX% %LINKFLAGS% /Fepdftoppm.exe Annot.obj Array.obj BuiltinFont.obj BuiltinFontTables.obj Catalog.obj CharCodeToUnicode.obj CMap.obj Decrypt.obj Dict.obj Error.obj FontEncodingTables.obj Function.obj Gfx.obj GfxFont.obj GfxState.obj GlobalParams.obj JArithmeticDecoder.obj JBIG2Stream.obj JPXStream.obj Lexer.obj Link.obj NameToCharCode.obj Object.obj Outline.obj OutputDev.obj Page.obj Parser.obj PDFDoc.obj PDFDocEncoding.obj PSTokenizer.obj SecurityHandler.obj SplashOutputDev.obj Stream.obj UnicodeMap.obj UnicodeTypeTable.obj XRef.obj pdftoppm.obj ..\splash\splash.lib ..\fofi\fofi.lib ..\goo\Goo.lib %FT2DIR%\freetype2.lib shell32.lib user32.lib gdi32.lib advapi32.lib

这个句子应该在ms_make.bat最后面了,用于生成 pdftoppm.exe文件

发现这个exe用到了很多的obj和lib,obj一查找都在xpdf-3.02\xpdf下面,而那些lib都在其他文件夹
如goo.lib在xpdf-3.02\goo下面,依次查找即可,至于shell32.lib user32.lib gdi32.lib advapi32.lib,应该都是windows的不用找.
现在我们知道了,这个pdftoppm.exe包含了什么,下面就该创建工程了

2,

我用的的XP+vs2008(VC9) 的环境
向导建个控制台程序

把字符集设置多字节,预编译头取消,然后再link里把那些lib ..\splash\splash.lib ..\fofi\fofi.lib ..\goo\Goo.lib %FT2DIR%\freetype2.lib shell32.lib user32.lib gdi32.lib advapi32.lib包含进来,一定要注意路径

在c++里的附加目录设置好,要不然找不到.h文件

3,

把xpdf文件夹下的.h和.c添加进来,通过project->add exist items,包含所需要的.h.cc文件(根据obj),把pdftoppm.cc里的内容除了main之外的内容,都考到你自己所创建的main中,在把pdftoppm.cc的main函数的内容,拷贝到你自己的main里面

4,

编译生成出的exe就是pdftoppm.exe


如果应用于非mfc成功,请看应用于mfc

第一步,根据前面的第二条设置,只不过向导不创建控制台,而创建单文档程序
设置好后

第二步,把前面第三条的xpdf文件夹下包含所需要的.h.cc文件(根据obj)

,编译发现编译不成功,主要是Cmap引起的,如果还包含其他错误,看看是哪个文件报错,pdftoppm.exe有没有包含这个obj,没有的话remove掉他,直到只剩下cmap错误

第三步,cmap错误是重定义错误,取消微软的cmap定义



第四步,参考poppler库,可以参考perf-test-preview-win.cc和perf-test.cc,里面也有main函数

把其中的某些类提取出来生成.h.cpp,添加到自己的工程中
主要是splashbitmaptoHBitmap方法等方法

第五步,编译

hbitmap就可以显示在view中了

这个只是我用到XPDF的总结,可能说得有些模糊,比如第三步,第四步,

第三步需要上网查查,我的方法是直接把mfc自带的cmap给改了

第四步中的poppler库,可以参考 http://poppler.freedesktop.org/

这个库也是开源的,他把xpdf扩充了很多功能,也很强大

后面就没什么难点了
 
我自己写的ocx,可应用于CS/BS,可以试用一下
http://download.csdn.net/source/2775232

ocx1.1版基于XPDF
http://download.csdn.net/source/2790019

源码我放在

http://item.taobao.com/auction/item_detail.htm?item_num_id=9210657397

我会一直更新ocx,把XPDF的功能,全部发挥出来

 

如果觉得显示效果不好或者想更深入了解,也可看看我的MuPDF文章我的Poppler文章也许会有所帮助

xpdf ocx介绍
1,显示本地PDF文件;
2,得到PDF总页码;
3,设置视野大小;
4,工具栏界面设置;
5,当前显示的页码;
6,有使用说明;
7,只要机器安装vs2008,就可进行完全编译,配置环境非常简单,最多2步;
8,有cab包;
9,源码存在试用期,自己注释掉即可; 增加项:
10,输入pdf的URL网址,显示PDF,客户机没有任何痕迹;
11,增加当前显示PDF另存为功能;
12,SavePdfToPicFile,保存PDF当前页为任意图片;
13,GetPdfCurPageText根据显示的当前页面,返回显示当前页面的所有文字信息,此返回值也拷到剪切板一份,支持中文;
14,GetPdfCurPageTextRect根据显示当前页面的画框,返回画框区域内的文字信息,此返回值也拷到剪切板一份,需要SetPdfViewDrawRect开启画框取字功能 ,支持中文;
15,PrintPdfPage 增加打印功能; 修正上一版的支持中文问题
16,支持导出微软mdi格式
17,支持导出微软xps格式

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值