Làm cách nào tôi có thể triển khai trình đọc EPUB bằng JavaScript?


6

Tôi tự hỏi liệu tôi có thể tạo trình đọc EPUB (tiêu chuẩn sách điện tử mở và miễn phí) bằng JavaScript không. Các yêu cầu cơ bản sẽ là:

  1. Các bộ phận máy chủ của trình đọc EPUB từ API máy chủ.
  2. Đọc dữ liệu EPUB bằng JavaScript.
  3. Kết xuất nó trên trang.
  4. Cung cấp một số chức năng bổ sung, như tô sáng văn bản hoặc ghi chú trang.

Tôi không có thông tin về cách tôi có thể làm điều này. Tôi sẵn sàng thử một dự án nguyên mẫu. Các bước mà tôi có thể thực hiện để thực hiện một điều như vậy là gì?



@FlorianMargaine cảm ơn vì các liên kết, tôi đã thấy hai ví dụ này cách đây một thời gian. Tôi cảm thấy rằng mã của các dự án đó đang ở chế độ nguyên mẫu ngay bây giờ, vì vậy cố gắng đảo ngược kỹ sư sẽ rất khó. Tôi đang tìm kiếm một số mẹo về cách tôi sẽ phân tích nội dung EPUB và hiển thị nó trên trang. Các chi tiết cụ thể hoặc các liên kết đến nơi tôi có thể tìm thấy một tài liệu dễ theo dõi về nội dung epub trông như thế nào và cách tôi sẽ hiển thị nó trên trang.
Vlad Nicula

Câu trả lời:


9

Từ ý kiến ​​của bạn, có vẻ như bạn đang ở giai đoạn khái niệm rất sớm và muốn được hướng dẫn chung ... tốt, điều đó sẽ rất khó để đưa ra, vì toàn bộ chủ đề khá lớn. Nhưng nói chung, những gì bạn muốn làm là:

  1. Đọc và phân tích một tệp epub bằng javascript.
  2. Tạo HTML đại diện cho nội dung (và hình ảnh nội tuyến / SVG / vv).

Chà, điều đó ở mức rất cao, và không giúp chúng ta nhiều. Bạn có thể chia nhỏ bước 1 bằng cách đọc chính định dạng epub (ví dụ: bài viết trên wikipediathông tin chung). Khá nhanh chóng, bạn nên chú ý rằng định dạng sử dụng OCF để gói nhiều tệp lại với nhau, vì vậy vấn đề đầu tiên của bạn là tạo trình đọc OCF, điều đó cũng có nghĩa là bạn sẽ cần phải giải nén dữ liệu trong javascript (liên kết của Florian Margaine cung cấp cho bạn một ý tưởng về cách những người khác đã giải quyết vấn đề này). Tại thời điểm này, tôi bắt đầu tìm kiếm các triển khai hiện có trong javascript, bởi vì có lẽ bạn không muốn thực hiện tất cả những điều này từ đầu. Đây là tất cả trước khi chúng ta thậm chí chạm vào nội dung thực tế của tệp epub. Khi bạn đã qua thời điểm này, bạn sẽ có thể đọc nội dung thực tế và cố gắng dịch chúng sang HTML.

Về bước 2, tôi sẽ bắt đầu bằng cách xem xét các tính năng khác nhau được cung cấp bởi epub - văn bản, kiểu CSS, hình ảnh nhúng, v.v. - và bắt đầu tấn công chúng một lúc, bắt đầu bằng bất cứ điều gì mang lại lợi nhuận cao nhất cho thời gian của tôi (có thể là văn bản ...).


Cảm ơn bạn. Đây là loại điểm bắt đầu tôi đang tìm kiếm.
Vlad Nicula

2
Tôi sẽ trả lời nhưng điều này bao gồm chủ yếu. Điều duy nhất tôi muốn thêm là liên kết đến thông số tệp thực tế. idpf.org/epub
Rig

0

TreineticEpubReaderlà một nhánh phổ biến của readium-js-viewernó cung cấp một api rất đơn giản để tương tác với các tệp epub nhập mô tả hình ảnh ở đây, bạn có thể tải epub dưới dạng .epub hoặc phục vụ đường dẫn thư mục được trích xuất của epub

https://github.com/Treinetic/TreineticEpubReader

Thư viện là javascript thuần túy để bạn có thể trộn và trộn với bất kỳ khung hiện đại nào, đây là mã mẫu, bạn cũng có thể nhìn vào samplethư mục bên trong distđể tìm bản demo hoạt động

<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");

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.