1

我一直在 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 以上的文件会出现问题,要么显示空白 webview,要么屏幕变黑。

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

所以我有两个问题

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

我已经使用了每个 webview 设置,如 setrenderpriority high 等,将 js 注入 webview 但我无法找到解决方案。

4

1 回答 1

1

你应该逐章渲染(分页)。不要一次渲染所有章节,这会在 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);                       
   }

于 2016-07-21T09:04:13.707 回答