Pregunta

¿Hay alguna forma de extraer el texto de una región específica usando ICEPDF? Pude extraer páginas completas, pero eso no es lo que quiero hacer.

(Sé que PDFBox extrae bien el texto en un área rectangular específica de una página. Sin embargo, dado que la representación de la imagen funciona mucho mejor en ICEPDF, me gustaría usar esa biblioteca).

¿Fue útil?

Solución

En el objeto de página que representa una página, puede llamar al método:

PageText pageText = document.getPageText(pagNumber);

Similar al ejemplo de paquete ./examples/extraction/pageTextExtraction.java

El objeto Pagetext contiene todos los objetos de LinExText-> WordText-> GlyphText para la página. Linetext, WordText y GlyphText All extiende AbstractText que tiene un método getBounds (). Los límites de estos objetos están en el espacio de usuario de PDF, el primer cuadrante geométrico. Java2d está en el cuarto cuadrante geométrico. Suponiendo que ya tenga el selectionRectangle, el código sería el siguiente:

//  the currently selected state, ignore highlighted.
currentPage.getViewText().clearSelected();

// get page transform, same for all calculations
AffineTransform pageTransform = currentPage.getPageTransform(
        Page.BOUNDARY_CROPBOX,
        documentViewModel.getViewRotation(),
        documentViewModel.getViewZoom());

Rectangle2D.Float pageSpaceSelectRectangle =
        convertRectangleToPageSpace(selectionRectangle, pageTransform);
ArrayList pageLines = pageText.getPageLines();
for (LineText pageLine : pageLines) {
    // check for containment, if so break into words.
    if (pageLine.getBounds().intersects(pageSpaceSelectRectangle )) {
        // you have some selected text. 
    }
}



    /**
     * Converts the rectangle to the space specified by the page tranform. This
     * is a utility method for converting a selection rectangle to page space
     * so that an intersection can be calculated to determine a selected state.
     *
     * @param mouseRect     rectangle to convert space of
     * @param pageTransform page transform
     * @return converted rectangle.
     */
    private Rectangle2D convertRectangleToPageSpace(Rectangle mouseRect,
                                                    AffineTransform pageTransform) {
        GeneralPath shapePath;
        try {
            AffineTransform tranform = pageTransform.createInverse();
            shapePath = new GeneralPath(mouseRect);
            shapePath.transform(tranform);
            return shapePath.getBounds2D();
        } catch (NoninvertibleTransformException e) {
            logger.log(Level.SEVERE,
                    "Error converting mouse point to page space.", e);
        }
        return null;
    }

Otros consejos

¿Has publicado en los foros de ICEPDF? ¿Por lo general, son muy buenos para responder preguntas allí?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top