在VB6 處理pdf 和jpg檔案
最近做的一個專案需用將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) '釋放記憶體