1. 程式人生 > >在VB6 處理pdf 和jpg檔案

在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)                   '釋放記憶體