Tutorial 7 - Neue Schriftarten und Zeichenkodierungen hinzufügen

Hinzufügen neuer Schriftarten in benötigten Zeichenkodierungen für die Verwendung in einem PDF Dokument

Diese Anleitung erklärt wie TrueType, OpenType (TrueType-flavoured) und Type1 Schriftarten so verwendet werden können, dass Sie nicht mehr an die Standardschriftarten gebunden sind. Der weitere Vorteil ist, dass die Zeichenkodierung gewählt werden kann, so dass neben den standardmäßig verfügbaren Zeichenkodierungen (CP1252 und Windows-1252) auch andere Sprachen und Zeichenkodierungen verwendet werden können.

OpenType

Für OpenType Schriftarten wird nur das Format TrueType-flavoured OpenType unterstützt. OpenType Schriftarten mit dem Format PostScript-flavoured OpenType werden nicht unterstützt.

Type1

Für Type1 Schriftarten ist die zugehörige Adobe Font Metrics (AFM) Datei erforderlich. Diese wird normalerweise mit der Schriftart mitgeliefert.

Notwendige Schritte

Das Hinzufügen einer neuen Schriftart erfolgt in zwei Schritten:

  • Generierung der Schriftartendefinition
  • Deklaration der Schriftart im Skript

Generierung der Schriftartendefinition

Der erste Schritt ist die Generierung eines PHP-Skripts das alle Informationen über die Schriftart enthält, die von FPDF benötigt werden. Zusätzlich wird die Schriftartendatei komprimiert. Für diese Aufgabe steht das Hilfsskript makefont.php im Verzeichnis makefont der FPDF Installation zur Verfügung. Dieses Skript enthält die folgende Funktion:

MakeFont(string fontfile [, string enc [, boolean embed [, boolean subset]]])
fontfile Pfad zur .ttf, .otf oder .pfb Schriftartendatei
enc Name der zu verwendenden Kodierung. Standardmäßig: cp1252
embed Flag ob die Schriftart eingebettet werden soll. Standardmäßig: true
subset Flag ob ein Subset / eine Untermenge der Schriftart erstellt werden soll (basieren auf der gewählten Kodierung). Standardmäßig true

 

Parameter fontfile

Der erste Parameter ist der Name der Schriftartendatei. Die Erweiterung muss .ttf, .otf, oder .pfb sein und bestimmt den Schriftartentyp. Wenn die vorliegenden Type1 Schriftarten im ASCII Format (.pfa) sind, können diese mit Hilfe von t1utils in das Binärformat (.pfb) umgewandelt werden.

Für Type1 Schriftarten muss die zugehörige Metrik Datei (.afm) im selben Verzeuchnis vorhanden sein.

Parameter enc

Die mit dem zweiten Parameter festgelegte Zeichenkodierung definiert die Beziehung zwischen dem Ordinalwert eines Zeichens (0-255) und einem Zeichen. Die ersten 128 Zeichen sind dem ASCII Zeichensatz entsprechend immer gleich, die nachfolgenden können sich unterscheiden. Die Zeichenkodierungen sind in .map Dateien gespeichert. Folgende Zeichenkodierungen stehen zur Verfügung: 

  • cp1250 (Central Europe)
  • cp1251 (Cyrillic)
  • cp1252 (Western Europe)
  • cp1253 (Greek)
  • cp1254 (Turkish)
  • cp1255 (Hebrew)
  • cp1257 (Baltic)
  • cp1258 (Vietnamese)
  • cp874 (Thai)
  • ISO-8859-1 (Western Europe)
  • ISO-8859-2 (Central Europe)
  • ISO-8859-4 (Baltic)
  • ISO-8859-5 (Cyrillic)
  • ISO-8859-7 (Greek)
  • ISO-8859-9 (Turkish)
  • ISO-8859-11 (Thai)
  • ISO-8859-15 (Western Europe)
  • ISO-8859-16 (Central Europe)
  • KOI8-R (Russian)
  • KOI8-U (Ukrainian)

Die verwendete Schriftart muss die Zeichen entsprechend der verwendeten Zeichenkodierung bereitstellen. 

Parameter embed

Der dritte Parameter steuert, ob die Schriftart im PDF Dokument eingebettet werden soll (true), oder nicht (false). Wenn die Schriftart nicht im Dokument eingebettet wird, wird die Schriftart auf dem System, auf dem das Dokument angezeigt wird, gesucht. Der Vorteil bei ausgelagerten Schriftarten ist, dass das PDF Dokument kleiner wird, jedoch wird bei Nichtvorhandensein der Schriftart auf dem System eine Standardschriftart verwendet. Bei der Verwendung von ausgelagerten bzw. nicht eingebetten Schriftarten ist somit sicherzustellen, dass die Schriftart auf dem System, das zur Anzeige verwendet wird, installiert ist. Die Einbettung der Schriftarten wird allerdings empfohlen, da nur so eine korrekte Darstellung des Dokuments auf allen System garantiert werden kann.

Parameter subset

Der vierte und letzte Parameter steuert ob ein Subset / eine Untermenge der Schriftart erstellt werden soll, wodurch nur Zeichen verwendet werden die von der verwendeten Zeichenkodierung auch unterstützt werden. In der Regel wird die Größe des PDF Dokuments, in Abhänigkeit von der ursprünglichen Größe der Schriftart, dadurch erheblich reduziert.

Nachdem die Funktion aufgerufen wurde (in einem separaten Skript dass die Datei makefont.php inkludiert), wird eine .php Datei erzeugt die den Namen der Schriftartendatei trägt. Diese Datei kann nach Belieben umbenannt werden. Wenn die Schriftart eingebunden werden soll, wurde diese komprimiert (sofern die Erweiterung Zlib verfügbar ist) und eine separate Datei mit der Dateiendung .z erzeugt. Diese Datei kann ebenfalls umbenannt werden, jedoch ist dann die Änderung der Variable in der entsprechenden .php Datei erforderlich.

Beispiel

<?php
require('makefont/makefont.php');

MakeFont('C:\Windows\Fonts\comic.ttf','cp1252');
?>

erzeugt die Dateien comic.php und comic.z.

Diese erzeugten Dateien müssen im Anschluss in der font Verzeichnis kopiert werden. Wenn die Schriftartendatei nicht komprimiert werden konnte, kann diese direkt anstelle der .z Datei in das font Verzeichnis kopiert werden. 

Alternativ kann MakeFont() auch über die Kommandozeile aufgerufen werden:

php makefontmakefont.php C:WindowsFontscomic.ttf cp1252

Die Dateien für TrueType und OpenType Schriftarten können wahlweise auch online generiert werden.

Deklaration der Schriftart im Skript

Der zweite Schritt ist einfach. Mit der Methode AddFont() kann die Schriftart dem Dokument hinzugefügt werden:

$pdf->AddFont('Comic','','comic.php');

Damit ist die Schriftart wie jede andere auch ab sofort verwendbar (normal und unterstrichen). Wenn die Schriftart Comic Sans MS Bold (comicbd.ttf) umgewandelt wurde, würde diese folgendermaßen deklariert:

$pdf->AddFont('Comic','B','comicbd.php');

Beispiel

An diesem Beispiel wird die komplette Konveriterung und Verwendung der Schriftart Calligrapher demonstriert:

<?php
require('makefont/makefont.php'); MakeFont('calligra.ttf','cp1252');
?>

Das Skript erzeugt die folgende Ausgabe: 


Warning: character Euro is missing
Warning: character zcaron is missing
Font file compressed: calligra.z
Font definition file generated: calligra.php

The euro character is not present in the font (it's too old). Another character is missing too.

Alternativ wäre auch den Kommandozeilenaufruf möglich gewesen: 

php makefontmakefont.php calligra.ttf cp1252

Des weiteren steht die Option zur Online-Konvertierung zur Verfügung.

Die beiden erzeugten Dateien können nun in das font Verzeichnis kopiert und im Skript verwendet werden:

<?php
require('fpdf.php'); $pdf = new FPDF(); $pdf->AddFont('Calligrapher','','calligra.php'); $pdf->AddPage(); $pdf->SetFont('Calligrapher','',35); $pdf->Write(10,'Viel Erfolg mit neuen Schriftarten in FPDF!'); $pdf->Output();
?>