在VB6 处理pdf 和jpg文件

2/10/2017来源:ASP.NET技巧人气:1081

最近做的一个项目需用将pdf文件页面输出成jpg图片文件,再对这些输出的jpg页面进行裁剪操作。

因为VB6比较旧了,很多主流的插件没有vb6可用的api或者示例代码,网上找了很久,总结一下VB6可行的方案:

一、处理pdf文件

1.Apache PDFBox

PDFBox 是一个使用java编写的开源的PDF文档处理库 可以在这里下载: http://pdfbox.apache.org/

因为是使用Java编写的,所以使用前需要安装jre 程序支持命令行,在VB中具体调用方式是以shell()命令调用,例如:

shell ("java -jar pdfbox-app-2.0.4.jar PDFToImage -imageType jpg C:\1.pdf")

上面命令将一个pdf文件的所有页面输出成jpg图片,还有许多其他命令可以用,具体参考: http://pdfbox.apache.org/2.0/commandline.html

PDFBox有一个较大的不足是处理速度较慢

2.Debenu Quick PDF Library

Debenu目前已经被国内的Foxit福晰收购了,是一个商业软件,使用需要付费,不过网上可以找到注册码。 下载后需要ActiveX的quickpdf.dll和quickpdf.tlb两个文件,使用前可以先用系统自带的Regsvr32注册quickpdf.dll,也可以不,如果在其他电脑上运行出错时则需要注册。

菜单栏-工程-引用,选择浏览,选中quickpdf.tlb后即在工程中引用了这个库了: 引用

接下来,可以按F2查看这个库中可以调用的对象,完整的开发文档在这里: http://www.debenu.com/PRoducts/development/debenu-pdf-library/help/developer-guide/

接下来是进入实际开发环节,由于是商业软件,首先需要输入注册信息:

Dim pb As New DebenuPDFLibraryAX1016.PDFLibrary Dim RegStatus As Integer RegStatus = pb.UnlockKey("j87ig3k84fb9eq9dy34z7u66y") Print RegStatus

调用后如果返回RegStatus为1,则表明注册成功

将PDF页面转换成图片文件:

QP.LoadFromFile("sample.pdf", "") '第一步将文件载入内存 iNumPages = QP.PageCount() '获取pdf文件的页数 QP.RenderDocumentToFile(100, 1, iNumPages, 0, "image.bmp") '转换

其他命令请参考开发文档

二、处理jpg图像文件

网上给出的解决方案有二:使用GDI+;调用Intel JPEG lib。这里介绍另一种开源的解决方案FreeImage,支持jpg、png、bmp等多种图像处理,可以在这里下载dll和开发文档: http://freeimage.sourceforge.net/download.html

需要的文件是压缩包里的FreeImage.dll和modFreeImage.bas,将两个文件放到程序目录下。

新建一个工程,将modFreeImage.bas作为模块添加,这样就可以调用dll了。

对图片进行重采样:

Dim dib As Long Dim dib2 As Long dib = FreeImage_LoadU(FIF_JPEG, "jpgfile.jpg",0) '将图片载入内存 dib2 = FreeImage_Rescale(dib, 1280, 800, FILTER_BOX) '重采样 Call FreeImage_SaveU(FIF_JPEG, dib2, "tgfile.jpg",0) '保存文件 FreeImage_Unload(dib) '释放内存