webPUBi v0.4

webPUBi erschließt allen HTML-Browsern auf einfache Weise die Inhalte von ePUB-Dateien. Der Trick ist, dass ein minimalistischer Web-Server die Anfragen der HTML-Browser entgegen nimmt, die passenden Daten aus den ePUB-Dateien rausholt, bei Bedarf ein klein wenig anpasst und den Bowsern als HTML-, Jpg- oder Png-Dateien ausliefert.

So kann, wer will, z. B. mit dem Smart-TV oder jedem anderen netzwerkfähigem Gerät, auf dem ein HTML-Browser läuft, seine ePUBs lesen. Download webPUBi.zip.

Zur Steuerung der Seiten stehen die normalen Navigationsmöglichkeiten des Browsers zur Verfügung (z. B. Seite rauf/runter) wie auch einige Zusatzfunktionen, die webPUBi per JavaScript in die ePUB-Seiten integriert.
Tastaturbefehle:
Textgröße ändern: Strg +/–
Kapitelanfang/-ende: Pos1/Ende
Menü öffnen/schließen: Taste M
Ein paar Zeilen scrollen: Pfeil rauf/runter
Eine Seite scrollen: Bild rauf/runter
Voriges/nächstes Kapitel: Pfeil links/rechts

Die Einrichtung ist einfach:

Nach dem Start zeigt webPUBi die IP-Adresse, unter der es von anderen Geräten aus erreichbar ist, in der Titelzeile an.

Die korrekte Adressierung im Browser ist dann z. B.
http://192.168.0.10

So funktioniert's im Detail

Im einfachsten Fall kann webPUBi mit einem Doppelklick gestartet werden. Es gibt aber auch ein paar Konfigurationsmöglichkeiten.

Optionale Aufrufparameter

Die eckigen Klammer [ und ] kennzeichnen optionale Parameter.

webPUBi [-port num] [-booksroot dir] [-noonload] [-help]

-port num
Der HTTP-Server in webPUBi startet normalerweise auf Port 80. Das ist HTTP-Standard. Wer den Server auf einen anderen Port legen will, kann das mit dem port-Parameter machen.
Beispiel: webPUBi -port 81
 
-booksroot dir
dir ist das Verzeichnis, in dem die ePUBs liegen bzw. in dessen Unterverzeichnissen die ePUBs liegen.

Wenn webPUBi.exe beim Start bereits bei den ePUB-Dateien liegt, ist das booksroot-Verzeichnis automatisch richtig eingestellt. Wenn webPUBi.exe nicht aus dem ePUBs-Verzeichnis gestartet wird, muss man webPUBi das booksroot-Verzeichnis per Parameter mitteilen.

Das geht z. B. indem man eine Verknüpfung anlegt (Kontextmenü > neu > Verknüpfung) oder eine Bat-Datei ertellt.
Beispiel: webPUBi -booksroot c:\eBook\

Hinweis: Wenn der Pfad Leerstellen enthält, muss er in Anführungszeichen eingefasst werden.
Beispiel: webPUBi -booksroot "c:\Dokumente und Einstellungen\Standard\Eigene Dateien\Eigene Bücher\"

-noonload
JavaScript nicht in ePUB integrieren. D. h. die HTML-Menüs in ePUB-XML-Seiten nicht einschalten (kein onload in den body-Tag der HTML-Dateien eintragen). Die Navigation in den ePUBs ist dann etwas mühsamer, sollte aber trotzdem funktionieren.

Die Kapitel können über das normale (automatisch für jedes ePUB erzeugte) Inhaltsverzeichnis erreicht werden. Da ohne JavaScript das Weiterschalten zum nächsten Kapitel nicht funktioniert, kann man z. B. das Kontextmenü der Web-Browsers öffnen, dort Zurück auswählen und dann zum nächsten Kapitel surfen.
 

-help
Zeigt eine kurze Info zu den Aufrufparametern an.

Die Datei "index.html" für die eigenen Bücher anpassen

Im booksroot-Verzeichis sollte eine Datei namens index.htm liegen. Natürlich kann man die Links auch direkt in das Browser-Adressfeld eintippen, wenn die korrekten Links in index.htm stehen, ist das aber bequemer.

Angenommen es gibt zwei ePUB-Dateien.
Buch A von Autor Soundso.epub und
Buch B von Autor Dingsda.epub

Dann sieht die Datei index.htm mit den Links zu den Büchern im einfachsten Fall so aus:

<html><body>
 
<p><a href="Buch A von Autor Soundso.epub/">
            Buch A von Soundso </a>
 
<p><a href="Buch B von Autor Dingsda.epub/">
            Buch B von Dingsda </a>
 
</body></html>

Wichtig ist der abschließende Querstrich (Slash in Rot) am Ende der Linkadresse. Der Querstrich ist notwendig, damit der HTML-Browser die ePUB-Dateien wie Verzeichnisse behandelt. In der Folge wird er alle internen Links im E-Book z. B. zu Grafiken richtig adressieren.

Tipp: HTML-Links können mit einer "Zugriffstaste" (engl. accesskey) versehen werden. Beispiel: <a accesskey="g" href="#jumpG" name="jumpG">Autoren G</a>
Dann wird der Link vom Browser angesprungen, wenn man die Alt-Tastenkombination drückt.
IE: Alt + g dann Focus auf Autoren G, mit Return ausführen
Firefox: Shift + Alt + g sofort zu g (jumpG) springen
Safari: Strg + Alt + g sofort zu g (jumpG) springen
Chrome: Alt + g sofort zu g (jumpG) springen
Manche Tastenkombinationen können auch vom Browser benutzt sein und funktionieren dann nicht wie gewünscht. Testen.

ePUBs mit DRM. ePUBs entzippen/zippen.

webPUBi liest nur ePUBs ohne DRM.

Wer selbst an ePUBs bastelt, wird es vielleicht ganz nützlich finden, dass webPUBi auch mit Verzeichnis-ePUBs arbeitet.

Verzeichnis-ePUBs können z. B. einfach durch entzippen von ePUBs erzeugt werden:

ePUB zippen

Wer ein Verzeichnis-ePUB zippen will, um eine reguläre ePUB-Datei zu erzeugen, sollte zuerst die Datei mimetype in die jungfräuliche Zip-Datei einfügen. (Die Datei enthält die Zeichenfolge application/ePUB+zip und wird eventuell von Viewern oder Readern genutzt, um ePUB-Dateien als solche zu identifizieren, und muss in der Zip-Datei als erste Datei gespeichert sein.)

Danach können die restlichen Verzeichnisse und Dateien in die Zip-Datei integriert werden.

Wikipedia zu ePUB.
Google zu freie ePUB.

Ein paar Worte zur Sicherheit

webPUBi hat einen HTTP-Server eingebaut und ist somit ein potentielles Sicherheitsrisiko.

Bei den meisten DSL-Routern ist die Firewall so eingestellt, dass keine Zugriffe von außerhalb durchgelassen werden. Das heißt, selbst wenn webPUBi im lokalen Netz über WLAN oder Kabel Dateien ausliefert, ist webPUBi vom Internet aus nicht erreichbar. Dazu müsste der Port in der Router-Firewall freigegeben werden.

webPUBi greift nur auf Dateien und Verzeichnissen im booksroot-Verzeichnis zu.

/********************************************************
Ab hier gibt's nur noch HTML-/ePUB-Nerd-Zeug
zu lesen.

Wen die Internas nicht weiter interessieren, kann
sich den folgende Text sparen.
********************************************************/

Die Vorlagen-Datei "index.forms.html"

In der Datei index.forms.html wird das Aussehen des Inhaltsver­zeich­nisses zu jeder ePUB-Datei bestimmt.

Bitte nicht verwirren lassen. Es gibt eine index.htm-Datei, die die Links auf die einzelnen Bücher enthält, und eine weitere index.htm für jedes Buch. Diese zweite index.htm wird immer dann dynamisch von webPUBi erzeugt, wenn ein Browser eine HTTP-Anfrage zu einem ePUB absetzt.

Wie diese index.htm-Datei im Detail aussieht, kann mit den Format­vorlagen in index.forms.html bestimmt werden.

Die Formatvorlagen in index.forms.html sind durch spezielle Kommen­tare gekennzeichnet und werden durch diese speziellen Kommentare von webPUBi erkannt, herausgefilter mit dem Inhalt der ePUBs gemischt und als HTML-Seite an den Browser geschickt.

Außerdem gibt es Platzhalter, die dadurch kenntlich sind, dass sie mit Prozentzeichen anfangen und enden.
Beispiele: %docTitle%, %docAuthor%, %navPoint%.

Die Funktionsweise des ganzen Systems ist recht einfach, obwohl es auf den ersten Blick verwirrend aussieht.

Die Informationen werden aus den ePUBs ermittelt. An den Stellen in die Formatvorlagen eingetragen, wo die Platzhalter stehen. Diese neuen Blöcke werden wieder bei anderen Vorlagen anstelle der Platzhalter eingefügt, bis das HTML-Inhaltsverzeichnis des ePUBs fertig ist und als ePUB/index.htm zum Browser geschickt wird.

Wichtig: Die ganze Vorlage sollte immer als UTF-8 gespeichert werden. Keinesfalls als Unicode speichern. Wenn sie als Ansi-Datei gespeichert wird, werden z. B. Umlaute nicht richtig dargestellt.

Formatvorlage für die HTML-Seite

Anfang: <!-- Index-Form -->
<html>
<head
<title>%docTitle% von %docAuthor%</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<style> body { font-family: sans-serif; } </style>
</head>
<body>
<h1>%docTitle%</h1
<h2>%docAuthor%</h2>
<h3>Inhalt</h3>
 
%navPoints%
 
</body>
</html>
Ende: <!-- Index-Form end -->
%docTitle%
Titel des E-Books. Aus dem gleichnamiger Eintrag aus der ncx-Datei des ePUBs.
%docAuthor%
Autor des E-Books. Aus dem gleichnamiger Eintrag aus der ncx-Datei des ePUBs.
%navPoints%
Hier werden die gesammelten Inhaltsverzeichniseinträge eingesetzt.

Formatvorlage für die Hierarchie des Inhaltsverzeichnisses

Anfang: <!-- navPoints-Open-Form -->
<ul>%notUsed-hrefs%
Ende: <!-- navPoints-Open-Form end -->
Anfang: <!-- navPoints-Close-Form -->
</ul>
Ende: <!-- navPoints-Close-Form end -->
%notUsed-hrefs%
(siehe nächster Abschnitt)

Formatvorlage für den einzelnen Inhaltsverzeichniseintrag

Anfang: <!-- navPoint-Form -->
<li><a href="%src%">%text%</a>
%notUsed-hrefs%</li>
Ende: <!-- navPoint-Form end -->
%src%
Die Linkadresse zum nächsten Kapitel des E-Books entsprechend des navPoint-Eintrags der ncx-Datei.
%text%
Die Benennung des Kapitels entsprechend des Textabschnitts im navPoint-Eintrags der ncx-Datei.
%notUsed-hrefs%
In manchen Büchern sind nicht alle Kapitel in der ncx-Datei verzeichnet. Damit sie beim Browsen trotzdem erreichbar sind, werden sie durchnummeriert bei %notUsed-href%-Platzhaltern eingesetzt. Diese Sammlungen landen dann schlussendlich hier beim %notUsed-hrefs%-Platzhalter.

Formatvorlage für 'nicht benutzte' Einträge

Anfang: <!-- notUsed-hrefs -->
<br /><small>%hrefs%</small>
Ende: <!-- notUsed-hrefs end -->
Anfang: <!-- notUsed-href -->
<a href="%href%">[ %lfn% ]</a> ▪
Ende: <!-- notUsed-href end -->
%hrefs%
Hier werden die gesammelten 'nicht genutzten' Einträge das erste Mal eingesetzt. Das Resultat dieser Einsetzung wird dann noch mal bei der navPoint-Form beim Platzhalter %notUsed-hrefs% eingesetzt.
%href%
Die Linkadresse zum Kapitel des 'nicht genutzten' Eintrags.
%lfn%
Die laufende Nummer der internen Kapitelauflistung.

Die JavaScript-Menüs

Die Menüs sind in der Datei index.js enthalten.

Wer ein bisschen JavaScript-kundig ist, kann sich eventuell eigene Funktionen dazuprogrammieren.

Als kleine Demo für eine solche Anpassung ist eine JavaScript-Funktion enthalten, die die Textanzeige invertiert (den Hintergrund schwarz macht und den Text weiß).

Am Anfang jeder ePUB-HTML-Datei sind ein paar globale Variablen eingetragen (relative Pfade zur [Bücher-] index.htm etc.). Am besten lässt man sich die von webPUBi ausgelieferte HTML-Datei als Quelltext anzeigen, alles Weitere steht dann in index.js im booksroot-Verzeichnis.

Ich würde mich freuen von netten Ideen zu hören, was man so alles noch dazuprogrammieren kann. Denkbar wären z. B. Lesezeichen, die per Cookie gespeichert werden könnten etc.

Versionen

0.4 Fehler bei unkomprimierten in zip gespeicherten Dateien beseitigt.

0.3 Byte-Bereich für GET.

0.2 Läuft prima.

Danksagungen, Anregungen und Fehlerreports bitte an Thilo Brai.