在 webView Android 中加载 epub 文件



我一直在Android中使用epublib在webview中加载epub文件。这是我加载文件的代码

public void getEntireBook(){  
    Spine spine = book.getSpine(); 
    List<SpineReference> spineList = spine.getSpineReferences() ;
    int count = spineList.size();
    TextView tv=new TextView(getApplicationContext());
    tv.setText(Integer.toString(count));
    StringBuilder string = new StringBuilder();
    for (int i = 0; count > i; i++) {
        Resource res = spine.getResource(i);
        string.append(res.getTitle());
        RowData row = new RowData();
        row.setTitle(string.toString());
        row.setResource(spine.getResource(i));
        contentDetails.add(row);
        try {
            InputStream is = res.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            try {
                while ((line =(String) reader.readLine()) != null) {

                }
            } catch (IOException e) {e.printStackTrace();}
            //do something with stream
        } catch (IOException e) {
            e.printStackTrace();
        }
        webView.loadData(line, "text/html;charset=UTF-8",null);
    }
} 

有些文件加载正常,从 20 MB 到 70 MB 的文件加载正常,但 90 MB 以上的文件出现问题,要么显示空白 Web 视图,要么屏幕变黑。

有些文件的另一个问题是某些文件具有大文本并具有丰富的图形内容,例如图片,装饰字体。当我在 web 视图中加载它们时,会显示小点,当我放大文本时,文本会分散。

所以我有两个问题

  1. 如何在 Web 视图中呈现像 150 MB 文件这样的大文件
  2. 如何加载丰富的图形内容。

我已经使用了每个网络视图设置,例如设置渲染优先级高等,将 js 注入网络视图,但我无法找到解决方案。

您应该逐章渲染(分页)。 不要一次渲染所有章节,这可能会在 Android 上造成滞后。

   public void pagination (int page){ 
        Resource res = spine.getResource(page);
        string.append(res.getTitle());
        RowData row = new RowData();
        row.setTitle(string.toString());
        row.setResource(res);
        contentDetails.add(row);
        try {
            InputStream is = res.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            try {
                while ((line =(String) reader.readLine()) != null) {
                }
            } catch (IOException e) {e.printStackTrace();}
            //do something with stream
        } catch (IOException e) {
            e.printStackTrace();
        }
        webView.loadData(line, "text/html;charset=UTF-8",null);                       
   }

相关内容

  • 没有找到相关文章

最新更新