2016-07-19 7 views
1

In iText7, ist es möglich, ein PdfFont aus einer Klassenpfad-Font-Ressource * zu erstellen?Schriftart in jar in iText7 bereitstellen

Derzeit speichere ich die Ressource in einen temporären Ordner und verwende

PdfFont font; 

public void setFont() { 
    font = PdfFontFactory.createFont(FontProvider.getFont(), PdfEncodings.IDENTITY_H, true); 
} 

Wo FontProvider.getFont() entweder einen Pfad zu der Classpath Datei in der IDE für die Verwendung gibt oder speichert eine Datei in einen temporären Ordner auf dem Host-System und gibt einen Pfad zu diesem zurück.

Wenn möglich, möchte ich den Schritt des Speicherns der Datei auf dem Host-System vermeiden.

(* eine offene lizenzierte Schrift)

Antwort

2

Alle statischen PdfFontFactory::createFont Methoden haben auch eine Überlastung, die eine byte[] anstelle eines String erfordert. Also müssen Sie einen Weg finden, Ihre Ressource in eine byte[] zu bekommen.

Vom Speicherort der Ressource aus können Sie einen InputStream erstellen. Dann können Sie eine Methode eines Drittanbieters verwenden, um die Bytes von diesem InputStream zu erhalten (z. B. Convert InputStream to byte array in Java).

InputStream is = this.getClass().getResourceAsStream("/class/path/URI"); 
byte[] fontBytes = IOUtils.toByteArray(is); // from Apache Commons IO 
PdfFontFactory.createFont(fontBytes, PdfEncodings.IDENTITY_H, true); 

FYI wird iText intern verwendet einen ähnlichen Algorithmus, um eine Ressource von einem String zu einem byte[] zur Weiterverarbeitung in einem IRandomAccessSource referenziert zu konvertieren.