2010-12-15 104 views
5

J'utilise le code suivant pour lire le contenu d'un fichier PDF:C++ Lecture d'un fichier 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); 

Le problème est que les caractères ne sont pas les mêmes que lorsque j'ouvre le fichier dans un éditeur de texte. Par exemple, ce fichier files.flashfan.ch/file.png

résultats dans cette sortie: files.flashfan.ch/output.png

Comment puis-je lire le fichier, de sorte que les caractères sont exactement la même chose que dans l'éditeur? Je veux analyser les fichiers PDF, mais sans les caractères d'origine, je ne peux pas à cela. J'ai Testet le code avec ce fichier (ne est pas un fichier PDF, juste une partie d'un, de sorte que vous ne pouvez pas l'afficher):

PDF Head.pdf

Merci pour votre aide!

+0

@ user461872: analyser le PDF est une chose, et lire le PDF en est une autre. Ce dernier ne sert à rien, à mon avis. Alors dis-moi ce que tu veux faire en lisant? – Nawaz

+0

Je veux obtenir une liste des objets PDF dans le document. Ensuite, lisez quelques objets qui correspondent à mes spécifications. Mais je sais comment faire, je pensais juste que le programme lit les mauvais caractères du fichier. Il serait donc impossible d'analyser le fichier. –

Répondre

4

Je ne vois aucune erreur dans la façon dont vous lisez le fichier (le code fonctionne réellement sur ma machine Linux lorsque je redirige la sortie vers un fichier). Probablement le problème est dans les caractères de contrôle qui gâchent avec la console. Essayez de sortir dans un fichier et comparez avec l'entrée.

+0

Vous aviez raison! Certains signes dans le fichier ont manipulé la sortie dans la console. Le texte lu est correct, mais il était mal affiché. –

0

Il s'agit d'un fichier binaire, cela n'a aucun sens de l'ouvrir dans un éditeur de texte. Utilisez un éditeur hexadécimal au lieu (comme XVI32)

... et faire l'impression comme ceci:

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

Ou utilisez simplement le plugin HexEditor avec Notepad ++. HxD obtient la deuxième place. –

-1

Essayez d'utiliser un éditeur hexadécimal. Parfois, des programmes comme le bloc-notes ne peuvent pas lire le code normal, vous devez donc le voir avec un éditeur hexadécimal. Je recommande personnellement ghex.