最近做的一個項目需用將pdf文件頁面輸出成jpg圖片文件,再對這些輸出的jpg頁面進行裁剪操作。
因為VB6比較舊了,很多主流的插件沒有vb6可用的api或者示例代碼,網(wǎng)上找了很久,總結(jié)一下VB6可行的方案:
PDFBox 是一個使用java編寫的開源的PDF文檔處理庫 可以在這里下載: http://pdfbox.apache.org/
因為是使用Java編寫的,所以使用前需要安裝jre 程序支持命令行,在VB中具體調(diào)用方式是以shell()命令調(diào)用,例如:
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有一個較大的不足是處理速度較慢
Debenu目前已經(jīng)被國內(nèi)的Foxit福晰收購了,是一個商業(yè)軟件,使用需要付費,不過網(wǎng)上可以找到注冊碼。 下載后需要ActiveX的quickpdf.dll和quickpdf.tlb兩個文件,使用前可以先用系統(tǒng)自帶的Regsvr32注冊quickpdf.dll,也可以不,如果在其他電腦上運行出錯時則需要注冊。
菜單欄-工程-引用,選擇瀏覽,選中quickpdf.tlb后即在工程中引用了這個庫了:
接下來,可以按F2查看這個庫中可以調(diào)用的對象,完整的開發(fā)文檔在這里: http://www.debenu.com/PRoducts/development/debenu-pdf-library/help/developer-guide/
接下來是進入實際開發(fā)環(huán)節(jié),由于是商業(yè)軟件,首先需要輸入注冊信息:
Dim pb As New DebenuPDFLibraryAX1016.PDFLibraryDim RegStatus As IntegerRegStatus = pb.UnlockKey("j87ig3k84fb9eq9dy34z7u66y")Print RegStatus調(diào)用后如果返回RegStatus為1,則表明注冊成功
將PDF頁面轉(zhuǎn)換成圖片文件:
QP.LoadFromFile("sample.pdf", "") '第一步將文件載入內(nèi)存iNumPages = QP.PageCount() '獲取pdf文件的頁數(shù)QP.RenderDocumentToFile(100, 1, iNumPages, 0, "image.bmp") '轉(zhuǎn)換其他命令請參考開發(fā)文檔
網(wǎng)上給出的解決方案有二:使用GDI+;調(diào)用Intel JPEG lib。這里介紹另一種開源的解決方案FreeImage,支持jpg、png、bmp等多種圖像處理,可以在這里下載dll和開發(fā)文檔: http://freeimage.sourceforge.net/download.html
需要的文件是壓縮包里的FreeImage.dll和modFreeImage.bas,將兩個文件放到程序目錄下。
新建一個工程,將modFreeImage.bas作為模塊添加,這樣就可以調(diào)用dll了。
對圖片進行重采樣:
Dim dib As LongDim dib2 As Longdib = FreeImage_LoadU(FIF_JPEG, "jpgfile.jpg",0) '將圖片載入內(nèi)存dib2 = FreeImage_Rescale(dib, 1280, 800, FILTER_BOX) '重采樣Call FreeImage_SaveU(FIF_JPEG, dib2, "tgfile.jpg",0) '保存文件FreeImage_Unload(dib) '釋放內(nèi)存新聞熱點
疑難解答