Frage

Gibt es eine Möglichkeit, den Text eines bestimmten Bereichs mit ICEPDF zu extrahieren? Ich konnte ganze Seiten extrahieren, aber das möchte ich nicht tun.

(Ich weiß, dass PDFbox den Text in einem bestimmten rechteckigen Bereich einer Seite gut extrahiert. Da das Bildrendern jedoch in ICEPDF viel besser funktioniert, möchte ich diese Bibliothek verwenden.)

War es hilfreich?

Lösung

Auf dem Seitenobjekt, das eine Seite darstellt, können Sie die Methode aufrufen:

PageText pageText = document.getPageText(pagNumber);

Ähnlich wie beim Bundle -Beispiel ./Examples/extraction/pagetextexTraction.java

Das Pagetext-Objekt enthält alle Linetext-> WordText-> Glyphtext-Objekte für die Seite. Linetext, WordText und Glyphtext alle erweitern AbstractText mit einer GetBounds () -Methode. Die Grenzen dieser Objekte befinden sich im PDF -Benutzerraum, dem 1. geometrischen Quadranten. Java2d befindet sich im 4. geometrischen Quadranten. Angenommen, Sie haben bereits den Auswahlrectangle, der Code wäre wie folgt:

//  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;
    }

Andere Tipps

Haben Sie in den ICEPDF -Foren gepostet? Sie sind normalerweise sehr gut darin, dort Fragen zu beantworten?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top