Text in einer bestimmten Region der PDF -Seite mit ICEPDF extrahieren
-
27-10-2019 - |
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.)
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?