На объекте Page, представляющем страницу, вы можете вызвать метод:
PageText pageText = document.getPageText(pagNumber);
Аналогично примеру пакета ./examples/extraction/PageTextExtraction.java
Объект PageText содержит все объекты LineText-> WordText-> GlyphText для страницы. LineText, WordText и GlyphText расширяют AbstractText, который имеет метод getBounds (). Границы этих объектов находятся в пользовательском пространстве PDF, 1-м геометрическом квадранте. Java2D находится в 4-м геометрическом квадранте. Предполагая, что у вас уже есть selectionRectangle, код будет выглядеть следующим образом:
// 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;
}