Как читать книгу EPUB с помощью EPUBLIB? - PullRequest
5 голосов
/ 01 июля 2011

Я нашел решение для чтения книг epub в Android с помощью epublib. Я умею читать субтитры из книги. Но я не нашел способ читать построчно контента. Как я могу достичь этого?

Пример кода для получения названий книги:

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

Получил этот код от http://www.siegmann.nl/epublib/android

Как я могу получить историю книги ...

Ответы [ 3 ]

7 голосов
/ 12 июля 2011

Я не уверен, что это способ навигации в файле epub.Насколько я знаю (до сих пор - я все еще учусь), лучший способ получить весь объем книги основан на разделе позвоночника.Но все же - я не знаю, как связать эти две вещи (TOC и реальный позвоночник) с интерфейсом epublib.Согласно документации: «Разделы позвоночника - это разделы книги в том порядке, в каком она должна быть прочитана. Это контрастирует с разделами оглавления, которые являются указателем на разделы Книги».

это что-то - если Вам нравится - это фрагмент:

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) {
3 голосов
/ 11 июля 2011

Ну, я не совсем уверен в навигации, но также удивляюсь, как это сделать. На данный момент - у меня есть что-то вроде этого (это построчно):

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);
    }
}
2 голосов
/ 01 августа 2011

Я пытаюсь прочитать весь текст в файле epub построчно с этим кодом, но это не работает!Как я могу это сделать ?

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;
 }

}

...