Reinhard Fößmeier, IT-Beratung → Textverarbeitung → ePUB mit Linux erzeugen


ePUB-Bücher erzeugen mit Linux

Das elektronische Buchformat ePUB ist eines von mehreren wichtigen Formaten für digitale Bücher. Texte, die in einem anderen Format vorliegen, lassen sich in ePUB konvertieren (dazu gibt es kommerzielle Programme, aber auch offene wie calibre). Zwar sind die Ergebnisse nicht immer perfekt, wenn zum Beispiel in PDF-Texten Seitenkopf- und -fußzeilen oder mehrspaltiger Druck nicht mehr sicher identifiziert werden können, aber man erhält oft ein lesbares Ergebnis.
Das Format ePUB beruht auf offenen Standards wie XHTML und CSS, daher kann man Texte, die in HTML vorliegen, gut in ePUB umwandeln. Damit behält man eine gute Kontrollle über das Verfahren, und auch wenn es mehr Arbeit macht, sind die Ergebnisse oft besser als bei Konvertierung aus anderen Formaten. Wenn man einen neuen ePUB-Text anlegt, bietet die direkte Erstellung der XHTML-Daten sehr gute Möglichkeiten, das Endergebnis nach seinen Wünschen zu beeinflussen.
Das hier beschriebene Verfahren benötigt nur die Kommandos make, zip und rm.
Zuerst wird die Dateistruktur des E-Buchs im Dateisystem aufgebaut, anschließend mit zip in ein Archiv gepackt. Sie sieht aus wie in der folgenden Übersicht. Einige Elemente sind zwingend, andere könnten auch anders heißen; die Namen inhalt und xyz sind frei gewählt, META-INF und container.xml sind dagegen fest, und auch die Endungen .opf und .ncx sind zwingend vorgeschrieben.
Dateistruktur / dosiera strukturo
inhalt Verzeichnis für den eigentlichen Buchinhalt
 – Epub_logo_color.svg.png Ein Bild, das im Buch vorkommt
 – kapitel1.xhtml Das erste Kapitel des Buches
 – kapitel2.xhtml Das zweite Kapitel des Buches
 – meinstil.css Stil-Angaben, die in Xhtml eingebunden werden
xyz.ncx Datei mit einem Inhaltsverzeichnis
xyz.opf Datei mit Meta-Informationen zum Buch und seiner Struktur
Makefile Projektdatei, siehe unten
META-INF/container.xml Gibt an, wo die Buchbeschreibungsdatei (xyz.opf) zu finden ist.
mimetype Formatbeschreibung mit dem festen Inhalt application/epub+zip (20 Bytes).
Makefile
Wenn wir das E-Buch mal "xyz.epub" nennen wollen, sieht das Makefile zum Zusammenbauen des Archivs folgendermaßen aus:
  xyz.epub:	META-INF/container.xml \
		xyz.opf xyz.ncx \
		inhalt/*.xhtml \
		inhalt/*.png \
		inhalt/*.css 
Hier die Dateien, von denen das Ergebnis abhängt.
	rm -f xyz.epub 
Zuerst wird das alte Buch – falls schon eines da war – gelöscht.
	zip -X -0 xyz.epub     mimetype
  
Die Datei mimetype muss ohne Komprimierung geschrieben werden.
	zip xyz.epub     META-INF/container.xml 
Die Datei container.xml muss im Verzeichnis META-INF stehen.
	zip xyz.epub     xyz.opf
	zip xyz.epub     xyz.ncx  
Diese beiden Dateien beschreiben Inhalt und Struktur des Buches.
	zip xyz.epub     inhalt/*.xhtml
	zip xyz.epub     inhalt/*.png
	zip xyz.epub     inhalt/*.css  
Hier wird der eigentliche Inhalt des Buches mit Stil-Angaben und Bildern angehängt.
mimetype
Die Datei mimetype enthält genau 20 Bytes mit dem ASCII-Text "application/epub+zip" (ohne Anführungszeichen). Der Text wird nicht durch einen Zeilenwechsel abgeschlossen. Hier können Sie diese Datei herunterladen; sie ist für alle ePUB-Bücher gleich.
META-INF/container.xml
Die Datei container.xml gibt an, wo die OPF-Datei des Buches liegt, und zwar nicht relativ zum Verzeichnis META-INF, sondern zur Wurzel. Es ist am einfachsten, die OPF-Datei in das Wurzelverzeichnis, also neben META-INF, zu stellen. Dann ist container.xml folgendermaßen aufgebaut:
    <?xml version="1.0"?>
    <container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
       <rootfiles>
          <rootfile full-path="xyz.opf" media-type="application/oebps-package+xml"/>
       </rootfiles>
    </container>
Bis auf den Dateinamen xyz.opf ist der Inhalt immer gleich.
xyz.opf

Die Datei xyz.opf beschreibt den Inhalt des E-Buchs, enthält also Metainformationen. Ihr Aufbau ist etwas komplex, eine Beschreibung würde den Rahmen dieser Kurzanleitung sprengen. Wichtig ist der Abschnitt manifest, der die einzelnen Bestandteile des Buches beschreibt; das sind zum Beispiel Kapitel und Bilder, aber auch Schriftdateien.

Hier lassen sich auch Angaben zu Autor, Herausgeber, Übersetzer und sonstigen Beitragenden machen.

xyz.ncx
Die Datei xyz.ncx ist eine Art Inhaltsverzeichnis. Ihr Abschnitt <navMap> beschreibt die Reihenfolge der Teile (Kapitel), ähnlich wie auch der Abschnitt <spine> der Datei xyz.opf.
inhalt
Im Verzeichnis inhalt, dessen Name frei wählbar ist, steht der Buchinhalt in Form von Xhtml-Dateien und ggf. Bildern, sowie Stil-Angaben in CSS-Dateien. Wenn ein Buch viele Dateien umfasst, kann man hier Unterverzeichnisse anlegen. Die Reihenfolge der Dateien ist in xyz.opf und xyz.ncx beschrieben.

Mit dem Aufruf make lässt sich das fertige ePUB-Buch aus seinen Bestandteilen (8 Dateien) zusammenbauen. Und hier ist es: xyz.epub! Alle acht Teile kann man mit dem Kommando unzip auspacken.

Hier ist das zugehörige Makefile. Es enthält am Ende einen Aufruf des Kommandos epubcheck, das die Struktur des E-Buches auf Fehler überprüft – eine nützliche Sache, aber natürlich nicht unbedingt nötig.


Autor: Reinhard Fößmeier