1. 程式人生 > >PDFium-PDF開源之旅(2)——執行除錯pdfium自帶的測試程式

PDFium-PDF開源之旅(2)——執行除錯pdfium自帶的測試程式

PDFium-PDF開源之旅(2)

——執行除錯PDFium自帶的測試程式

趁熱打鐵週末,總算有時間繼續啦。廢話少說,切入正題.

編譯執行pdfium_test.exe

下載程式碼之後,原想直接寫個Demo,認真看了工程,PDFium是有自帶一個測試程式的,叫pdfium_test.如圖:

編譯這個工程,執行,除錯,就可以一睹PDFium真面目了。執行Demo提示命令列引數格式:

 

來個最簡單的,放了一個PDF檔案到如下目錄: ”E:\project\code\openpdf\test.pdf“

輸入引數如下:

pdfium_test.exe ”E:\project\code\openpdf\test.pdf“

輸出如下圖:

 

看起來這個測試程式,沒有輸出介面,只是把PDF的解析,顯示跑了一遍。不過這個足以讓你很容易的入手,探探PDF解析的真面目,弄個斷點一步一步除錯,跑一遍,基本就瞭解啦。(這個後面有時間我再另外寫文章吧)

如何使用pdfium

通過除錯pdfium_test.cc可以讓你很清晰的知道,如何使用pdfium的庫的使用了。

這裡我簡單說下呼叫的步驟:

首先就是庫的初始化:

FPDF_InitLibrary(NULL);

接下來就是設定一個handle用於獲取PDF 檔案中是否包含pdfium不支援的物件的資訊。

FSDK_SetUnSpObjProcessHandler(&unsuppored_info);

然後就開始對PDF進行操作了:具體看 RenderPdf()這個函式,這裡實現的功能我羅列下:

1. 載入文件 非同步/非非同步方式載入文件 :LoadCustomDocument

2. 填表功能 FPDFDOC_InitFormFillEnviroument

3. 頁面載入 FPDF_LoadPage

4. 文字載入 FPDFText_LoadPage

5. 頁面渲染FPDF_RenderPageBitmap,表單渲染:FPDF_FFLDraw

 一句句解釋太累,直接去看程式碼吧。

接下來就是各種handle釋放:

  FPDFBitmap_Destroy(bitmap);

    FORM_DoPageAAction(page, form,FPDFPAGE_AACTION_CLOSE);

    FORM_OnBeforeClosePage(page, form);

    FPDFText_ClosePage(text_page);

    FPDF_ClosePage(page);

  }

  FORM_DoDocumentAAction(form,FPDFDOC_AACTION_WC);

  FPDFDOC_ExitFormFillEnviroument(form);

  FPDF_CloseDocument(doc);

  FPDFAvail_Destroy(pdf_avail);

 

最後就是庫的釋放:

FPDF_DestroyLibrary();

好了,就到這裡吧,pdfium_test還是比較簡單的,看程式碼基本就一目瞭然了。下一篇打算自己寫一個Demo跑跑pdfium.

原創作品,轉載請註明出處。

相關推薦

PDFium-PDF開源(2)——執行除錯pdfium測試程式

PDFium-PDF開源之旅(2) ——執行除錯PDFium自帶的測試程式 趁熱打鐵週末,總算有時間繼續啦。廢話少說,切入正題. 編譯執行pdfium_test.exe 下載程式碼之後,原想直接寫個Demo,認真看了工程,PDFium是有自帶一個測試程式的,叫pdfium_

PDFium-PDF開源(1)-初探程式碼下載編譯

近日,Google和Foxit合作開源了Foxit的PDF原始碼。叫PDFium 相關新聞不少,哈,雖說已經不是程式設計師了,不過還是有興趣跑起來圍觀看看。廢話少說,先說編譯程式碼的步驟(其實Google的網站上都有,純屬翻譯): 環境準備: 1.  我安裝的環境是vs2

微軟與Node.js的開源

支持 全球 tro 更多 工具和平臺 .cn 我們 images tell 微軟近年來在開源領域可謂是大刀闊斧的前進中,繼2015年微軟與紅帽合作,微軟智能雲Azure與Linux進一步融合等舉措之後,2016年,微軟繼續加大開源之舉,大力推進Node.js的開發和開源社區

java學習-2

通過 operator 表達 加減 class sta println 就是 方法 最近看了一些java的,可是很多都和C的一樣,比如++,--的前置和後置,簡單的四則運算(加減乗除)也沒什麽說的,還有三目(三元)運算符“?”的使用方法也是和C的用法一樣。不過在學習三目運算

父與子的程式設計2——easygui

1、要用EasyGui顯示一個訊息框,可以使用msgbox(),如下:   easygui.msgbox("This is the answer!") 2、要用EasyGui得到一個字串輸入,要用enterbox,如下:   easygui = easygui.enterbox("What is you

Android複習--子執行緒更新UI

Android4.0版本後耗時的操作(比如請求網路,下載檔案等)不能在UI主執行緒執行,而且子執行緒也不能直接更新UI介面。而現實的場景確是子執行緒在下載檔案的同時UI介面能顯示相應的進度資訊,既然有了需求,那肯定就會有解決方案。 Android提供了Handler訊息機制和Asyn

python學習2(函式進階)

目錄  楔子  名稱空間和作用域  函式巢狀及作用域鏈  函式名的本質  閉包  本章小結 楔子 假如有一個函式,實現返回兩個數中的較大值: def my_max(x,y): m = x if x>y else y return mbigger

python學習2(函數進階)

tuple emp 作用 pen dba cell spl reat HERE 目錄  楔子  命名空間和作用域  函數嵌套及作用域鏈  函數名的本質  閉包  本章小結 楔子 假如有一個函數,實現返回兩個數中的較大值: def my_max(x,y): m

Python從白雞到大佬(2)

本博文為系列性博文,如果是像我一樣的小白起步的話,強烈建議從0看起   Python物件型別及其運算     Python程式中儲存的所有資料都是圍繞物件這個概念展開的         程式中儲存的所有資料都是物件         每個物件都有一個身份,一個型別和一

菜鳥的微服務(2)---springBoot(上)

springboot是spring團隊推出的全新框架。相信有所耳聞的人都不陌生,那麼一些理論的定義介紹我就不再闡述了。本文主要從quick start和常用框架(redis,activeMQ,mybatis)整合共兩個部分來進行筆記記錄。 第一部分 Quick start

Shader2:四宮格畫面實現

書寫本文的初衷是為了自我反省記錄。如有表達不當,請批評指正 首先貼出shader程式碼。這段程式碼是實現相機拍攝畫面四宮格的實現。分別傳入不同的channel 0 1 2 3。然後將UV進行切割分為四塊填入四個channel uniform float selected_

Html5學習(2)元素

元素 b元素:這是 <b>HTML5</b> 教程<br> strong元素:這是 <strong>HTML5</strong> 教程<br> wbr元素,這裡填充一下:Thisisa<wbr&g

Linux下PHP開發-2.開發環境相關設定探索

一.預設目錄在哪兒? 開始時面對該xampp整合開發環境的相關配置有點不知所錯,於是便先想著找httpd.conf,通過該檔案,對該整合環境的配置檔案關係有了大致瞭解,具體操作如下; cd /opt/lampp/etc vi httpd.conf 預設ServerName

WebView爬坑2--a標籤是target="_blank"時建立新視窗

如果網頁裡連結的a標籤是target=”_blank”,而碰巧你的WebView又沒有處理,那這個時候就會出現狂點連結/button頁面卻無動於衷的情況,給人想砸手機的感覺… 好了,解決方案其實也挺簡

Python12:執行緒、程序和協程

本章內容: 執行緒(執行緒鎖、threading.Event、queue 佇列、生產者消費者模型、自定義執行緒池) 程序(資料共享、程序池) 協程 概念: 1、程序:本質上就是一段程式的執行過程(抽象概念) 2、執行緒:最小的執行單元 3、程序:最小的資源單

PHP核心-2.SAPI中的Cli

PHP 核心之旅系列 一、SAPI是什麼? 1.1 理解SAPI (1)SAPI是PHP框架的介面層。有很多種伺服器的SAPI的實現,程式碼在sapi資料夾下。常見的介面抽象層實現有:cgi,apache2,cli,embed,fpm。 (2)各個伺服器遵循著相同的約定,每個伺服器的SAP

WebRTC原始碼探索——多執行緒篇-4

4 messagequeue messagequeue.h/messagequeue.cc檔案是多路訊號分離器的重要組成部分。它實現了訊息一個完整地訊息佇列,該佇列包括立即執行訊息佇列、延遲執行訊息佇列和具有優先順序的訊息佇列。其中,talk_base::Messag

Android直播開發(2):深度解析H.264編碼原理

 (碼字不易,轉載請申明出處:http://blog.csdn.net/andrexpert/article/details/71774230 ) 前 言     在學習H.264編碼之前,我們先了解一下在視訊直播的過程中,如果Camera採集的YUV影象不做任何處理

CNN學習[2]第一次加副標題的BP演算法理解

在訓練神經網路的演算法中,BP演算法可以說是經典中的經典。 這裡所有的啟用函式都用Sigmoid,該函式有一個性質 f′(x)=f(x)(1−f(x)) 這個性質等下會用到。 yˆ表示訓練樣例的標籤。 E表示損失,E=12∑(yˆ−y)2 從最基礎情

DotnetCore(2)---swagger的簡單使用

ati ice span dds host end read uil soft swagger swagger用於可視化api,並可實現對api格式化說明以及測試。 使用swagger 首先通過nuget引入Swashbuckle.AspNetCore(切記不是swa