Scarecrow
Scarecrow

Reputation: 4137

How to create a font file from a base64 encoded font string in java

I have a base64 encoded font String

String font_data="font/truetype;charset=utf-8;base64,AAEAAAAMAIAAAwBAT1MvMmaobcEAAAFIAAAAVmNtYXCo5nJcAAACgAAAAVJnYXNw//8AAwAAKHQAAAAIZ2x5Zt1rdPEAAARIAAAULGhlYWTx2l1e   ...........  AFwAXQAAAAAAAf//AAI=";

Now I want to create a .ttf font file using java;

How to do this?

Thanks in advance..

Upvotes: 1

Views: 1380

Answers (1)

morgano
morgano

Reputation: 17422

Just decode the base64 part and save it in a file (I'm assuming that part is really a True Type font).

If you're using Java 7:

String fontData = "font/truetype;charset=utf-8;base64,QUJDREU= ... ";

fontData = fontData.substring(fontData.indexOf("base64,") + 7);

File ttFile = new File("/path/to/your/file.ttf");
try (FileOutputStream output = new FileOutputStream(ttFile)) {
    byte[] binary = javax.xml.bind.DatatypeConverter.parseBase64Binary(fontData);
    output.write(binary);
} catch (IOException e) {
    e.printStackTrace();
}

If you're using Java 6:

String fontData = "font/truetype;charset=utf-8;base64,QUJDREU= ... ";

fontData = fontData.substring(fontData.indexOf("base64,") + 7);

File ttFile = new File("/path/to/your/file.ttf");
try {
    FileOutputStream output = null;
    try {
        output = new FileOutputStream(ttFile);
        byte[] binary = javax.xml.bind.DatatypeConverter.parseBase64Binary(fontData);
        output.write(binary);
    } finally {
        if(output != null) {
            output.close();
        }
    }
} catch (IOException e) {
    e.printStackTrace();
}

If you're using an older version, download and add to your classpath Apache Commons Codec, and try this:

String fontData = "font/truetype;charset=utf-8;base64,QUJDREU= ... ";

fontData = fontData.substring(fontData.indexOf("base64,") + 7);

File ttFile = new File("/path/to/your/file.ttf");
FileOutputStream output = null;
try {
    try {
        output = new FileOutputStream(ttFile);
        byte[] binary = new org.apache.commons.codec.binary.Base64().decode(fontData);
        output.write(binary);
    } finally {
        if(output != null) {
            output.close();
        }
    }
} catch (IOException e) {
    e.printStackTrace();
}

Upvotes: 3

Related Questions