Извлечение текста в определенной области страницы PDF с помощью ICEpdf - PullRequest
1 голос
/ 02 мая 2011

Есть ли способ извлечь текст определенного региона с помощью ICEpdf? Мне удалось извлечь целые страницы, но я не хочу этого делать.

(Я знаю, что PDFBox прекрасно извлекает текст в определенной прямоугольной области страницы. Однако, поскольку рендеринг изображений работает намного лучше в ICEpdf, я хотел бы использовать эту библиотеку.)

Ответы [ 2 ]

3 голосов
/ 03 мая 2011

На объекте 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;
    }
2 голосов
/ 02 мая 2011

Вы публиковали на форумах icepdf? Там они обычно очень хорошо отвечают на вопросы?

...