2012-10-19 11 views
5

Kullanarak resimlerin görüntülenmesi Bir WebView uygulamasında bir .epub dosyasını okumak için epublib kullanıyorum.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 düzgün çalışıyor. Kaynaklar getiriliyor. Ancak WebView, görüntüyü göstermiyor. Görüntüler epub dosyası ile aynı dizinde. Eğer döngü kaynakları aynı href dosyayı

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

almak anlamına sonra

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

ve bu nasıl:

+0

gibi çalıştı metin (.xhtml dosyası) gibi görünüyor? – Freney

+1

Bunu çözüyor musunuz? – Villan

cevap

0

ilk böyle tüm kaynakları almak gerekir: WebView bu bana verir

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

bunu kullanmak için yardım sen.

1

Bu problem içindeydim ama eğer biriyle karşılaştıysa, aynı problemle karşılaştım ve çözüm göz ardı edilen oldukça basitti.

wv.loadDataWithBaseURL(abspath.substring(0, pos)+"/", sb.toString(), "text/html", "utf-8", null); 

Bu hat abspath.substring(0, pos)+"/" bu kod parçası ile kaynaklar ev/web sayfası kökenli url belirtir.

Ama biz protokol, yani http, ftp, file (yerel) böylece düzeltmeyi söz etmedi

wv.loadDataWithBaseURL("file://"+abspath.substring(0, pos)+"/", sb.toString(), "text/html", "utf-8", null); 

oldu ve bir cazibe :) bunun için kaynak ne yapar

+0

Örnek e-posta adresli e-kitabım varlıklar/epub klasörünün içinde. Hangi mutlak URL'yi kullanmalıyım? Şu anda bu hatayı alıyorum: Öğe URL'si açılamıyor: dosya: /// android_asset/epub/sample_book/docimages/cover.jpg' –

+1

Yolunuz doğru görünmüyor, dosya sisteminden başlamalıydı. Örneğin./Veri/veri/YOUR_PACKAGE_NAME –