从pdf中提取粗体字

时间:2017-04-22 23:49:17

标签: java pdfbox

我正在尝试使用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();
    }
}

1 个答案:

答案 0 :(得分:3)

只需更换if语句

即可
if (text.getFont().getFontDescriptor().isForceBold() ||
                text.getFont().getFontDescriptor().getFontWeight() > 680 &&wasBold)

if (text.getFont().getName().contains("Bold") &&wasBold)

完美地工作,因为粗体文本的字体名称(在这种情况下)包含单词Bold,因此您可以确定字符的粗体位置。