Я пытался извлечь текст из pdf, и благодаря itext я могу извлечь весь текст. Однако я пытаюсь обнаружить шрифты заголовков и, используя эту информацию, планирую извлечь только те тексты между двумя конкретными заголовками. Например, в научной статье я хочу выделить только «вводную» часть. Для этого я перешел по следующей ссылке.
Получение текстовых шрифтов из файла PDF с помощью iText
Тем не менее, похоже, что для всех слов используется один и тот же тип шрифта, что неверно, когда я проверяю его вручную (копирование и вставка в текстовый документ позволяет мне видеть разные шрифты). Вот код, который я написал.
PdfReader reader = new PdfReader(pdf);
PrintWriter out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(txt), "UTF-8"));
SemTextExtractionStrategy semTextExtractionStrategy = new SemTextExtractionStrategy();
for (int j = 1; j <= reader.getNumberOfPages(); j++) {
out.println(PdfTextExtractor.getTextFromPage(reader, j, semTextExtractionStrategy));}
out.flush();
out.close();
И класс, который я создаю для стратегии извлечения.
public class SemTextExtractionStrategy implements TextExtractionStrategy {
private String text;
@Override
public void beginTextBlock() {
}
@Override
public void renderText(TextRenderInfo renderInfo) {
text = renderInfo.getText();
System.out.println(renderInfo.getFont().getFontType());
System.out.println(renderInfo.getFont().getFullFontName());
System.out.println(text);
}
@Override
public void endTextBlock() {
}
@Override
public void renderImage(ImageRenderInfo renderInfo) {
}
@Override
public String getResultantText() {
return text;
}
}
public static void main(String args[]) {
trial credentials = new trial();
}}
В результате этого кода я получаю такие результаты. Все они имеют тип шрифта 4.
...
4 --> font type
[[Ljava.lang.String;@4371767c --> font getFullFontName() ---> it must be HelveticaNeue-Bold
INTRODUCTION --> original text
4
[[Ljava.lang.String;@4e19e97b --> it must be AGaramond-Regular
We
4
[[Ljava.lang.String;@72fb24c --> it must be AGaramond-Regular
have
...