Извлечение текста в определенной области страницы PDF с использованием ICEPDF
-
27-10-2019 - |
Вопрос
Есть ли способ извлечь текст определенной области с помощью ICEPDF? Я смог извлечь целые страницы, но это не то, что я хочу сделать.
(Я знаю, что PDFBox прекрасно извлекает текст в определенной прямоугольной области страницы. Однако, поскольку рендеринг изображения работает намного лучше в ICEPDF, я хотел бы использовать эту библиотеку.)
Решение
На объекте страницы, который представляет страницу, вы можете вызвать метод:
PageText pageText = document.getPageText(pagNumber);
Аналогично примеру пакета ./examples/extraction/pagetextextraction.java
Объект Pagetext содержит все объекты Linetext-> wordText-> Glyphtext для страницы. LineText, WordText и Glyphtext All Extend Abstractext, который имеет метод 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; }
Другие советы
Вы разместили на форумах ICEPDF? Обычно они очень хороши в ответах на вопросы там?