从pdf中提取粗体字
Extract bold words from pdf
我正在尝试使用 pdfbox 库将粗体字导出到 pdf 文件的大写字母到文本文件中。我想在粗体字后留一个空行。正如您从第 15 页开始的 pdf 文件 (Dictionary.pdf) 中看到的那样,它是一个带有定义的字典。单词以粗体显示,定义使用正常字体。
这是我希望我的文本文件的样子:
"词典来源:
阿瓦蒂斯
阿瓦蒂斯
阿巴斯
ADJ.: 当某物很浅时,它没有太多深度 (=
浅,浅≠深):孩子学习
在浅水中游泳。
....
这是我的代码,但遗憾的是它无法将粗体与普通字体分开。调试代码后,我意识到即使有粗体字符,text.getFont().getFontDescriptor().isForceBold() 也是 false 并且 text.getFont().getFontDescriptor().getFontWeight()=0 .
public class PDFBoldParser extends PDFTextStripper {
PrintWriter writer;
boolean wasBold=false;
public PDFBoldParser(String filepath) throws IOException{
writer=new PrintWriter(filepath,"UTF-8");
writer.println("Dictionary Source:");
}
@Override
protected void processTextPosition(TextPosition text){
if(text.getFont().getFontDescriptor()!=null){
if (text.getFont().getFontDescriptor().isForceBold() ||
text.getFont().getFontDescriptor().getFontWeight() > 680 &&wasBold) {
writer.print(text.toString().toUpperCase());
wasBold=true;
}
else if(text.getFont().getFontDescriptor().isForceBold() ||
text.getFont().getFontDescriptor().getFontWeight() > 680 &&!wasBold){
writer.println();
writer.print(text.toString().toUpperCase());
wasBold=true;
}
else{
writer.print(text.toString());
wasBold=false;
}
}
}
public void closeParser(){
writer.close();
}
}
只需替换 if 语句
if (text.getFont().getFontDescriptor().isForceBold() ||
text.getFont().getFontDescriptor().getFontWeight() > 680 &&wasBold)
和
if (text.getFont().getName().contains("Bold") &&wasBold)
效果很好,因为粗体文本的字体名称(在这种情况下)包含“粗体”一词,因此您可以确定字符在哪里是粗体或不是。
我正在尝试使用 pdfbox 库将粗体字导出到 pdf 文件的大写字母到文本文件中。我想在粗体字后留一个空行。正如您从第 15 页开始的 pdf 文件 (Dictionary.pdf) 中看到的那样,它是一个带有定义的字典。单词以粗体显示,定义使用正常字体。
这是我希望我的文本文件的样子:
"词典来源:
阿瓦蒂斯
阿瓦蒂斯
阿巴斯
ADJ.: 当某物很浅时,它没有太多深度 (=
浅,浅≠深):孩子学习
在浅水中游泳。
....
这是我的代码,但遗憾的是它无法将粗体与普通字体分开。调试代码后,我意识到即使有粗体字符,text.getFont().getFontDescriptor().isForceBold() 也是 false 并且 text.getFont().getFontDescriptor().getFontWeight()=0 .
public class PDFBoldParser extends PDFTextStripper {
PrintWriter writer;
boolean wasBold=false;
public PDFBoldParser(String filepath) throws IOException{
writer=new PrintWriter(filepath,"UTF-8");
writer.println("Dictionary Source:");
}
@Override
protected void processTextPosition(TextPosition text){
if(text.getFont().getFontDescriptor()!=null){
if (text.getFont().getFontDescriptor().isForceBold() ||
text.getFont().getFontDescriptor().getFontWeight() > 680 &&wasBold) {
writer.print(text.toString().toUpperCase());
wasBold=true;
}
else if(text.getFont().getFontDescriptor().isForceBold() ||
text.getFont().getFontDescriptor().getFontWeight() > 680 &&!wasBold){
writer.println();
writer.print(text.toString().toUpperCase());
wasBold=true;
}
else{
writer.print(text.toString());
wasBold=false;
}
}
}
public void closeParser(){
writer.close();
}
}
只需替换 if 语句
if (text.getFont().getFontDescriptor().isForceBold() ||
text.getFont().getFontDescriptor().getFontWeight() > 680 &&wasBold)
和
if (text.getFont().getName().contains("Bold") &&wasBold)
效果很好,因为粗体文本的字体名称(在这种情况下)包含“粗体”一词,因此您可以确定字符在哪里是粗体或不是。