2013-09-23 31 views
12

Tôi đang phát triển một ứng dụng Android đọc sách điện tử (ở định dạng epub) và hiện tại tôi đang sử dụng thư viện epublib của Paul Siegeman thực sự là một trình đọc epub rất tốt nhưng nó có một số hạn chế, ví dụ và cái tôi cần, bạn không thể di chuyển qua các trang theo chiều ngang (khi bạn đọc một cuốn sách thực) vì vậy tôi cần thực hiện riêng của nó, nhưng tôi bị kẹt.Cách chia nhỏ Epub Html thành các trang theo kích thước màn hình

Phương pháp mà thực sự đọc epub và sau đó đặt nó bên trong một webview là tiếp theo:

private void openEpub(String bookFilename){ 

    WebView webView = (WebView) findViewById(R.id.webView); 

    nl.siegmann.epublib.domain.Book book=null; 
    try { 
     book = (new EpubReader()).readEpub(new FileInputStream(Environment.getExternalStorageDirectory().getPath() + "/" + bookFilename)); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    String baseUrl = Environment.getExternalStorageDirectory().getPath() + "/"; 
    String data=null; 
    try { 
     data = new String(book.getContents().get(1).getData()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    webView.loadDataWithBaseURL(baseUrl, data, "text/html", "UTF-8", null); 

} 

Vì vậy, như bạn thấy tôi hiển thị ebook trong một webview nên như xa như tôi biết khả năng duy nhất di chuyển webview cho là lên/xuống.

Tôi đã suy nghĩ về việc tách chuỗi html getData() trả về và lượt xem webview thành các trang và hiển thị từng trang một với một người xem, nhưng cách tách html đúng theo kích thước màn hình?

Bạn có nghĩ rằng với ý tưởng này tôi đang đi đúng hướng không? Bất kỳ giải pháp nào khác để hiển thị epub từ trái sang phải/phải sang trái (phân trang) hoặc bất kỳ thư viện "miễn phí hoặc rẻ tiền" nào khác để làm như vậy? (Tôi đã thử PageTurner, nó thực sự tốt, nhưng phiên bản thương mại quá đắt đối với tôi)

Trả lời

2

Làm theo tài khoản github này.

FbReader cung cấp một số thư viện tuyệt vời cho trình đọc epub và pdf. Hãy thử điều này ....

hay

Bạn có thể Make riêng WebView tùy chỉnh của bạn bằng cách mở rộng WebView. Ở đây bạn có thể đặt và sửa đổi tất cả các chức năng mà bạn muốn từ WebView của mình.

Đồng nghiệp của tôi đã thực hiện một trình đọc bằng FbReader này và nó thật tuyệt vời.

+0

Thank you very much Jatin, Cuối cùng và sau khi không tìm thấy một giải pháp cho vấn đề của tôi vì nó là một dự án quan trọng, tôi quyết định mua một đầu đọc. Bây giờ tôi đang sử dụng Page Turner Reader, không miễn phí nhưng nó chỉ là một ứng dụng tuyệt vời. –

1

Xin chào, tôi nghĩ điều này sẽ giúp ích cho bạn. Câu trả lời của Nacho L đã làm việc cho tôi. Ở đây HTML book-like pagination?

+0

Cảm ơn bạn rất nhiều atihska, như tôi nói dưới đây cho Jatin cuối cùng mà không tìm kiếm một giải pháp tôi quyết định mua một người đọc, và bây giờ tôi đang sử dụng Page Turner đọc, mà không phải là miễn phí nhưng nó chỉ là một ứng dụng tuyệt vời. –

+0

@Atishka, tôi đã thử nghiệm lời khuyên của bạn và nó hoạt động. Tôi không tốt với js, vì vậy bạn có thể cho tôi biết làm thế nào để thay đổi các trang bằng cách nhấp hoặc di chuyển? Một gợi ý sẽ được đánh giá cao. –

8

Tôi đã làm ảnh hưởng pagination trong android như thế này ..

-> tạo một lớp tùy chỉnh webview.
-> đặt dưới đây khách hàng và tải url sau đó bạn sẽ nhận được cuộn ngang với số lượng trang.
-> Khóa cuộn mặc định của chế độ xem web.
-> Để có hiệu ứng phân trang trơn tru thay vì di chuyển chế độ xem web, hãy di chuyển toàn bộ webview để một trang có một chế độ xem web.
-> Sử dụng trình xem của riêng bạn để đệm các trang trước và trang tiếp theo.


Tôi đã thực hiện tất cả các triển khai này và tôi đã tạo ra một sản phẩm cho tổ chức.Chỉ cần tôi chia sẻ ý tưởng của mình cách tiếp cận với giải pháp tốt nhất.Đang sử dụng cách phân biệt thứ ba và bị kẹt ở giữa do giới hạn của sdk đó , làm mọi thứ của riêng bạn.

private class MyWebClient extends WebViewClient 
    { 
     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 

      super.onPageStarted(view, url, favicon); 
     } 
     @Override 
     public void onPageFinished(WebView view, String url) 
     { 
      super.onPageFinished(view, url); 

      final MyWebView myWebView = (MyWebView) view; 


       String varMySheet = "var mySheet = document.styleSheets[0];"; 

       String addCSSRule = "function addCSSRule(selector, newRule) {" 
         + "ruleIndex = mySheet.cssRules.length;" 
         + "mySheet.insertRule(selector + '{' + newRule + ';}', ruleIndex);" 

         + "}"; 

       String insertRule1 = "addCSSRule('html', 'padding: 0px; height: " 
         + (myWebView.getMeasuredHeight()/getContext().getResources().getDisplayMetrics().density) 
         + "px; -webkit-column-gap: 0px; -webkit-column-width: " 
         + myWebView.getMeasuredWidth() + "px;')"; 



       myWebView.loadUrl("javascript:" + varMySheet); 
       myWebView.loadUrl("javascript:" + addCSSRule); 
       myWebView.loadUrl("javascript:" + insertRule1); 




     } 
    } 

    private class MyWebChromeClient extends WebChromeClient 
    { 
     @Override 
     public void onProgressChanged(WebView view, int newProgress) 
     { 
      super.onProgressChanged(view, newProgress); 

      if(newProgress == 100) 
      { 
       postDelayed(new Runnable() 
       { 
        @Override 
        public void run() 
        { 
         calculateNoOfPages(); 
        }  

       },200); 
      } 
     } 
    } 
private void calculateNoOfPages() 
    { 
     if(GlobalSettings.EPUB_LAYOUT_TYPE == GlobalConstants.FIXED) 
     { 

     } 
     else 
     { 
      if(getMeasuredWidth() != 0) 
      { 
       int newPageCount = computeHorizontalScrollRange()/getMeasuredWidth(); 
       getData().getChapterVO().setPageCount(newPageCount); 

      } 
     } 
    } 
@Override 
    public int computeHorizontalScrollRange() { 
     // TODO Auto-generated method stub 
     return super.computeHorizontalScrollRange(); 
    } 

một bạn nạp url để

+0

bro ultimatum ... tôi thực sự đang tìm kiếm một giải pháp trong một tuần. Ultimatum bro, tôi đã thực sự giải quyết một vấn đề cho tôi. Ước gì tôi có thể tặng cho bạn 100 cái như thế. Bất cứ ai tìm kiếm giải pháp, giải pháp trên đều hoạt động hoàn hảo. Bạn có thể cần phải thay đổi quy tắc addCSS một chút nhưng giải pháp chắc chắn hoạt động. Cảm ơn một anh trai ton –

+1

Cảm ơn bạn đã bình luận arunavh !! bạn r chào đón nhiều nhất để được trợ giúp thêm :) –

+0

Cảm ơn bạn rất nhiều vì đã dành thời gian cho Uday, tôi sẽ thử làm con trai như tôi có thể nhưng bạn có nghĩ giải pháp của bạn dễ dàng thực hiện không? (Tôi đã đọc nó một cách nhanh chóng như tôi đang ở trong văn phòng) –

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