剛才有朋友問我,如何將pdf的某一頁導成圖片,我想起來之前有弄過mupdf提供的示例就有這功能。
mupdf是一個開源的讀取pdf文件的工具,我也一直用這個即簡潔又靈巧的東西閱讀PDF文檔,電腦上沒有安裝Adobe Reader及Acrobat系列,也沒有安裝Foxit系列的PDF閱讀器,因為mupdf總是可以滿足我的需求了,而我的需求也確實並不高,而且mupdf有類似於vi的按鍵操作,'j','k','l','h',',','.', g 用來轉到指定頁面,147g則轉到第147頁。灰常好用。
下面是編譯一下mupdf的例子,由於他使用的是win系統,所以以下是在win上的vs2008的編譯步驟。
下載地址:www.mupdf.com
我下載的版本是:mupdf-1.3-source.tar.gz
目錄構成:
解壓縮以后發現有個platform目錄,下面有win32目錄,打開里面的mupdf.sln
1. 編譯出來mupdf工程,會有生成的三個庫文件:
libmupdf.lib
libmupdf-js-none.lib
libthirdparty.lib
2. 新建一個win32控制台空工程,叫做test
3. 將example.c拷貝到工程目錄下,
並加到test工程中
4. 修改test工程的屬性,在C/C++選項卡中將
Additional Include Directories中加上
mupdf的include的目錄,比如,我的是:
.;..\..\..\include;
5. 在Linker的Input選項卡中將
Ignore Specific Library(忽略的庫)
加上libcmtd.lib,(release是:libcmt.lib)
6. 在example.c的開頭加上庫的鏈接,比如我加的是:
#ifdef _DEBUG
#pragma comment(lib, "..\\debug\\libmupdf.lib")
#pragma comment(lib, "..\\debug\\libmupdf-js-none.lib")
#pragma comment(lib, "..\\debug\\libthirdparty.lib")
#else
#pragma comment(lib, "..\\release\\libmupdf.lib")
#pragma comment(lib, "..\\release\\libmupdf-js-none.lib")
#pragma comment(lib, "..\\release\\libthirdparty.lib")
#endif
7. 由於example.c 是個c文件,變量的定義必須都放在開頭。
將以下四的聲明放在render函數的開頭
fz_rect bounds;
fz_irect bbox;
fz_pixmap *pix = NULL;
fz_device *dev = NULL;
8. 編譯test工程,生成test.exe文件
在命令行中執行:
test d:\\temp\\unix2.pdf 147
9. 在test.exe所在的目錄會生成out.png
還可以生成大圖,只要將命令行寫成
test d:\\temp\\unix2.pdf 147 200
就是縮放比例為200%的圖了。
清晰了許多。
