android下解析epub格式書籍的相關資料很少,查了好久找出了一些相關資料,找到了一個epublib包, java
Epublib開發android的主頁:http://www.siegmann.nl/epublib/android
android
相關jar包下載:https://github.com/downloads/psiegman/epublib/epublib-core-latest.jar git
http://www.slf4j.org/android/slf4j-android-1.6.1-RC1.jar
github
在線API:http://www.siegmann.nl/static/epublib/apidocs/
api
具體的書籍信息提取代碼以下: app
package com.zyj.ui; dom
import java.io.IOException;
import java.io.InputStream; ide
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; ui
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 block
e.printStackTrace();
}
}
} spa
說明:epub格式的書籍其實就一個zip壓縮包,能夠將其後綴名改成.zip而後解壓縮後查看文件目錄。
遇到的問題:
在獲取書籍封面圖片的時候經過epub主頁提供的方法
中book.getCoverImage()獲得的對象爲null,查看解壓後的文件後發現不少epub格式的書籍中都沒有將封面圖片的信息放到<metadata>標籤下的cover標籤中。
解決辦法:經過book.getResources()得到Resources對象,而後經過方法getById("cover")得到Resource對象,這樣就能夠取到封面圖信息了。
程序運行截圖:
原文地址:http://blog.csdn.net/iamlixiaolong/article/details/7484436