2010-12-15 12 views
5

Używam następujący kod do odczytania zawartości pliku PDF:C++ Odczyt pliku 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); 

Problem polega na tym, że znaki nie są takie same jak podczas otwierania pliku w Edytor tekstu. Na przykład ten plik files.flashfan.ch/file.png

skutkuje tym wyjściu: files.flashfan.ch/output.png

Jak można odczytać pliku, tak, że znaki są dokładnie tak samo jak w edytorze? Chcę parsować pliki PDF, ale bez oryginalnych znaków nie mogę tego zrobić. mam testet kod z tego pliku (nie jest to plik PDF, po prostu częścią jednego, więc nie można go wyświetlić):

PDF Head.pdf

dzięki za pomoc!

+0

@ user461872: parsowanie PDF to jedno, a czytanie PDF to kolejna. Ta ostatnia jest, moim zdaniem, bezużyteczna. Powiedz mi, co chcesz robić, czytając? – Nawaz

+0

Chcę uzyskać listę obiektów PDF w dokumencie. Następnie przeczytaj niektóre obiekty, które pasują do mojej specyfikacji. Ale wiem, jak to zrobić, po prostu myślałem, że program odczytuje błędne znaki z pliku. Nie można przetworzyć pliku. –

Odpowiedz

4

Nie widzę żadnych błędów w sposobie czytania pliku (kod działa na moim Linux-ie, kiedy przekierowuję dane wyjściowe do pliku). Prawdopodobnie problem występuje w postaciach kontrolnych, które zepsuły konsolę. Spróbuj wyprowadzić do pliku i porównać z danymi wejściowymi.

+0

Miałeś rację! Niektóre znaki w pliku manipulowały danymi wyjściowymi w konsoli. Tekst przeczytany jest poprawny, ale był wyświetlany niepoprawnie. –

0

Jest to plik binarny, nie ma sensu otwierać go w edytorze tekstu. Za pomocą edytora hex zamiast (jak XVI32)

... i zrobić drukowania tak:

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

Lub po prostu użyj wtyczki HexEditor z Notepad ++. HxD dostaje drugie miejsce. –

-1

Spróbuj użyć edytora HEX. Czasami programy takie jak Notatnik nie potrafią odczytać normalnego kodu, więc musiałbyś go wyświetlić za pomocą edytora szesnastkowego. Osobiście polecam ghex.