2017-04-22 107 views
0

我正在尝试使用pdfbox库将粗体字导出为pdf文件的大写字母。我想在粗体字后面留一行空白。正如你可以从pdf文件(Dictionary.pdf)看到的那样,从第15页开始,它是一个带有定义的字典。单词用粗体表示,定义具有正常的字体。从pdf中提取粗体字

这里是我想我的文本文件看起来像:
“字典来源:
ΑΒΑθΗΣ
ΑΒΑθΗΣ
ΑΒΑθΕΣ
ΕΠΙΘ:ότανκάτιείναιαβαθές,δενέχειμεγάλοβάθος(= ρηχός ,άβαθος≠βαθύς):Ταπαιδιάμαθαίνουν κολύμπιστααβαθήνερά ......”

这里是我的代码,但联合国幸运的是,它不能将粗体和普通字体分开。在调试代码后,我意识到即使存在粗体字符,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

非常感谢,为我工作! –

+1

请用你的代码自己回答这个问题。今天我太懒了:-) –

回答

3

简单,如果你更换if语句

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

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

作品完美,因为大胆的文字(在这种情况下)的字体名称包含粗体字,所以你可以确定一个字符是粗体还是不粗体。