我正在使用epublib,我试图一次得到一本书的整个章节



我正试图一本书一次只写一章。我正在使用Paul Seigmann图书馆。然而,我不知道该怎么做,但我能从书中得到所有的文本。不知道从那里去哪里。

// find InputStream for book
InputStream epubInputStream = assetManager
            .open("the_planet_mappers.epub");
        // Load Book from inputStream
        mThePlanetMappersBookEpubLib = (new EpubReader()).readEpub(epubInputStream);
        Spine spine = new Spine(mThePlanetMappersBookEpubLib.getTableOfContents());
        for (SpineReference bookSection : spine.getSpineReferences()) {
            Resource res = bookSection.getResource();
            try {
                InputStream is = res.getInputStream();
                BufferedReader r = new BufferedReader(new InputStreamReader(is));
                String line;
                while ((line = r.readLine()) != null) {
                    line = Html.fromHtml(line).toString();
                    Log.i("Read it ", line);
                    mEntireBook.append(line);
                }
            } catch (IOException e) {
            }

我不知道你是否还在寻找答案,但是。。。我现在也在努力。这是我必须检索所有epub文件内容的代码:

public ArrayList<String> getBookContent(Book bi) {
    // GET THE CONTENTS OF ALL PAGES
    StringBuilder string = new StringBuilder();
    ArrayList<String> listOfPages = new ArrayList<>();
    Resource res;
    InputStream is;
    BufferedReader reader;
    String line;
    Spine spine = bi.getSpine();
    for (int i = 0; spine.size() > i; i++) {
        res = spine.getResource(i);
        try {
            is = res.getInputStream();
            reader = new BufferedReader(new InputStreamReader(is));
            while ((line = reader.readLine()) != null) {
                // FIRST PAGE LINE -> <?xml version="1.0" encoding="utf-8" standalone="no"?>
                if (line.contains("<?xml version="1.0" encoding="utf-8" standalone="no"?>")) {
                    string.delete(0, string.length());
                }
                // ADD THAT LINE TO THE FINAL STRING REMOVING ALL THE HTML
                string.append(Html.fromHtml(formatLine(line)));
                // LAST PAGE LINE -> </html>
                if (line.contains("</html>")) {
                    listOfPages.add(string.toString());
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return listOfPages;
}
private String formatLine(String line) {
    if (line.contains("http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd")) {
        line = line.substring(line.indexOf(">") + 1, line.length());
    }
    // REMOVE STYLES AND COMMENTS IN HTML
    if ((line.contains("{") && line.contains("}"))
            || ((line.contains("/*")) && line.contains("*/"))
            || (line.contains("<!--") && line.contains("-->"))) {
        line = line.substring(line.length());
    }
    return line;
}

正如你可能已经注意到的,我需要改进过滤器,但我的ArrayList中有那本书的每一章。现在我只需要像myList.get(0);一样调用ArrayList,就完成了。

为了以正确的方式显示文本,我使用bluejamesbond:textjustify库(https://github.com/bluejamesbond/TextJustify-Android)。它使用方便,功能强大。

我希望它能帮助你,如果有人找到更好的方法来过滤html,请注意我。

相关内容

  • 没有找到相关文章

最新更新