android平臺解析epub格式的書籍信息

     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 block
			e.printStackTrace();
		}
        
    }
}
說明:epub格式的書籍其實就一個zip壓縮包,可以將其後綴名改爲.zip然後解壓縮後查看文件目錄。

遇到的問題:

在獲取書籍封面圖片的時候通過epub主頁提供的方法

Bitmap coverImage = BitmapFactory.decodeStream(book.getCoverImage()
          .getInputStream());
中book.getCoverImage()得到的對象爲null,查看解壓後的文件後發現很多epub格式的書籍中都沒有將封面圖片的信息放到<metadata>標籤下的cover標籤中。

解決辦法:通過book.getResources()獲得Resources對象,然後通過方法getById("cover")獲得Resource對象,這樣就可以取到封面圖信息了。

程序運行截圖:




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章