Domanda

Esiste un modo per estrarre il testo di una regione specifica utilizzando ICEpdf?Sono stato in grado di estrarre intere pagine, ma non è quello che voglio fare.

(So ​​che PDFBox estrae bene il testo in una specifica area rettangolare di una pagina.Tuttavia, poiché il rendering delle immagini funziona molto meglio in ICEpdf, mi piacerebbe utilizzare quella libreria.)

È stato utile?

Soluzione

Sull'oggetto Page che rappresenta una pagina puoi chiamare il metodo:

PageText pageText = document.getPageText(pagNumber);

Simile all'esempio del bundle ./examples/extraction/PageTextExtraction.java

L'oggetto PageText contiene tutti gli oggetti LineText->WordText->GlyphText per la pagina.LineText, WordText e GlyphText estendono tutti AbstractText che ha un metodo getBounds().I limiti di questi oggetti sono nello spazio utente PDF, il primo quadrante geometrico.Java2D si trova nel 4° quadrante geometrico.Supponendo che tu abbia già la selezione Rettangolo, il codice sarebbe il seguente:

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

Altri suggerimenti

Hai postato sui forum icepdf?Di solito sono molto bravi a rispondere alle domande lì?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top