2017-04-04 1 views
0

J'utilise iTextSharp pour extraire des informations d'un fichier PDF. Tout est presque parfait (assez impressionné en fait), j'ai juste quelques problèmes avec quelques mots.iTextSharp: Spécifier l'encodage en faisant GetTextFromPage

Par exemple, dans le PDF, j'ai la phrase suivante:

fin de la Dès soirée, [...]

Quand je regarde le PDF, je vois exactement , mais quand je reçois le texte du code suivant:

ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy(); 
for (int page = 1; page <= pdfReader.NumberOfPages; page++) 
{ 
    string currentPageText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy); 
    if (currentPageText.Contains(PAGE_MARKER)) 
    { 
     return currentPageText; 
    } 
} 

le texte en question est la suivante:

la fi n Dès de soiréeTendance, [...]

Il est étrange, mais le "fi" sont en fait un seul caractère, et il y a un espace.

Lorsque j'ouvre le même PDF Foxit Reader ou Adobe Acrobat, il cherche bien, mais si je copier coller le texte, j'ai le texte suivant:

Dès la fi n de soiréeTendance, [ ...] (Donc, les caractères corrects mais avec un espace)

C'est un exemple, mais j'en ai un autre.

Une idée pour résoudre ce problème?

Répondre

0

Pour que cela ait du sens, vous avez besoin d'informations de base sur la syntaxe pdf.

Dans la forme la plus rudimentaire, un document PDF contient uniquement les instructions nécessaires pour rendre un document dans un visualiseur. En d'autres termes, il n'y a pas de concept de "texte" rendu. Juste quelque chose comme "dessiner le personnage" A "à l'emplacement 150, 877" et ainsi de suite.

En fait, c'est un extrait d'un document .pdf (ouvert avec un simple éditeur de texte)

[a, -28.7356, p, 27.2652, p, 27.2652, e, -27.2652, a, -28.7356, r, 64.6889, a, -28.7356, n, 27.2652, c, -38.7594, e, 444] TJ 

TJ est l'instruction "dessiner le texte". Le tableau contient des paires de caractères et leurs informations de crénage. Maintenant, pour que n'importe quel type d'extraction de texte fonctionne (à la fois dans iText et dans la fonctionnalité copier/coller de Foxit, Adobe, etc.), vous avez besoin d'un peu de conjecture. (Une heuristique comme elle est communément appelée).

Vous devez décider quand certains caractères sont collés ensemble et former un mot, et quand deux caractères sont suffisamment espacés pour qu'il y ait un espace entre eux.

Dans votre cas, il semble que la distance entre "n" et "i" est supérieure à la distance attendue pour cette police.

Malheureusement, iText ne pourra pas (facilement) vous y aider. Puisque le document d'entrée semble simplement être incorrect. Ou plutôt la plupart des lecteurs/téléspectateurs semblent se tromper, il est donc susceptible d'être simplement un problème dans le pdf.

Bien sûr, vous pouvez implémenter TextExtractionStrategy. Cette classe vous donne accès aux objets TextRenderInfo qui contiennent les caractères et l'état graphique dans le pdf. La plupart des TextExtractionStrategies vérifieront ensuite la taille d'un espace dans la police utilisée et l'utiliseront comme référence pour décider quand les caractères doivent être concaténés et quand ils doivent être séparés. Enfin, si vous voulez approfondir ce problème, vous pouvez toujours joindre le document d'entrée.

Cordialement, Joris

+0

Merci pour la très interessting answser. Ceci explique pourquoi j'ai des caractères inattendus, mais le sien n'explique pas les caractères bizarres (comme 'fi' au lieu de' fi' (le premier est un seul caractère en fait)) – J4N

+0

@ J4N * "caractères bizarres (comme' fi '' au lieu de 'fi')" * - ce sont des ligatures, c'est-à-dire des glyphes montrant deux ou trois caractères à la fois; elles existent pour certaines combinaisons de caractères pour lesquelles un glyphe combiné personnalisé est considéré comme nettement meilleur que les glyphes individuels placés les uns à côté des autres. – mkl

+0

Eh bien, en français, ils sont certains d'entre eux qui sont utilisés (comme "œ" au lieu de "oe", mais à part cela, ceux-ci ne sont même pas reconnus dans mon jeu. Est-il possible d'indiquer de ne pas les convertir? "version? Pour avoir la même version que celle du PDF? – J4N