2010-03-03 6 views
14

J'utilise iTextSharp et la méthode reader.GetPageContent pour extraire le texte d'un PDF. J'ai besoin de trouver le rectangle/position pour chaque mot trouvé dans le document. Est-il possible d'obtenir le rectangle/la position d'un mot dans un fichier PDF en utilisant iTextSharp?iTextSharp - Comment obtenir la position d'un mot sur une page

+1

Avez-vous trouvé une bonne solution à votre problème? – d456

Répondre

20

Oui il y a. Découvrez le package text.pdf.parser, plus précisément LocationTextExtractionStrategy. En fait, cela pourrait ne pas faire l'affaire non plus. Vous aurez probablement envie d'écrire votre propre TextExtractionStrategy pour alimenter PdfTextExtractor:

MyTexExStrat strat = new MyTexExStrat(); 
PdfTextExtractor.getTextFromPage(reader, pageNum, strat); 
// get the strings-n-rects from strat. 

public class MyTexExStrat implements TextExtractionStrategy { 
    void beginTextBlock() {} 
    void endTextBlock() {} 
    void renderImage(ImageRenderInfo info) {} 
    void renderText(TextRenderInfo info) { 
     // track text and location here. 
    } 
} 

Vous aurez probablement envie de regarder la source de LocationTextExtractionStrategy pour voir comment il combine le texte qui partage une base de référence. Vous pourriez même simplement modifier LTES pour stocker des tableaux parallèles de chaînes et de rects.

PS: pour construire les rects, vous pouvez juste obtenir le AscentLine & DescentLine et utiliser ces coordonnées comme les coins supérieurs et inférieurs:

Vector bottomLeft = info.getDescentLine().getStartPoint(); 
Vector topRight = info.getAscentLine().getEndPoint(); 
Rectangle rect = new Rectangle(bottomLeft.get(Vector.I1), 
           bottomLeft.get(Vector.I2), 
           topRight.get(Vector.I1), 
           topRight.get(Vector.I2)); 

Attention: Le code ci-dessus cul-u-mes que le texte est horizontal et va de gauche à droite. Le texte pivoté le vrillera, tout comme le texte vertical ou le texte de droite à gauche (arabe, hébreu). Pour la plupart des applications, ce qui précède devrait être bon, mais sachez que c'est des limites.

Bonne chasse.

+2

Remarque: L'analyseur LocationTextExtractionStrategy ne trouve pas nécessairement de texte dans l'ordre d'apparition sur le document. J'ai mis du texte dans des pieds de page (fichiers .docx) puis les convertis en PDF (avec DOCX4J). J'ai trouvé que l'analyseur trouverait du texte, quel était le pied de page du fichier .docx, puis dans la section du corps. c'est-à-dire localiser le texte au bas du document, puis le texte au-dessus. Si vous avez besoin de localiser dans l'ordre d'apparition, vous pourriez trouver que vous avez besoin de trier vos résultats vous-même. –

+0

Consultez ce lien pour la version C# https://stackoverflow.com/questions/23909893/getting-coordinates-of-string-using-itextextractionstrategy-and-locationtextextr –

Questions connexes