iTextSharp - Как определить положение слова на странице
Я использую iTextSharp и метод reader.GetPageContent, чтобы вытащить текст из PDF. Мне нужно найти прямоугольник / положение для каждого слова, найденного в документе. Есть ли способ получить прямоугольник / положение слова в PDF с помощью iTextSharp?
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));
Предупреждение. Приведенный выше код указывает на то, что текст расположен горизонтально и идет слева направо. Повернутый текст облажается, как и текст по вертикали или справа налево (арабский, иврит). Для большинства приложений выше должно быть хорошо, но знайте, что это пределы.
Удачной охоты.