Wie kann ich einen EPUB-Reader in JavaScript implementieren?


6

Ich frage mich, ob ich einen EPUB -Reader (kostenloser und offener E-Book-Standard) in JavaScript erstellen kann . Die Grundvoraussetzungen wären:

  1. Serverteile des EPUB-Readers über eine Server-API.
  2. Lesen Sie die EPUB-Daten in JavaScript.
  3. Rendern Sie es auf Seite.
  4. Stellen Sie einige zusätzliche Funktionen bereit, z. B. Textmarkierungen oder Seitennotizen.

Ich habe keine Informationen darüber, wie ich das machen könnte. Ich bin bereit, ein Prototypprojekt auszuprobieren. Welche Schritte könnte ich unternehmen, um so etwas umzusetzen?



@FlorianMargaine danke für die Links, ich habe diese beiden Beispiele vor einiger Zeit gesehen. Ich bin der Meinung, dass sich der Code dieser Projekte derzeit im Prototyp-Modus befindet. Daher wäre es sehr schwierig, ein Reverse Engineering durchzuführen. Ich suche nach Tipps, wie ich den EPUB-Inhalt analysieren und auf der Seite rendern kann. Spezifische Details oder Links, wo ich eine leicht zu verfolgende Dokumentation finden kann, wie Epub-Inhalte aussehen und wie ich sie auf der Seite rendern würde.
Vlad Nicula

Antworten:


9

Aus Ihren Kommentaren geht hervor, dass Sie sich in einem sehr frühen konzeptionellen Stadium befinden und allgemeine Anleitungen wünschen. Nun, das wird sehr schwierig zu geben sein, da das gesamte Thema ziemlich umfangreich ist. Im Allgemeinen möchten Sie jedoch Folgendes tun:

  1. Lesen Sie eine Epub-Datei ein und analysieren Sie sie mit Javascript.
  2. Generieren Sie HTML, das den Inhalt darstellt (und Inline-Bilder / SVG / etc).

Nun, das ist auf einem sehr hohen Niveau und hilft uns nicht viel. Sie können Schritt 1 aufschlüsseln, indem Sie das Epub-Format selbst nachlesen (z. B. Wikipedia-Artikel und allgemeine Informationen)). Ziemlich schnell sollten Sie feststellen, dass das Format OCF verwendet, um mehrere Dateien zusammenzufassen. Ihr erstes Problem besteht darin, einen OCF-Reader zu erstellen. Dies bedeutet auch, dass Sie die Daten in Javascript entpacken müssen (die Links von Florian Margaine sollten dies tun) Geben Sie eine Vorstellung davon, wie andere dieses Problem gelöst haben. An diesem Punkt würde ich nach vorhandenen Implementierungen in Javascript suchen, da Sie dies wahrscheinlich nicht von Grund auf implementieren möchten. Dies ist alles, bevor wir überhaupt den eigentlichen Inhalt der Epub-Datei berühren. Sobald Sie diesen Punkt überschritten haben, sollten Sie in der Lage sein, den eigentlichen Inhalt einzulesen und zu versuchen, ihn in HTML zu übersetzen.

In Bezug auf Schritt 2 würde ich zunächst die verschiedenen Funktionen von epub betrachten - Text, CSS-Stil, eingebettete Bilder usw. - und diese nacheinander angreifen, beginnend mit dem, was für meine Zeit die größte Rendite bringt (wahrscheinlich Text) ...).


Vielen Dank. Dies ist der Ausgangspunkt, nach dem ich gesucht habe.
Vlad Nicula

2
Ich wollte antworten, aber das deckt es meistens ab. Ich würde nur den Link zur eigentlichen Dateispezifikation hinzufügen. idpf.org/epub
Rig

0

TreineticEpubReaderist ein beliebter Zweig, der readium-js-viewereine sehr einfache API für die Interaktion mit Epub-Dateien Geben Sie hier die Bildbeschreibung einbietet. Sie können entweder den Epub als .epub laden oder den extrahierten Ordnerpfad des Epubs bereitstellen

https://github.com/Treinetic/TreineticEpubReader

Die Bibliothek ist reines Javascript, sodass Sie sie mit jedem modernen Framework mischen und mischen können. Hier ist ein Beispielcode. Sie können auch den sampleOrdner im Ordner durchsuchen dist, um eine funktionierende Demo zu finden

<div id="epub-reader-frame"></div>

var exControls = TreineticEpubReader.handler();
exControls.registerEvent("onEpubLoadSuccess", function () {

});

exControls.registerEvent("onEpubLoadFail", function () {

});

exControls.registerEvent("onTOCLoaded", function (hasTOC) {
    if (!hasTOC) {
       let toc =  exControls.getTOCJson();
    }
    // you can use following api calls after this
    /**
    exControls.hasNextPage()
    exControls.nextPage();
    exControls.hasPrevPage()
    exControls.prevPage();
    exControls.makeBookMark();
    exControls.changeFontSize(int);
    exControls.changeColumnMaxWidth(int);
    exControls.setTheme("theme-id-goes-here");
    exControls.setScrollMode("scroll-type-id-goes-here");
    exControls.setDisplayFormat("display-format-id-goes-here");

    extcontrols.getRecommendedFontSizeRange()
    extcontrols.getRecommendedColumnWidthRange()
    var list = extcontrols.getAvailableThemes();
    var list = extcontrols.getAvailableScrollModes();
    var list = extcontrols.getAvailableDisplayFormats();
    var settings = extcontrols.getCurrentReaderSettings();
    **/
});

var config = TreineticEpubReader.config();
config.jsLibRoot = "src/ZIPJS/";

TreineticEpubReader.create("#epub-reader-frame");
TreineticEpubReader.open("assets/epub/epub_1.epub");

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.