6

WebView で .epub ファイルを読み取るために epublib を使用しています。

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

DownloadResource は正常に動作します。リソースが取得されます。しかし、WebView は画像を表示していません。画像は epub ファイルと同じディレクトリにあります。WebView は私にこれを与えます:

4

2 に答える 2

1

まず、次のようにすべてのリソースを取得する必要があります。

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

その後、リソースをループして同じ 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;
    }

そして、これをどのように使用するか

Bitmap bm = getBitmapFromResources(resources, "cover.jpg");
            if (bm != null)
                ivTest.setImageBitmap(bm);

これがお役に立てば幸いです。

于 2014-09-30T01:06:19.773 に答える