2010-03-03 68 views
14

Estoy usando iTextSharp y el método reader.GetPageContent para extraer el texto de un PDF. Necesito encontrar el rectángulo/posición para cada palabra encontrada en el documento. ¿Hay alguna manera de obtener el rectángulo/posición de una palabra en un PDF usando iTextSharp?iTextSharp - Cómo obtener la posición de la palabra en una página

+1

¿Encontró una buena solución a su problema? – d456

Respuesta

20

Sí, sí. Consulte el paquete text.pdf.parser, específicamente LocationTextExtractionStrategy. En realidad, eso tampoco puede hacer el truco. Es probable que desea escribir su propia TextExtractionStrategy para alimentar 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. 
    } 
} 

es probable que desee para mirar la fuente de LocationTextExtractionStrategy para ver cómo se combina texto que comparte una línea de base. Incluso podría modificar LTES para almacenar matrices paralelas de cadenas y rects.

PS: para construir las rectas, sólo puede obtener la DescentLine AscentLine & y usar esas coordenadas como las superiores e inferiores esquinas:

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)); 

Advertencia: El código anterior culo-u-mes que el texto es horizontal y procede de izquierda a derecha. El texto girado lo arruinará, al igual que el texto vertical o el texto de derecha a izquierda (árabe, hebreo). Para la mayoría de las aplicaciones, lo anterior debería estar bien, pero conozca sus límites.

Buena caza.

+2

Nota: El analizador LocationTextExtractionStrategy no ubica necesariamente el texto en el orden de aparición en el documento. He estado poniendo texto en los pies de página (archivos .docx) y luego los he convertido a PDF (con DOCX4J). Descubrí que el analizador encontrará el texto, cuál era el pie de página del archivo .docx, luego en la sección del cuerpo. es decir, ubique el texto en la parte inferior del documento, luego envíe el texto arriba. Si necesita ubicarlo en el orden de aparición, es posible que deba ordenar los resultados usted mismo. –

+0

Echa un vistazo a este enlace para la versión de C# https://stackoverflow.com/questions/23909893/getting-coordinates-of-string-using-itextextractionstrategy-and-locationtextextr –

Cuestiones relacionadas