使用EPUBLIB显示图像

Ara*_*san 6 android epub android-webview android-file epublib

我正在使用epublib在WebView中读取.epub文件.

WebView wv = (WebView) getView().findViewById(R.id.chaptercontent);
    try {
        String abspath = FILEPATH+file;
        File filePath = new File(abspath+".epub");   
        InputStream epubInputStream = new BufferedInputStream(new FileInputStream(filePath));
        book = (new EpubReader()).readEpub(epubInputStream);
        int pos = abspath.lastIndexOf('/');
        DownloadResource(abspath.substring(0, pos));
        try {
            for(int i = 1; i< book.getContents().size(); i++) {
                InputStream is = book.getSpine().getSpineReferences().get(i).getResource().getInputStream(); 
                BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
                StringBuilder sb = new StringBuilder(); 
                String line = null; 
                while ((line = reader.readLine()) != null)
                { 
                    sb.append(line + "\n");
                    Log.d("display line", line);
                } 
                is.close(); 
                wv.loadDataWithBaseURL(abspath.substring(0, pos)+"/", sb.toString(), "text/html", "utf-8", null);
            }
        }   
        catch(IOException e) {
            Log.e("IOException", e.getMessage());
        }   
     }
     catch (IOException e) {
        Log.e("epublib", e.getMessage());
     }

private void DownloadResource(String directory) {
     try {
         nl.siegmann.epublib.domain.Resources rst = book.getResources();
         Collection<Resource> clrst = rst.getAll();
         Iterator<Resource> itr = clrst.iterator();
         Log.d("Downlod path", directory);
         while (itr.hasNext()) {
             Resource rs = itr.next();
             if ((rs.getMediaType() == MediatypeService.JPG) || (rs.getMediaType() == MediatypeService.PNG) || (rs.getMediaType() == MediatypeService.GIF) || rs.getMediaType() == MediatypeService.CSS)  {
                 File oppath1 = new File(directory+File.separator+rs.getHref());
                 Log.d("Resource Name - ", rs.getHref());
                 oppath1.createNewFile();
                 Log.d("Oppath - ", oppath1.getAbsolutePath());

                 Log.d("File Checking - ", "Exists - "+oppath1.exists()+" & Write - "+oppath1.canWrite());
                 FileOutputStream fos1 = new FileOutputStream(oppath1);
                 fos1.write(rs.getData());
                 fos1.close();

             } 
         }
     } 
     catch (IOException e) {
         Log.e("error", e.getMessage());
     }
}
Run Code Online (Sandbox Code Playgroud)

DownloadResource工作正常.获取资源.但是WebView没有显示图像.图像与epub文件位于同一目录中.WebView给了我这个:

yoz*_*ama 1

首先你必须获得这样的所有资源:

MediaType[] bitmapTypes = { MediatypeService.PNG,
                    MediatypeService.GIF, MediatypeService.JPG };
            List<Resource> resources = book.getResources().getResourcesByMediaTypes(bitmapTypes);
Run Code Online (Sandbox Code Playgroud)

之后,您可以循环资源以获得相同的 href 文件

private Bitmap getBitmapFromResources(List<Resource> resources, String imgHref)
    {
        byte[] data = "holder".getBytes();
        for(int ii = 0; ii < resources.size();ii++)
        {
            String z = resources.get(ii).getHref();
            if(z.equals(imgHref))
            {
                Log.i("livi", z);
                try {
                    data = resources.get(ii).getData();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                break;
            }
        }
        //
            Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length);
            return bm;
    }
Run Code Online (Sandbox Code Playgroud)

以及如何使用它

Bitmap bm = getBitmapFromResources(resources, "cover.jpg");
            if (bm != null)
                ivTest.setImageBitmap(bm);
Run Code Online (Sandbox Code Playgroud)

希望这对你有帮助。