2017-04-22 1 views
0

J'essaie d'exporter les mots en gras dans les plafonds d'un fichier pdf dans un fichier texte en utilisant la bibliothèque pdfbox. Je veux vivre une ligne vide après le mot en gras. Comme vous pouvez le voir à partir du fichier pdf (Dictionary.pdf) à partir de la page 15, c'est un dictionnaire avec les définitions. Les mots sont en gras et les définitions ont une police normale.Extrait des mots gras du pdf

Voici comment je veux mon fichier texte pour ressembler à:
« Dictionnaire Source:
ΑΒΑθΗΣ
ΑΒΑθΗΣ
ΑΒΑθΕΣ
ΕΠΙΘ .: όταν κάτι είναι αβαθές, δεν έχει μεγάλο βάθος (= ρηχός , άβαθος ≠ βαθύς). Τα παιδιά μαθαίνουν κολύμπι στα αβαθή νερά .... »

Voici mon code, mais un heureusement, il ne peut pas séparer les caractères gras des caractères normaux. Après avoir débogué le code, j'ai réalisé que même s'il y a un caractère gras, text.getFont(). GetFontDescriptor(). IsForceBold() est false et 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

Vous pouvez regarder le nom de la police, parfois les polices en gras ont "gras" dedans (mais pas toujours). –

+0

Merci qui a fonctionné pour moi !!! –

+1

Veuillez répondre à la question vous-même avec votre code. Je suis trop paresseux aujourd'hui :-) –

Répondre

3

simplement si vous remplacez les instructions if

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

avec

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

fonctionne parfaitement parce que le Nom de la police pour le texte en gras (dans cette situation) contient le mot gras pour vous peut déterminer où un caractère est en gras ou non.