Извлечение текста в определенной области страницы PDF с использованием ICEPDF

StackOverflow https://stackoverflow.com/questions/5854969

Вопрос

Есть ли способ извлечь текст определенной области с помощью 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? Обычно они очень хороши в ответах на вопросы там?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top