我正在尝试使用pdfbox库将粗体字导出为pdf文件的大写字母到文本文件。我希望在粗体字后面留一个空白行。从pdf文件(Dictionary.pdf)可以看出,从第15页开始,它是一个带有定义的字典。单词以粗体显示,定义具有普通字体。
以下是我希望我的文本文件看起来像:
“词典来源:
ΑΒΑθΗΣ
ΑΒΑθΗΣ
ΑΒΑθΕΣ
ΕΠΙΘ。:ττανκάτιείναιαβαθές,δενέχειμεγάλοβάθος(=
ρηχός,άβαθος≠βαθύς):Ταπαιδιάμαθαίνουν
κολύμπιστααβαθήνερά。
......“
这是我的代码,但不幸的是它无法将粗体与普通字体分开。调试代码后,我意识到即使有一个粗体字符,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();
}
}
答案 0 :(得分:3)
只需更换if语句
即可if (text.getFont().getFontDescriptor().isForceBold() ||
text.getFont().getFontDescriptor().getFontWeight() > 680 &&wasBold)
与
if (text.getFont().getName().contains("Bold") &&wasBold)
完美地工作,因为粗体文本的字体名称(在这种情况下)包含单词Bold,因此您可以确定字符的粗体位置。