最近做的一個(gè)項(xiàng)目需用將pdf文件頁(yè)面輸出成jpg圖片文件,再對(duì)這些輸出的jpg頁(yè)面進(jìn)行裁剪操作。
因?yàn)閂B6比較舊了,很多主流的插件沒(méi)有vb6可用的api或者示例代碼,網(wǎng)上找了很久,總結(jié)一下VB6可行的方案:
PDFBox 是一個(gè)使用java編寫的開源的PDF文檔處理庫(kù) 可以在這里下載: http://pdfbox.apache.org/
因?yàn)槭鞘褂肑ava編寫的,所以使用前需要安裝jre 程序支持命令行,在VB中具體調(diào)用方式是以shell()命令調(diào)用,例如:
shell ("java -jar pdfbox-app-2.0.4.jar PDFToImage -imageType jpg C:/1.pdf")上面命令將一個(gè)pdf文件的所有頁(yè)面輸出成jpg圖片,還有許多其他命令可以用,具體參考: http://pdfbox.apache.org/2.0/commandline.html
PDFBox有一個(gè)較大的不足是處理速度較慢
Debenu目前已經(jīng)被國(guó)內(nèi)的Foxit福晰收購(gòu)了,是一個(gè)商業(yè)軟件,使用需要付費(fèi),不過(guò)網(wǎng)上可以找到注冊(cè)碼。 下載后需要ActiveX的quickpdf.dll和quickpdf.tlb兩個(gè)文件,使用前可以先用系統(tǒng)自帶的Regsvr32注冊(cè)quickpdf.dll,也可以不,如果在其他電腦上運(yùn)行出錯(cuò)時(shí)則需要注冊(cè)。
菜單欄-工程-引用,選擇瀏覽,選中quickpdf.tlb后即在工程中引用了這個(gè)庫(kù)了:
接下來(lái),可以按F2查看這個(gè)庫(kù)中可以調(diào)用的對(duì)象,完整的開發(fā)文檔在這里: http://www.debenu.com/PRoducts/development/debenu-pdf-library/help/developer-guide/
接下來(lái)是進(jìn)入實(shí)際開發(fā)環(huán)節(jié),由于是商業(yè)軟件,首先需要輸入注冊(cè)信息:
Dim pb As New DebenuPDFLibraryAX1016.PDFLibraryDim RegStatus As IntegerRegStatus = pb.UnlockKey("j87ig3k84fb9eq9dy34z7u66y")Print RegStatus調(diào)用后如果返回RegStatus為1,則表明注冊(cè)成功
將PDF頁(yè)面轉(zhuǎn)換成圖片文件:
QP.LoadFromFile("sample.pdf", "") '第一步將文件載入內(nèi)存iNumPages = QP.PageCount() '獲取pdf文件的頁(yè)數(shù)QP.RenderDocumentToFile(100, 1, iNumPages, 0, "image.bmp") '轉(zhuǎn)換其他命令請(qǐng)參考開發(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,將兩個(gè)文件放到程序目錄下。
新建一個(gè)工程,將modFreeImage.bas作為模塊添加,這樣就可以調(diào)用dll了。
對(duì)圖片進(jìn)行重采樣:
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)存新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注