-->

How to read EPUB book using EPUBLIB?

2019-03-21 07:09发布

问题:

I found a solution for reading epub books in android using epublib. I am able to read the subtitles of the book. But I didn't find a way to read the line by line of the content. How can I acheive this?

Sample code for getting titles of the book is

  private void logTableOfContents(List<TOCReference> tocReferences, int depth) {
    if (tocReferences == null) {
        return;
    }
    for (TOCReference tocReference : tocReferences) {
        StringBuilder tocString = new StringBuilder();
        StringBuilder tocHref=new StringBuilder();
        for (int i = 0; i < depth; i++) {
            tocString.append("\t");
            tocHref.append("\t");
        }
        tocString.append(tocReference.getTitle());

        tocHref.append(tocReference.getCompleteHref());
        Log.e("Sub Titles", tocString.toString());
        Log.e("Complete href",tocHref.toString());

        //logTableOfContents(tocReference.getChildren(), depth + 1);
    }
}

Got this code from http://www.siegmann.nl/epublib/android

How can I get the story of the book...

回答1:

I'm not sure is that is the way to navigate in epub file. As far as I know (till now - I'm still learning), better way to get all book cocntent is based on spine section. But still - I don't know how to connect this two things (TOC and real spine) with epublib interface. According to documentation: "The spine sections are the sections of the book in the order in which the book should be read. This contrasts with the Table of Contents sections which is an index into the Book's sections."

that is something - if You likie - this is a snippet:

Spine spine = new Spine(book.getTableOfContents());
for (SpineReference bookSection : spine.getSpineReferences()) {
            Resource res = bookSection.getResource();
                try {
                    InputStream is = res.getInputStream();
                    //do something with stream
                } catch (IOException e) {


回答2:

Well - i'm not exacly sure about navigating, but also wonder how to do it For now - i have something like this (it is line - by line read):

private void logTableOfContents(List<TOCReference> tocReferences, int depth) {
    if (tocReferences == null) {
        return;
    }
    for (TOCReference tocReference : tocReferences) {
        StringBuilder tocString = new StringBuilder();
        for (int i = 0; i < depth; i++) {
            tocString.append("\t");
        }
        try{
           InputStream is = tocReference.getResource().getInputStream();
           BufferedReader r = new BufferedReader(new InputStreamReader(is));
           String line;
           while ((line = r.readLine()) != null) {
               String line = Html.fromHtml(line).toString();
           }
        }
        catch(IOException e){

        }




        //logTableOfContents(tocReference.getChildren(), depth + 1);
    }
}


回答3:

i try to read all of text in epub file line by line with this code but it`s not work true ! how can i do this ?

package com.mahdi.File_Reader;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;
import java.util.jar.JarFile;

import android.app.Activity;
import android.content.res.AssetManager;
import android.content.res.Resources;
import android.os.Bundle;
import android.text.Html;
import android.util.Log;
import android.widget.AnalogClock;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import com.mahdi.File_Reader.jchmlib.*;

import nl.siegmann.epublib.*;
import nl.siegmann.epublib.domain.Book;
import nl.siegmann.epublib.domain.TOCReference;
import nl.siegmann.epublib.epub.EpubReader;

public class File_ReaderActivity extends Activity {



/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    TextView tv1 = (TextView) findViewById(R.id.textView1);

    AssetManager assetManager = getAssets();

    InputStream inputStream;
    try {
        inputStream = assetManager.open("xxx.epub");
        Book ebook = new EpubReader().readEpub(inputStream);

  tv1.setText(logTableOfContents(ebook.getTableOfContents().getTocReferences(), 0));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }



}

private String logTableOfContents(List<TOCReference> tocReferences,
        int depth) {
    String lineXX="p";
    if (tocReferences == null) {
        return "d";
    }
    for (TOCReference tocReference : tocReferences) {
        StringBuilder tocString = new StringBuilder();
        for (int i = 0; i < depth; i++) {
            tocString.append("\t");
        }
        try {

    InputStream is =  tocReference.getResource().getInputStream();

    BufferedReader r = new BufferedReader(new  InputStreamReader(is));
            String line;
            while ((line = r.readLine()) != null) {
                String lineX = Html.fromHtml(line).toString();
                lineXX=lineX;
            }
        } catch (IOException e) {
              lineXX="X";
        }



        // logTableOfContents(tocReference.getChildren(), depth + 1);
     }
     return lineXX;
 }

}