Font aus PDF extrahieren -> im Panel anzeigen

pzypher

Aktives Mitglied
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
Java:
    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):
Java:
    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
Java:
    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 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:
 
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
Warnung: java.lang.ClassCastException: org.apache.pdfbox.pdmodel.font.PDType1Font cannot be cast to org.apache.pdfbox.pdmodel.font.PDTrueTypeFont
TrueType
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]
 
Zuletzt bearbeitet:

Zurück
Oben