Blog

DocBook, FOP und Schriftarten

Wilfred Springer

Wilfred Springer

Aktualisiert Oktober 23, 2025
3 Minuten

Ich kann mit Stolz sagen, dass ich in den sechs Jahren, die ich bei dem Unternehmen, das früher als Sun Microsystems bekannt war, beschäftigt war, alle meine Dokumente in DocBook geschrieben habe. Natürlich gab es gelegentlich die Warnung, dass von uns allen erwartet wurde, StarOffice zu verwenden, aber indem ich dafür sorgte, dass die von DocBook erzeugte Ausgabe den von der Zentrale produzierten Druckerzeugnissen ähnelte, kam es nie zu einem großen Streit. Und da meine gesamte DocBook-Kette auf Open Source basierte, musste ich Apache FOP verwenden.

Der Apache FOP hat eine lange Geschichte. Aus irgendeinem Grund scheint es unmöglich zu sein, jemals eine Version 1.0 zu erreichen. Die Versionen, die ich bei Sun verwendet habe, unterstützten leider nie das keep-with-next-Poperty, was zu seltsamen Seitenenden führte, die ich dann manuell korrigieren musste. Das Problem wurde jedoch mit den neuesten Versionen gelöst und ich denke, dass die von den DocBook-Stylesheets erzeugte Ausgabe ganz in Ordnung sein kann.

Das heißt, wenn Sie sie anpassen. Und während Sie sie anpassen, möchten Sie vielleicht auch andere Schriftarten als die Standardschriftarten verwenden. Wenn Sie jedoch Apache FOP verwenden, bringt es Sie nicht weiter, einfach auf alternative Schriftarten zu verweisen. Sie müssen auch sicherstellen, dass die Schriftmetriken gefunden werden können. Und wenn Sie diese Schriftmetrikdateien noch nicht haben, müssen Sie sie erst einmal generieren.

Apache FOP bietet einige Hilfsprogramme für die Erstellung von Schriftmetriken, aber keines davon basiert auf Maven. Wenn Sie das Maven Docbkx Plugin verwenden, dann möchten Sie vielleicht etwas, das sich in Maven integriert. Letztes Wochenende habe ich festgestellt, dass - obwohl das Maven Docbkx Plugin so etwas unterstützt - dies wahrscheinlich eines seiner bestgehüteten Geheimnisse ist.

Das ist also die Art und Weise, wie Sie es verwenden.

Ein Plugin hinzufügen

Als Erstes müssen Sie ein Plugin im Bereich Plugins hinzufügen.

<Plugin>
  <groupId>com.agilejava.docbkx</groupId>
  <artifactId>docbkx-fop-unterstützung</artifactId>
  <Hinrichtungen>
    <Ausführung>
      <Phase>Vor der Website</phase>
      <Ziele>
        <Ziel>erzeugen</goal>
      </goals>
      <Konfiguration>
        <ansi>true</ansi>
        <sourceDirectory>...</sourceDirectory>
      </configuration>
    </execution>
  </executions>
</plugin>

Der Parameter sourceDirectory verweist auf ein Verzeichnis, das die .ttf-Dateien enthält. Um ganz ehrlich zu sein, weiß ich nicht mehr genau, worum es bei dem ansi-Parameter ging, aber AFAIR hatte er etwas mit der Möglichkeit zu tun, die Dokumente zu durchsuchen. (Wichtiger Hinweis: Es kann sich auch um etwas ganz anderes handeln. Sie können gerne die FOP-Dokumentation durchforsten, um zu verstehen, worum es geht).

Wie ich bereits sagte, sind die Schriftmetrikdateien erforderlich, um etwas zu erreichen. Die bloße Erzeugung der Dateien wird jedoch keinen großen Unterschied machen. Um die Vorteile dieser Metrikdateien nutzen zu können, müssen Sie dem Maven Docbkx Plugin mitteilen, was es damit tun soll.

Als erstes sollten Sie der Konfiguration des Maven Docbkx Plugins einige Schrift-Metadaten hinzufügen:

<Schriftarten>
<Schriftart>
  <Name>Calibri</name>
  <Stil>normal</style>
  <Gewicht>normal</weight>
  <embedFile>${fonts.dir}/calibri.ttf</embedFile>
  <metricsFile>${basedir}/target/fonts/calibri-metrics.xml</metricsFile>
</font>
</fonts>

Das sollte ausreichen, damit das Plugin von der Existenz dieser Schriftart weiß und ihren Namen in die erforderlichen Metadaten auflösen kann. Damit ist es ziemlich einfach, das Plugin dazu zu bringen, diese Schriftart zu verwenden. Sie können den Namen der Schrift an allen Stellen verwenden, an denen die Stylesheets auf einen Schriftnamen verweisen. Im Folgenden wird also die Schriftart des Körpers in Calibri geändert.

<bodyFontFamily>Calibri</bodyFontFamily>

Verfasst von

Wilfred Springer

Contact

Let’s discuss how we can support your journey.