2012-10-19 50 views
5

Tôi đang sử dụng epublib để đọc tệp .epub trong một WebView.Hiển thị hình ảnh bằng 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 hoạt động tốt. Tài nguyên được tìm nạp. Nhưng WebView không hiển thị hình ảnh. Các hình ảnh nằm trong cùng thư mục với tệp epub. WebView mang lại cho tôi điều này:

+0

gì nguồn cho điều đó văn bản (tệp .xhtml) trông như thế nào? – Freney

+1

Bạn có giải quyết vấn đề này không? – Villan

Trả lời

0

trước tiên bạn phải có được tất cả các nguồn lực như thế này:

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

sau đó bạn có thể lặp các nguồn lực để có được cùng một tập tin 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; 
    } 

và làm thế nào đây để sử dụng điều đó

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

hy vọng sự trợ giúp này bạn.

1

Đã xảy ra sự cố này nhưng nếu có ai gặp phải vấn đề này thì tôi đã gặp phải vấn đề tương tự và giải pháp khá đơn giản và bị bỏ qua.

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

Dòng này chỉ định nguồn gốc trang chủ/trang web url với abspath.substring(0, pos)+"/" phần mã này.

Nhưng chúng tôi đã không đề cập đến nó giao thức, tức là http, ftp, tập tin (địa phương) để sửa chữa là

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

và nó làm việc như một nét duyên dáng :)

+0

Sách điện tử của tôi có tên sample_book nằm bên trong thư mục asset/epub. Tôi sử dụng URL tuyệt đối nào? Tôi hiện đang gặp phải lỗi này 'Không thể mở URL nội dung: tệp: /// android_asset/epub/sample_book/docimages/cover.jpg ' –

+1

Đường dẫn của bạn dường như không chính xác, nó phải bắt đầu từ/của hệ thống tệp. ví dụ./data/data/YOUR_PACKAGE_NAME –

Các vấn đề liên quan