iTextSharp - Как определить положение слова на странице - PullRequest
15 голосов
/ 04 марта 2010

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

1 Ответ

21 голосов
/ 01 февраля 2011

Да, есть. Проверьте пакет 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));

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

Удачной охоты.

...