转自:http://ap100.sinaapp.com/?p=21


android下解析epub格式书籍的相关资料不多,查了很久找出了一些相关资料,找到了一个epublib包,

Epublib开发android的主页:http://www.siegmann.nl/epublib/android

相关jar包下载:https://github.com/downloads/psiegman/epublib/epublib-core-latest.jar

http://www.slf4j.org/android/slf4j-android-1.6.1-RC1.jar

在线API:http://www.siegmann.nl/static/epublib/apidocs/

具体的书籍信息提取代码如下:


package com.zyj.ui;import java.io.IOException;import java.io.InputStream;import nl.siegmann.epublib.domain.Book;import nl.siegmann.epublib.domain.Metadata;import nl.siegmann.epublib.domain.Resource;import nl.siegmann.epublib.epub.EpubReader;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.widget.ImageView;import android.widget.TextView;public class MainActivity extends Activity {    /** Called when the activity is first created. */private TextView bookInfoText;private ImageView coverImage;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);                setContentView(R.layout.main);                bookInfoText = (TextView) findViewById(R.id.bookInfoText);        coverImage = (ImageView) findViewById(R.id.coverImage);                try {InputStream is = getAssets().open("timefriend.epub");Book book = new EpubReader().readEpub(is);Metadata metadata = book.getMetadata();String bookInfo = "作者:"+metadata.getAuthors()+"\n出版社:"+metadata.getPublishers()+"\n出版时间:" +metadata.getDates()+"\n书名:"+metadata.getTitles()+"\n简介:"+metadata.getDescriptions()+"\n语言:"+metadata.getLanguage()+"\n\n封面图:";bookInfoText.setText(bookInfo);nl.siegmann.epublib.domain.Resources ress = book.getResources();Resource res = ress.getById("cover");byte[] data = res.getData();Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);coverImage.setImageBitmap(bitmap);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}            }}

说明:epub格式的书籍其实就一个zip压缩包,可以将其后缀名改为.zip然后解压缩后查看文件目录。

遇到的问题:

在获取书籍封面图片的时候通过epub主页提供的方法

Bitmap coverImage = BitmapFactory.decodeStream(book.getCoverImage() .getInputStream()); 中book.getCoverImage()得到的对象为null,查看解压后的文件后发现很多epub格式的书籍中都没有将封面图片的信息放到<metadata>标签下的cover标签中。

解决办法:通过book.getResources()获得Resources对象,然后通过方法getById("cover")获得Resource对象,这样就可以取到封面图信息了。

程序运行截图:




QQ:852041173


谭东


更多相关文章

  1. Android中Hook Instrumentation 的实现
  2. Android的移动存储解决方案之SharedPreferences
  3. Android中Parcelable接口用法
  4. android之listView缓存机制
  5. Android(安卓)socket通信
  6. Android中V4包下的Fragment使用
  7. Android(安卓)Parcelable和Serializable的区别(三)
  8. Android(安卓)之 Handler的分析
  9. android 实现序列化 浅析一

随机推荐

  1. 安卓面试基础知识点总结
  2. android 彻底关闭应用程序
  3. zxing QRcode
  4. Android 无线启动过程分析 无线启动过程
  5. android recycleView局部刷新的选择
  6. Android学习——TextView 设置中划线 下
  7. Best Android Remote Desktop Apps?
  8. Android中的文件存储数据方式 .
  9. android 开机动画(boot animation)的制作
  10. Android基础入门教程——7.1.3 Android(