# Font aus PDF extrahieren ->  im Panel anzeigen



## pzypher (17. Jul 2012)

Hallo,

ich möchte mit pdfbox Fonts aus PDFs extrahieren und diese dann als Font für mein Panel verwenden. Also im PDF ist eine Font z.B Arial eingebettet, mittels Arial möchte ich einen String auf ein Panel legen.

Doch die Extraktion funktioniert einfach nicht und ich komme nicht mehr richtig weiter:

Diese Methode extrahiert mir die Chars aus dem PDF

```
protected void processTextPosition(TextPosition text) {
        
      try {
       allCharacters.add(new Chardetails(getIndex(), text.getCharacter().charAt(0), text.getXDirAdj(), text.getYDirAdj(), text.getFontSizeInPt(),
               (PDTrueTypeFont) (PDSimpleFont) text.getFont(), text.getXScale(), text.getHeightDir(), text.getWidthOfSpace(), text.getWidth()));
       } catch (IOException ex) {
           System.out.println("Fehler: "+ ex.getMessage());
       }
       index++;
    }
```


Hier die Klasse für die Chars aus dem PDF (Konstruktor): 

```
public Chardetails(int index, char zeichen, float xdir, float ydir, float fontsize, PDTrueTypeFont pdttfont, double xscale, float height, float space, float width) throws IOException {
        this.index = index;
        this.zeichen = zeichen;
        this.xdir = Math.round(xdir);
        this.ydir = Math.round(ydir);
        this.fontsize = fontsize; 
        this.font = pdttfont.getawtFont();
        this.xscale = xscale;
        this.height = height;
        this.space = space;
        this.width = width;
    }
```

Die pdfbox Methode getFont() gibt mir ein PDFont Objekt zurück, ich caste es mittels (PDTruetypefont) (PDSimpleFont) zu einem PDTruetypeFont Objekt und würde mit pdttfont.getawtFont() ein Font Objekt erhalten. 

Hiermit wird das Panel angezeigt

```
public void paintComponent(Graphics g) {
        
        //Antialiasing
        Graphics2D g2 = (Graphics2D)g;
        Object oldAntialiase =  g2.getRenderingHint(RenderingHints.KEY_ANTIALIASING);
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        
        //Anzeigen
g2.setFont(getPdfchar.getFont()); //Weder diese noch untere Methode führen zum Erfolg
        g2.setFont(new Font(getPdfchar().getFont().getName(), getPdfchar().getFont().getStyle(), Math.round(getPdfchar().getFontsize())));
        g2.drawString(String.valueOf(getPdfchar().getZeichen()),0,Math.round((this.getPdfchar().getFontsize())-(this.getPdfchar().getFontsize())*(float)0.2));
    }
```


Ich erhalte immer folgende Meldung:



> Warnung: java.lang.ClassCastException: org.apache.pdfbox.pdmodel.font.PDType1Font cannot be cast to org.apache.pdfbox.pdmodel.font.PDTrueTypeFont
> java.lang.ClassCastException: org.apache.pdfbox.pdmodel.font.PDType1Font cannot be cast to org.apache.pdfbox.pdmodel.font.PDTrueTypeFont



oder solche:



> Jul 17, 2012 10:13:01 AM org.apache.pdfbox.pdmodel.font.PDTrueTypeFont getawtFont
> Information: Can't read the embedded font UKHXCH+UniversS-47-CondensedLight
> Jul 17, 2012 10:13:02 AM org.apache.pdfbox.pdmodel.font.PDTrueTypeFont getawtFont
> Information: Using font Arial instead



Wäre sehr dankbar wenn mir einer einen Denkanstoß geben könnte! Oder gibts auch andere Libraries die mir evtl helfen könnten?

Gruß


----------



## pzypher (23. Jul 2012)

Push - ich habe das Problem leider immer noch nicht lösen können


----------



## eRaaaa (23. Jul 2012)

pzypher hat gesagt.:
			
		

> ich caste es mittels (PDTruetypefont) (PDSimpleFont) zu einem PDTruetypeFont Objekt und würde mit pdttfont.getawtFont() ein Font Objekt erhalten.





> Warnung: java.lang.ClassCastException: org.apache.pdfbox.pdmodel.font.PDType1Font cannot be cast to org.apache.pdfbox.pdmodel.font.PDTrueTypeFont



Dann caste eben zu PDType1Font anstatt zu PDTruetypefont. PDType1Font hat doch auch die AWT Methode ???:L:bahnhof:


----------



## pzypher (31. Jul 2012)

Laut text.getFont().getSubType() gibt es bei mir keine Type1Fonts. 

Hier ein kleiner Auszug - ich lass mir Zeichen für Zeichen die Font-Subtype ausgeben.


> TrueType
> TrueType
> TrueType
> TrueType
> ...



[EDIT]Im PDF ist ganz gewiss eine Type1 Font - UniversS-47-CondensedLight aber wie oben geschrieben checkt es die PDFBox nicht.[/EDIT]


----------

