如何根据屏幕大小将Epub Html拆分为多个页面
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何根据屏幕大小将Epub Html拆分为多个页面相关的知识,希望对你有一定的参考价值。
我正在开发一个读取电子书(以epub格式)的android应用程序,现在我正在使用Paul Siegeman的epublib库,它实际上是一个非常好的epub阅读器,但它有一些限制,例如我需要的那个,你不能水平移动页面(因为你读一本真正的书)所以我需要自己实现它,但我被卡住了。
实际读取epub然后将其放入webview的方法是下一个:
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);
}
所以当你看到我在webview中显示电子书时,据我所知,webview给出的唯一滚动可能性是上/下。
我正在考虑拆分getData()返回的html字符串,并将webview加载到页面中并使用viewpager逐个显示它们,但是如何根据屏幕大小正确分割html?
你觉得这个想法我是正确的吗?任何其他解决方案显示从左到右/从右到左(分页)或任何其他“免费或廉价”库的epub? (我试过PageTurner,它真的很棒,但商业版对我来说太贵了)
我在这样的机器人中做过分页效果..
- >创建自定义webview类。 - >设置在客户端下方并加载网址,然后您将获得具有页面计数的水平滚动。 - >锁定webview默认滚动。 - >为了平滑分页效果而不是移动webview的滚动,移动整个webview,这样一个页面就会有一个webview。 - >使用您自己的viewflippers来缓冲上一页和下一页。 我已经完成了所有这些实现,并且我为组织制作了一个产品。我正在分享我的想法如何寻求最佳解决方案。由于sdk的限制而不是使用第三方并且坚持中间,让每件事都成为你的拥有。
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();
}
一个你加载网址
关注这个github帐户。
FbReader为epub和pdf阅读器提供了一些很棒的库。试试这个....
要么
您可以通过扩展WebView来创建自己的自定义WebView。在这里,您可以从WebView中放置和修改所需的所有功能。
我的同事使用这个FbReader做了一个读者,这太棒了。
嘿,我认为这会对你有所帮助。 Nacho L的答案为我工作。在这里HTML book-like pagination?
以上是关于如何根据屏幕大小将Epub Html拆分为多个页面的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Angular 9 中将 HTML 页面拆分为 A4 大小