2017-04-22 150 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) 

作品完美,因爲大膽的文字(在這種情況下)的字體名稱包含粗體字,所以你可以確定一個字符是粗體還是不粗體。