最近做的一個項目需用將pdf文件頁面輸出成jpg圖片文件,再對這些輸出的jpg頁面進行裁剪操作。
因為VB6比較舊了,很多主流的插件沒有vb6可用的api或者示例代碼,網上找了很久,總結一下VB6可行的方案:
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有一個較大的不足是處理速度較慢
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.PDFLibraryDim RegStatus As IntegerRegStatus = pb.UnlockKey("j87ig3k84fb9eq9dy34z7u66y")Print RegStatus調用后如果返回RegStatus為1,則表明注冊成功
將PDF頁面轉換成圖片文件:
QP.LoadFromFile("sample.pdf", "") '第一步將文件載入內存iNumPages = QP.PageCount() '獲取pdf文件的頁數QP.RenderDocumentToFile(100, 1, iNumPages, 0, "image.bmp") '轉換其他命令請參考開發文檔
網上給出的解決方案有二:使用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 LongDim dib2 As Longdib = 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) '釋放內存新聞熱點
疑難解答