Да, есть. Проверьте пакет 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));
Предупреждение. Приведенный выше код указывает на то, что текст расположен горизонтально и идет слева направо. Повернутый текст облажается, как и текст по вертикали или справа налево (арабский, иврит). Для большинства приложений вышеприведенное должно быть хорошо, но знайте, что это пределы.
Удачной охоты.