我一直在尝试从 pdf 中提取文本,并且由于 itext 我可以提取整个文本。但是,我正在尝试检测标题的字体,并且通过使用此信息,我计划仅提取两个特定标题之间的那些文本。例如,在一篇科学论文中,我只想提取“介绍”部分。为此,我申请了以下链接。
但是,它似乎为所有单词提供了相同的字体类型,当我手动检查时这是不正确的(将粘贴复制到 word 文档使我能够看到不同的字体)。这是我写的代码。
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
...