2013-09-23 7 views
12

Ich entwickle eine Android-Anwendung, die Ebooks liest (im epub-Format) und ich benutze Paul Siegemans epublib-Bibliothek, die wirklich ein sehr guter epub-Leser ist aber es hat einige Einschränkungen, zum Beispiel und die, die ich brauche, Sie können nicht horizontal durch die Seiten gehen (wie Sie ein echtes Buch lesen), also brauche ich meine eigene Implementierung davon, aber ich stecke fest.Wie man Epub Html in Seiten entsprechend der Bildschirmgröße aufteilt

Die Methode, die tatsächlich die epub liest und dann in einem Webview bringt es ist die nächste:

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

} 

So wie Sie sehe ich das E-Book in einem Webview anzuzeigen, soweit ich das einzige Scrollen Möglichkeit kennen Webview gibt ist up/down.

Ich dachte über die Aufteilung der HTML-Zeichenfolge, die getData() zurückgibt und Webview lädt in Seiten und Anzeigen sie nacheinander mit einem Viewpager, aber wie HTML korrekt nach Bildschirmgröße zu teilen?

Glaubst du, mit dieser Idee bin ich auf dem richtigen Weg? Irgendwelche anderen Lösungen, um epub von links nach rechts/rechts nach links (paginate) oder irgendeine andere "freie oder billige" Bibliothek anzuzeigen, um dies zu tun? (Ich habe versucht, PageTurner, es ist wirklich gut, aber die kommerzielle Version ist zu teuer für mich)

Antwort

2

Folgen Sie diesem github Konto.

FbReader bieten einige große Bibliotheken für Epub-und PDF-Reader. Versuchen Sie, diese ....

oder

Sie Ihre eigene individuelle WebView durch die Erweiterung WebView machen kann. Hier können Sie alle gewünschten Funktionen Ihres WebViews platzieren und ändern.

Mein Kollege machte einen Leser mit diesem FbReader und es war fabelhaft.

+0

Vielen Dank Jatin, schließlich und nach keine Lösung für mein Problem zu finden, da es ein wichtiges Projekt ist habe ich beschlossen, einen Leser zu kaufen. Jetzt benutze ich den Page Turner Reader, der nicht kostenlos ist, aber es ist einfach eine tolle Anwendung. –

1

Hey ich denke, das wird dir helfen. Die Antwort von Nacho L hat für mich funktioniert. Hier HTML book-like pagination?

+0

Vielen Dank atihska, wie ich unten für Jatin am Ende sage, ohne eine Lösung zu finden, entschied ich mich, einen Leser zu kaufen, und jetzt benutze ich Page Turner Reader, der nicht kostenlos ist, aber es ist nur eine erstaunliche App. –

+0

@Atishka, ich habe Ihren Ratschlag getestet und es funktioniert. Ich bin nicht gut mit js, also könntest du mir sagen, wie man Seiten durch Klicken oder Scrollen ändert? Ein Hinweis würde geschätzt werden. –

8

Ich habe Paginierung Wirkung in Android wie dies getan ..

-> eine Klasse benutzerdefinierte webview erstellen.
-> legen Sie unter Clients und laden Sie URL dann erhalten Sie horizontale Scrollen mit Seitenanzahl.
-> Sperren Sie die Standardansicht der Webansicht.
-> Um einen reibungslosen Paginierungseffekt zu erzielen, anstatt die Bildlaufleiste der Webansicht zu verschieben, verschieben Sie die gesamte Webansicht so, dass für eine Seite eine einzige Webansicht angezeigt wird.
-> Verwenden Sie Ihre eigenen Viewflippers, um vorherige und nächste Seiten zu puffern.


Ich habe alle diese Implementierungen getan und ich ein Produkt für einen organisation.Just habe ich meine Idee teilen bin, wie zu den besten solution.Instead Einschränkung aufgrund der Verwendung dieser sdk im mittleren Drittel Paritäten und stucking zu nähern mach dir alles zu Eigen.

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

ein laden Sie URL

+0

bro ultimatum ... ich suchte wirklich nach einer Lösung für eine Woche. Ultimatum, du hast wirklich ein großes Problem für mich gelöst. Ich wünschte, ich könnte dir eine 100 geben. Wer nach einer Lösung sucht, der funktioniert perfekt. Möglicherweise müssen Sie die addCSS-Regel ein wenig ändern, aber die Lösung funktioniert definitiv. Vielen Dank Bruder –

+1

Vielen Dank für Ihren Kommentar arunavh !! Sie sind herzlich willkommen für weitere Hilfe :) –

+0

Vielen Dank für Ihre Zeit Uday, ich werde es versuchen, als Sohn, wie ich kann aber denken Sie, Ihre Lösung ist es ein bisschen einfach zu implementieren? (Ich habe es gerade schnell gelesen, als ich im Büro bin) –

Verwandte Themen