2010-12-15 196 views
5

我用下面的代碼讀取PDF文件的內容:C++閱讀PDF文件

string document; 
FILE * f; 
f = fopen (path , "rb"); 
unsigned char buffer[1024]; 
while(!feof(f)){ 
    int bytes = fread(buffer,1,1024,f); 
    for(int i = 0; i < bytes; i++){ 
     document += buffer[i]; 
     cout << buffer[i]; 
    } 
} 
fclose (f); 

的問題是,該字符是不一樣的,當我在打開文件文本編輯器。 例如該文件 files.flashfan.ch/file.png

結果輸出: files.flashfan.ch/output.png

我如何可以讀取該文件,從而使字符是與編輯器中的完全相同? 我想解析PDF文件,但沒有原始字符我不能這樣做。 我已經testet代碼與此文件(它不是一個PDF文件,只是其中的一部分,所以你不能顯示它):

PDF Head.pdf

感謝您的幫助!

+0

@ user461872:解析PDF是一回事,閱讀PDF是另一回事。在我看來,後者是沒用的。所以告訴我你想通過閱讀做什麼? – Nawaz 2010-12-15 11:54:23

+0

我想獲取文檔中PDF對象的列表。然後閱讀一些符合我的規格的物體。但我知道如何做到這一點,我只是認爲該程序從文件中讀取錯誤的字符。所以解析文件是不可能的。 – 2010-12-15 12:09:59

回答

4

我在讀取文件的方式中看不到任何錯誤(當我將輸出重定向到文件時,代碼實際上在我的Linux機器上工作)。可能問題在於與控制檯混淆的控制字符。嘗試輸出到文件並與輸入進行比較。

+0

你說得對!文件中的某些符號確實在控制檯中操縱輸出。讀取的文本是正確的,但顯示錯誤。 – 2010-12-15 11:02:35

0

這是一個二進制文件,在文本編輯器中打開它是沒有意義的。使用十六進制編輯器,而不是(像XVI32

...和做印刷這樣的:

fprintf("%#x ", buffer[i]); 
+0

或者只使用NoteEd ++的HexEditor插件。 HxD獲得第二名。 – 2010-12-16 02:17:52

-1

嘗試使用十六進制編輯器。有時候,像記事本這樣的程序不能讀取普通的代碼,所以你必須用十六進制編輯器查看它。我個人推薦ghex。