Подтвердить что ты не робот

ITextSharp - Как получить позицию слова на странице

Я использую метод iTextSharp и reader.GetPageContent, чтобы вытащить текст из PDF. Мне нужно найти прямоугольник/позицию для каждого слова, найденного в документе. Есть ли способ получить прямоугольник/положение слова в PDF с помощью iTextSharp?

4b9b3361

Ответ 1

Да, есть. Проверьте text.pdf.parser пакет, в частности LocationTextExtractionStrategy. Собственно, это тоже не могло бы сделать трюк. Вероятно, вы захотите написать свой собственный TextExtractionStrategy для подачи в PdfTextExtractor:

MyTexExStrat strat = new MyTexExStrat();
PdfTextExtractor.getTextFromPage(reader, pageNum, strat);
// get the strings-n-rects from strat.

public class MyTexExStrat implements TextExtractionStrategy {
    void beginTextBlock() {}
    void endTextBlock() {}
    void renderImage(ImageRenderInfo info) {}
    void renderText(TextRenderInfo info) {
      // track text and location here.
    }
}

Вероятно, вам захочется посмотреть на источник LocationTextExtractionStrategy, чтобы увидеть, как он объединяет текст, который разделяет базовую линию. Вы даже можете изменить LTES для хранения параллельных массивов строк и прямоугольников.

PS: чтобы построить прямоугольники, вы можете просто получить AscentLine и DescentLine и использовать эти координаты в верхнем и нижнем углах:

Vector bottomLeft = info.getDescentLine().getStartPoint();
Vector topRight = info.getAscentLine().getEndPoint();
Rectangle rect = new Rectangle(bottomLeft.get(Vector.I1),
                               bottomLeft.get(Vector.I2),
                               topRight.get(Vector.I1),
                               topRight.get(Vector.I2));

Предупреждение: приведенный выше код ass-u-mes гласит, что текст горизонтален и идет слева направо. Повернутый текст будет прикручивать его, как текст по вертикали или справа налево (арабский, иврит). Для большинства приложений выше должно быть хорошо, но знаете, что это ограничивает.

Хорошая охота.