EPUB selbst erstellen

EPUB (electronic publication) ist ein offenes Format für E-Book Reader wie beispielsweise der Sony Reader PRS-505. Es bietet sich an selbstverfasste Texte und Artikel in diesem Format abzuspeichern und der Community der E-Book Leser komfortabel zugänglich zu machen.
Da es sich um einen offenen Standard handelt, darf jeder es einsetzen, weiterentwickeln und anpassen. EPUB basiert auf XML und XHTML bzw. HTML, was sich mit einigen wenigen Kenntnissen in Markup Languages (=Auszeichnungssprachen) beherrschen lässt. Im Folgenden gibt es eine kleine Anleitung, wie man selbst ein E-Book erstellt mit wichtigen Hinweise und Tipps, so dass man nicht über wichtige Details stolpert und am Ende die Lust verliert. Am Ende gibt es eine kleine Checkliste an der man prüfen kann, ob man nicht doch am Ende etwas übersehen hat.

EPUB beherrschen

Um eine EPUB-Datei zu erstellen benötigt man einen Texteditor (z. B.Notepad++) und ein Programm zum Komprimieren von Dateien (z. B. 7zip).

Eine EPUB-Datei ist ein komprimiertes Verzeichnis, das viele andere Dateien enthält. Jedes Kapitel, das Inhaltsverzeichnis und diverse andere Informationen wie Autor, Titel, Datum, Copyrights etc. liegen in eigenen Dateien vor. Dabei sieht das Grundgerüst für eine EPUB-Datei immer gleich aus. Man beginnt damit, dass man sich ein Verzeichnis anlegt. In diesem Verzeichnis legt man zwei weitere Verzeichnisse an: META-INF und OEBPS.

Mimetype

Diese Datei enthält nur eine einzige Zeile, die lediglich den Typ des gesamten Verzeichnisses festlegt. Die Zeile wird unverändert übernommen und in einer Datei namens "mimetype" ohne Dateityp in dem angelegten Verzeichnis gespeichert.

Mimetype-Datei:
application/epub+zip

container.xml

Auch diese Datei enthält eine festgeschriebene Information für die Software/Firmware der Geräte und wird in der Regel eins zu eins übernommen. Wichtig ist, dass der full-path auch wirklich auf die content.opf-Datei verweist. Bleibt man jedoch bei diesem Grundgerüst wie in dieser Anleitung beschrieben und hat keine Tippfehler in den Dateinamen, sollte es keine Probleme geben. Die container-Datei erhält den Typ XML und wird als container.xml im Verzeichnis META-INF gespeichert.

<?xml version="1.0"?>
<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
<rootfiles>
<rootfile full-path="OEBPS/content.opf" media-type="application/oebps-package+xml"/>
</rootfiles>
</container>

content.opf

In dieser Datei im opf-Format werden Eckdaten des E-Books festgehalten. Zum einen wird hier festgelegt welche ID (=Identität) das E-Book hat, wer der Autor ist, wo es publiziert wurde und zum anderen sind alle Kapitel, das Inhaltsverzeichnis und das Stylesheet aufgeführt mit einer Referenz.
Wichtig ist hier, dass diese Datei in UTF-8 Kodierung abgespeichert wird. Sonst wird nachher im E-Book Reader nur der Hinweis angezeigt, dass das E-Book fehlerhaft ist (spätestens dann, wenn der Titel oder der Autor Umlaute enthält).
Auch ist hier wieder darauf zu achten, dass die Pfade zu den anderen Dateien richtig gesetzt sind.
Die Datei wird mit dem Namen content.opf im Verzeichnis OEBPS abgespeichert.

<?xml version="1.0"?>
<package version="2.0" xmlns="http://www.idpf.org/2007/opf" unique-identifier="BookId">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
<dc:title>Titel des E-Books</dc:title>
<dc:creator>Autor</dc:creator>
<dc:language>de</dc:language>
<dc:rights>Copyrights</dc:rights>
<dc:publisher>Veröffentlicher</dc:publisher>
<dc:identifier id="bookid" opf:scheme="sonybookid">urn:uuid:E-Book ID</dc:identifier>
<meta name="conformableto" content="Sony:PRS-505" />
<meta name="imprint" content="" />
<meta name="identifier" opf:scheme="urn" content="urn:uuid:E-Book ID" />
</metadata>
<manifest>
<item id="style" href="stylesheet.css" media-type="text/css"/>
<item id="pagetemplate" href="page-template.xpgt" media-type="application/vnd.adobe-page-template+xml"/>
<item id="titlepage" href="title.xhtml" media-type="application/xhtml+xml"/>
<item id="hinweis" href="hinweis.xhtml" media-type="application/xhtml+xml"/>
<item id="K1" href="Kapitel1.xhtml" media-type="application/xhtml+xml"/>
<item id="ncx" href="tox.ncx" media-type="application/x-dtbncx+xml"/>
</manifest>
<spine toc="ncx">
<itemref idref="titlepage"/>
<itemref idref="hinweis"/>
<itemref idref="K1"/>
</spine>
</package>

An sich müssen nur die kursiven Teile in diesem Code angepasst werden. Die E-Book ID kann eine Zahl sein oder eine Mischung aus Buchstaben (auch Worten) und Zahlen (z. B. Test001).
Die Items titlepage, hinweis, K1 sind die jeweiligen Bestandteile des E-Books. Jedes E-Book hat normalerweise ein Cover (titlepage), Hinweise (Copyrights, Danksagungen, sonstiges) und natürlich die einzelnen Kapitel. Dabei steht jedes Item für einen Teil des Buches mit der Referenz zur datei, die dann den Inhalt enthält (href="Pfad"). An dieser Stelle können natürlich beliebig viele Teile hinzugefügt werden. Die Items stylesheet, pagetemplate, ncx sind feste Bestandteile. Das Stylesheet legt bestimmte Formatierungen fest, das Pagetemplate ist für die richtige Darstellung des Textes auf den Endgeräten verantwortlich und in der ncx-Datei steht das Inhaltsverzeichnis.

page-template.xpgt

Das Pagetemplate wird einfach genauso übernommen und nicht verändert. Gespeichert wird das Template wieder im Verzeichnis OEBPS mit dem Namen page-template.xpgt.

<ade:template xmlns="http://www.w3.org/1999/xhtml" xmlns:ade="http://ns.adobe.com/2006/ade" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="single_column">
<fo:region-body margin-bottom="3pt" margin-top="0.5em" margin-left="3pt" margin-right="3pt"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="single_column_head">
<fo:region-before extent="8.3em"/>
<fo:region-body margin-bottom="3pt" margin-top="6em" margin-left="3pt" margin-right="3pt"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="two_column" margin-bottom="0.5em" margin-top="0.5em" margin-left="0.5em" margin-right="0.5em">
<fo:region-body column-count="2" column-gap="10pt"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="two_column_head" margin-bottom="0.5em" margin-left="0.5em" margin-right="0.5em">
<fo:region-before extent="8.3em"/>
<fo:region-body column-count="2" margin-top="6em" column-gap="10pt"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="three_column" margin-bottom="0.5em" margin-top="0.5em" margin-left="0.5em" margin-right="0.5em">
<fo:region-body column-count="3" column-gap="10pt"/>
</fo:simple-page-master>
<fo:simple-page-master master-name="three_column_head" margin-bottom="0.5em" margin-top="0.5em" margin-left="0.5em" margin-right="0.5em">
<fo:region-before extent="8.3em"/>
<fo:region-body column-count="3" margin-top="6em" column-gap="10pt"/>
</fo:simple-page-master>
<fo:page-sequence-master>
<fo:repeatable-page-master-alternatives>
<fo:conditional-page-master-reference master-reference="three_column_head" page-position="first" ade:min-page-width="80em"/>
<fo:conditional-page-master-reference master-reference="three_column" ade:min-page-width="80em"/>
<fo:conditional-page-master-reference master-reference="two_column_head" page-position="first" ade:min-page-width="50em"/>
<fo:conditional-page-master-reference master-reference="two_column" ade:min-page-width="50em"/>
<fo:conditional-page-master-reference master-reference="single_column_head" page-position="first" />
<fo:conditional-page-master-reference master-reference="single_column"/>
</fo:page-sequence-master>
</fo:layout-master-set>
<ade:style>
<ade:styling-rule selector=".title_box" display="adobe-other-region" adobe-region="xsl-region-before"/>
</ade:style>
</ade:template>

stylesheet.css

In dem Stylesheet können eigene Textstrukturierungselemente festgelegt werden. Da die E-Book Reader jedoch nicht so mächtig sind in der Darstellung, bezieht sich das Stylesheet fast ausschließlich auf die Schrift und die Positionierung des Textes. Im Folgenden ist in dem Stylesheet nur festgehalten, dass die Schrift für Überschriften mittig angeordnet wird und die Texte im allgemeinen Abstand zu den Rändern der Seite haben (margin). Viel mehr Möglichkeiten zur Gestaltung gibt es kaum und ist auch nicht wirklich notwendig.
Gespeichert wird die stylesheet.css ebenfalls wieder im Verzeichnis OEBPS.

body
{
margin-left: 5%;
margin-right: 5%;
margin-top: 5%;
margin-bottom: 5%;
text-align: justify;
}
h1
{
text-align: center;
}
h2
{
text-align: center;
}
h3
{ text-align: center;
}
h4
{
text-align: center;
}

tox.ncx

Wie schon oben kurz beschrieben, wird das Inhaltsverzeichnis, welches von den E-Book Readern angezeigt wird, in der tox.ncx Datei gespeichert. Die Items, die bereits in der content.opf aufgeführt wurden und den Inhalt des Buches beinhalten, werden hier in einer Navigation gespeichert. Dabei wird die ID der einzelnen Navigationspunkte (navPoint) einfach hochgezählt. Die playOrder (Aufrufanordnung) gibt die Reihenfolge, wie die einzelnen Teile aufgeführt werden sollen, wieder. Stimmt diese nicht, wird der Nutzer beim Lesen des Buches (von vorne nach hinten) wild in den Kapiteln umherspringen und das möchte man eigentlich nicht. Außerdem ist unbedingt darauf zu achten, dass die Anordnung der Teile bzw. Kapitel wie sie später vom Reader dargestellt werden in der content.opf festgelegt werden. Also als Item zuerst Kapitel 1 und dann aufwärts gehen und nicht mit Kapitel 9 in der content.opf beginnen. Sonst hat man beim Reader die unkomfortable Situation, dass Kapitel 9 zuerst im Inhaltsverzeichnis aufgeführt wird.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN" "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd">
<ncx version="2005-1" xml:lang="en-US" xmlns="http://www.daisy.org/z3986/2005/ncx/">
<head>
<meta name="dtb:uid" content="E-Book ID"/>
<meta name="dtb:depth" content="1"/>
<meta name="dtb:totalPageCount" content="0"/>
<meta name="dtb:maxPageNumber" content="0"/>
</head>
<docTitle><text>Titel</text></docTitle>
<navMap>
<navPoint id="navpoint-1" playOrder="1">
<navLabel>
<text>Deckblatt</text>
</navLabel>
<content src="title.xhtml"/>
</navPoint>
<navPoint id="navpoint-2" playOrder="2">
<navLabel>
<text>Hinweis</text>
</navLabel>
<content src="hinweis.xhtml"/>
</navPoint>
<navPoint id="navpoint-3" playOrder="3">
<navLabel>
<text>Kapitel 1</text>
</navLabel>
<content src="Kapitel1.xhtml"/>
</navPoint>
</navMap>
</ncx>

Es müssen an sich wieder nur die kursiven Teile angepasst werden. Die E-Book ID muss natürlich mit der aus content.opf überienstimmen. Die Struktur eines jeden Navigationspunktes ist gleich und es können beliebig viele hinzugefügt werden. Wichtig ist wieder, dass die Pfade richtig gesetzt sind und die Datei genau wie die content.opf in der UTF-8 Kodierung abgespeichert wird, sonst tritt ein Fehler auf, wenn Text mit Umlaufen dargestellt werden soll.
Die Datei wird wieder im Verzeichnis OEBPS als tox.ncx gespeichert.

title.xhtml

Nach dem formalen Teil kann man nun beginnen das E-Book mit Inhalt zu befüllen. Es bietet sich meistens an ein Cover zu gestalten. Dafür strukturiert man den Text und eventuell auch Bilder in einer HTML-Datei.

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Title</title>
<link href="stylesheet.css" type="text/css" rel="stylesheet" />
<link rel="stylesheet" type="application/vnd.adobe-page-template+xml" href="page-template.xpgt"/>
</head>
<body>
<div>
<p> </p>
<h1>Buchtitel</h1>
<p> </p>
<h3>Autor</h3>
</div>
</body>
</html>

Die kursiven Teile können wieder ausgetauscht und angepasst werden und schon hätte man ein Deckblatt wo in großen Lettern der Buchtitel genannt wird und etwas weiter darunter und kleiner der Autor. Beides wird aufgrund des Stylesheets zentriert angezeigt. Die title.xhtml wird im Verzeichnis OEBPS gespeichert.

hinweis.xhtml

Diese Datei ist genauso aufgebaut wie title.xhtml, nur wird sie mit anderem Inhalt befüllt.

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Titel</title>
<link href="stylesheet.css" type="text/css" rel="stylesheet" />
vlink rel="stylesheet" type="application/vnd.adobe-page-template+xml" href="page-template.xpgt"/>
</head>
<body>
<div>
<h3>Hinweis</h3>
<p>
Das ist ein Test - hier kommt Text rein: copyrights, Danksagungen etc.
</p>
<p>
Viel Spaß beim Lesen! Oder auch anderes kann man hier reinschreiben.
</p>
</div>
</body>
</html>

An sich braucht man auch hier nur die kursiven Teile durch sinnvolle Passagen ersetzen und das ganze dann unter hinweis.xhtml im Verzeichnis OEBPS speichern.

Kapitel1.xhtml

Nachdem man nun schon das Deckblatt und eine Hinweisseite für das E-Book hat kommt man nun zum ersten Kapitel. Das kann natürlich auch anders heißen (Prolog, Artikel, Geschichte) je nach Verwendung.

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Kapitel 1</title>
<link href="stylesheet.css" type="text/css" rel="stylesheet" />
<link rel="stylesheet" type="application/vnd.adobe-page-template+xml" href="page-template.xpgt"/>
</head>
<body>
<div>
<h1>Kapitel 1</h1>
<p>
blablablubb - Das ist ein Absatz.
</p>
<p>
blablablubb - Das ist weiterer ein Absatz.
</p>
</div>
</body>
</html>

In diese Datei wird der gesamte Inhalt des ersten Kapitels eingepflegt. Dabei muss man sich keine Gedanken darüber machen, wo denn im E-Book eine Seite aufhört bzw. anfängt. Das macht der Reader automatisch. Es mutet sicherlich für Nutzer, die vorher noch nicht viel oder gar nicht mit HTML in Berührung gekommen sind merkwürdig an, aber man muss sich klar sein, dass immer ein ganzer Teil des E-Books in einer Datei gespeichert wird.
Kapitel1.xhtml wird wieder im Verzeichnis OEBPS gespeichert.

EBUP-Datei

Nun ist man fast an seinem Ziel. Man erstellt sich ein weiteres Verzeichnis und bennent es so, dass man den Verzeichnisnamen später einem E-Book zuordnen kann. Dieses leere Verzeichnis wird nun komprimiert zu ZIP. Jetzt kopiert man die Verzeichnisse OEBPS, META-INF und die Datei mimetype in das komprimierte Verzeichnis. Das ist wohl ein kleiner Kunstgriff, weil es sonst unlogisch erscheint, denn in keinem Fall dürfen OEBPS, META-Inf und mimetype komprimiert werden! Als letzten Schritt benennt man das ZIP-Verzeichnis um, indem man .zip durch .epub ersetzt und fertig ist das eigene E-Book.
Jetzt nur noch auf den E-Book Reader kopieren und in Ruhe lesen. Sollte der Reader anzeigen, dass die Seite fehlerhaft ist, einfach noch einmal die Anleitung prüfen, ob man alles beachtet hat. Denn leider ist die Firmware auf dem Reader nicht so robust und zeigt bei den kleinsten Fehlern nichts mehr an außer ein Warnschild.

Checkliste, wenn der Reader nichts anzeigt: