android平台解析epub格式的书籍信息

  • Post author:
  • Post category:其他




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/


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




  1. package


    com.zyj.ui;




  2. import


    java.io.IOException;



  3. import


    java.io.InputStream;




  4. import


    nl.siegmann.epublib.domain.Book;



  5. import


    nl.siegmann.epublib.domain.Metadata;



  6. import


    nl.siegmann.epublib.domain.Resource;



  7. import


    nl.siegmann.epublib.epub.EpubReader;



  8. import


    android.app.Activity;



  9. import


    android.graphics.Bitmap;



  10. import


    android.graphics.BitmapFactory;



  11. import


    android.os.Bundle;



  12. import


    android.widget.ImageView;



  13. import


    android.widget.TextView;




  14. public




    class


    MainActivity


    extends


    Activity {



  15. /** Called when the activity is first created. */





  16. private


    TextView bookInfoText;



  17. private


    ImageView coverImage;




  18. @Override





  19. public




    void


    onCreate(Bundle savedInstanceState) {



  20. super


    .onCreate(savedInstanceState);



  21. setContentView(R.layout.main);


  22. bookInfoText = (TextView) findViewById(R.id.bookInfoText);

  23. coverImage = (ImageView) findViewById(R.id.coverImage);




  24. try


    {


  25. InputStream is = getAssets().open(

    “timefriend.epub”


    );


  26. Book book =

    new


    EpubReader().readEpub(is);




  27. Metadata metadata = book.getMetadata();


  28. String bookInfo =

    “作者:”


    +metadata.getAuthors()+



  29. “\n出版社:”


    +metadata.getPublishers()+



  30. “\n出版时间:”


    +metadata.getDates()+



  31. “\n书名:”


    +metadata.getTitles()+



  32. “\n简介:”


    +metadata.getDescriptions()+



  33. “\n语言:”


    +metadata.getLanguage()+



  34. “\n\n封面图:”


    ;


  35. bookInfoText.setText(bookInfo);



  36. nl.siegmann.epublib.domain.Resources ress = book.getResources();

  37. Resource res = ress.getById(

    “cover”


    );



  38. byte


    [] data = res.getData();


  39. Bitmap bitmap = BitmapFactory.decodeByteArray(data,

    0


    , data.length);


  40. coverImage.setImageBitmap(bitmap);


  41. }

    catch


    (IOException e) {



  42. // TODO Auto-generated catch block




  43. e.printStackTrace();

  44. }


  45. }

  46. }


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


遇到的问题:


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




Bitmap coverImage = BitmapFactory.decodeStream(book.getCoverImage()



.getInputStream());


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


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


程序运行截图: