天天看點

基于pdfium擷取pdf目錄

具體代碼參照http://download.csdn.net/detail/u011569253/9729619

說明:本人是基于pdfium源碼 及其例子工程修改的。同時也參照了一些其他人的相關代碼,彙總而得到的。由于前一陣公司需要擷取pdf檔案的目錄資訊。我在網上找了很多工程,什麼pdfbookmark等 很多工具。首先大部分是收費軟體。就拿pdfbookmark來說吧 他是通過指令行導出一個xml。但是如果遇到中文目錄則會亂碼。而且在轉碼的時候不容易轉。對再次讀入xml影響很大。是以我都放棄了這些軟體。打算着手找一個開源的pdf庫。最後确定在pdfium庫了。pdfium庫在網上例子很少。隻有一些如何安裝的相關資訊。還有一個pdfium内帶的例子,但是例子隻是實作如何把pdf畫出來的解析内容。沒有如何擷取pdf目錄相關内容。之後再pdf接口中找到了FPDFBookmark_Find、FPDFBookmark_GetDest等相關接口,但是這都不是擷取bookmark相關資訊内容。之後在網上找到了FPDFBookmark_Collect函數。這個函數就是具體目錄信通過一個結構體來儲存資訊,結構體具體資訊我都标注了。

struct FPDF_BOOKMARKNODE {

char *title;//目錄名稱

wchar_t *wtitle;//寬位元組的目錄名稱

int page;//頁數

FPDF_BOOKMARKNODE *firstChild;//用來儲存第一個子節點

FPDF_BOOKMARKNODE *nextSibling;//用來儲存同級目錄下一個節點

};

FPDFBookmark_Collect這個函數調用需要在建立FPDFAvail_IsPageAvail調用這個函數之後 在使用。因為查找頁數的時候需要比對,m_PageList的設定值就在上面函數裡。同時還需要注意的是如果pfd的跳轉頁是Action跳轉。而不是具體頁數,那麼這個函數将無法擷取到pdf頁數。這時候就需要通過CPDF_Action這個類來擷取具體頁數。希望能對大家有所幫助。