2013-06-24 21 views
0

字體文件我已經base64編碼的字體字符串如何創建一個base64編碼的字體字符串中的Java

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

現在我想創建一個使用java一個.ttf字體文件;

如何做到這一點?

在此先感謝..

+0

你甚至可以在不用創建文件的情況下使用類[ByteArrayInputStream](ht TPS://docs.oracle.com/javase/7/docs/api/java/io/ByteArrayInputStream.html)。 –

回答

2

剛剛解碼的base64部分並將其保存在一個文件中(我假設的部分是一個真正的True Type字體)。

如果您使用的是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(); 
} 

如果您使用的是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(); 
} 

如果您使用的是舊版本,請下載並添加到您的類路徑Apache Commons Codec ,並試試這個:

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(); 
} 
相關問題