本文的目的是将获取到的多个网页打包生成epub文件。

首先简单介绍一下我们使用的工具,epublib,它是一个基于java的开源工具,它可以快捷的生成一个可以使用的epub文件。

对于epub文件,关于它的标准,我们可以在这里看到。目前已经有了多个版本,最新的版本甚至还支持视频、音频等格式的文件。不过目前多数阅读器尚不支持带有视频、音频文件的epub的阅读。据说iphone上的ibooks支持所有的标准。有兴趣的同学可以研究研究。

epub文件本质上是一个zip格式的压缩包。我们可以从网上随便下载一个可以阅读的epub电子书,将其后缀改为.zip进行解压,就可以看到其中的详细信息。从解压到的文件中我们可以看出,它主要是通过一个名叫content.opf的文件进行组织的。

但是,我根据他们提供的Example,并不能得到可以打开的epub文件,而且由于epublib版本的升级,它给出的示例并没有进行相应的升级,导入到eclipse中的时候是有错误的。经过分析,问题出在了content.opf文件中,其中的一些字符串和可以读取的epub文件相应位置的字符串不是很一样。这可能和我们所使用的阅读器有关系,我使用了两个阅读器,一个是Adobe的Adobe Digital Editions 2.0,还有一个是Fbreader的windows版。

然后,我就分析了一个epublib的源代码,将其中的一部分的字符串生成部分进行了修改,最终就可以生成可以打开的epub文件了。

下边给出我修改过的epublib源码,以及一个Main示例。将其复制到eclipse中,并将新建文件夹复制到c盘book1文件中即可。运行后会生成一个名叫test.pub的文件。

修改后的epublib源码下载地址:http://download.csdn.net/detail/u012314976/6771579

另外,github的源码包中并没有给出相应的依赖包,分别是kxml2-2.3.0.jar,slf4j-api-1.7.5.jar,slf4j-simple-1.7.5.jar,在源码包中也一并给出。

大家还有什么问题,可以跟帖留言,我将会及时回复。

最后附上我们的Main函数:

package com.zhyoulun.test;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipFile;import nl.siegmann.epublib.domain.Author;
import nl.siegmann.epublib.domain.Book;
import nl.siegmann.epublib.domain.Date;
import nl.siegmann.epublib.domain.Resource;
import nl.siegmann.epublib.domain.ResourceInputStream;
import nl.siegmann.epublib.domain.Spine;
import nl.siegmann.epublib.epub.EpubWriter;
import nl.siegmann.epublib.service.MediatypeService;public class Main
{public static final String DISK_DIR_ROOT = "C:/book1/";public static void main(String[] args){try{Book book = new Book();book.getMetadata().addTitle("三国演义");book.getMetadata().addAuthor(new Author("罗贯中", "吴承恩"));book.getMetadata().addContributor(new Author("zhang"));book.getMetadata().addPublisher("zhang");//List<String> list= new list;List<String> list=new ArrayList<String>();list.add("publish-哈哈");list.add("publish-嘿嘿");book.getMetadata().setPublishers(list);list=new ArrayList<String>();list.add("Descriptions-哈哈");list.add("Descriptions-嘿嘿");book.getMetadata().setDescriptions(list);List<Date> list2 = new ArrayList<Date>();list2.add(new Date(new java.util.Date()));book.getMetadata().setDates(list2);book.getMetadata().setSubjects(list);book.addSection("introduce", new Resource(new FileInputStream(new File(DISK_DIR_ROOT + "haha.html")), "haha.html"));
//          book.setCoverImage(new Resource(new FileInputStream(new File(
//                  DISK_DIR_ROOT + "cover.png")), "cover.png"));EpubWriter epubWriter = new EpubWriter();epubWriter.write(book, new FileOutputStream(new File("test.epub")));System.out.println("ok");} catch (FileNotFoundException e){// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e){// TODO Auto-generated catch blocke.printStackTrace();}}
}

使用epublib自动生成epub文件相关推荐

  1. Android 个人学习笔记- 导入android项目,无法自动生成R文件的解决方法

    2019独角兽企业重金招聘Python工程师标准>>> 从网上下载源码导进eclipse后,发现该有的jar包都有以后,就是无法在gen目录下生成R文件. 假如你也遇到这样的问题,你 ...

  2. aidl生成java文件_Android AIDL自动生成Java文件测试

    /******************************************************************************** * Android AIDL自动生成 ...

  3. c 自动生成html文件,webpack4系列教程(三):自动生成项目中的HTML文件

    1. webpack中的CommonJS和ES Mudule 规范 1.1 CommonJs规范 CommonJs规范的出发点:JS没有模块系统.标准库较少.缺乏包管理工具:为了让JS可以在任何地方运 ...

  4. linux系统中自动生成snap文件_在Linux操作系统下自动生成Makefile的方法

    在Linux操作系统下进行开发,编写Makefile似乎是不可缺少的事情.但是对于一个比较大的工程,编写一个符合规范的Makefile并非易事.而且由于Makefile的各种显式,隐式规则,加之平时并 ...

  5. Android Studio SVN配置忽略文件 1.用Android Studio创建一个项目,会在根目录和Module目录下自动生成.gitignore文件,貌似是Git的配置文件,

    Android Studio SVN配置忽略文件 1.用Android Studio创建一个项目,会在根目录和Module目录下自动生成.gitignore文件,貌似是Git的配置文件,和SVN没有关 ...

  6. 搜索的php mysql代码生成器_PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)...

    根据 Mysql 里的字段 自动生成 类文件: 但需要导入: require_once ./db/ez_sql_core.php; require_once ./db/ez_sql_mysql.php ...

  7. 在WebStorm里配置watcher实现编辑less文件时自动生成.css文件

    一.webstrom自动生成css文件 1.安装 nodejs     //查看nodejs版本  node -v //查看npm版本  npm -v //全局安装less  npm install ...

  8. python制作相册_《自拍教程73》Python 自动生成相册文件夹

    这里将告诉您<自拍教程73>Python 自动生成相册文件夹,具体操作过程:案例故事: 接Python mediainfo批量重命名图片文件,测试图片是批量重命名好了, 但是将测试图片放于 ...

  9. Android Studio的res自动生成的文件出错了_莫韵乐与bug的奇妙冒险

    Android Studio的res自动生成的文件出错了_莫韵乐与bug的奇妙冒险 无论学什么编程语言都要跟奇怪的bug过不去 奇怪的bug出现了 今天满怀欣喜地进行安卓开发学习,创建好一个新的项目之 ...

  10. Python 自动化教程(5) : 自动生成Word文件

    系列教程: Python 自动化教程(1) 概述,第一篇 Excel自动化 Python 自动化教程(2) : Excel自动化:使用pandas库 Python 自动化教程(3) : 自动生成PPT ...

最新文章

  1. 基于海康机器视觉算法平台的对位贴合项目个人理解 | CSDN原力计划
  2. 关于数据中台的深度思考与总结(超级干货)
  3. 将打包好的VUE文件部署到Web容器(Nginx)中,解决接口调用跨域问题
  4. js富文本编辑器_自制富文本编辑器
  5. servlet与tomcat的关系
  6. HDR:为用户打造的视觉盛宴
  7. AWS Elemental推出新一代基于云的直播视频服务
  8. axios请求失败,response.data返回的状态码及错误信息获取
  9. vue3 @/cli脚手架搭建项目
  10. 软件设计师07-程序语言基础知识
  11. 根据卫星运动矢量计算轨道六根数
  12. 德州农工大学计算机硕士申请,2019至领留学获德州农工大学TAMU电子工程硕士ECE录取...
  13. macOS Ventura 13.1 (22C65) 正式版发布,ISO、IPSW、PKG 下载
  14. Android 悬浮窗日志工具
  15. 武林传奇之七剑下天山java游戏开发商_宝3武林传奇之七剑下天山的配方
  16. CSS3中的transition和transform属性
  17. 嵌入式Linux学习笔记之Linux内核裁剪
  18. 通过RabbitMQ 进行消息通知
  19. java 开发用到网络爬虫,抓取汽车之家网站全部数据经历
  20. 为什么你和同事关系处不好?

热门文章

  1. centos mysql 主从安装_基于 CentOS Mysql 安装与主从同步配置详解
  2. php stacktrace,Laravel:如何在PhpUnit上启用stacktrace错误
  3. mysql client 升级_解决consider upgrading MySQL client问题
  4. redis双写一致性问题
  5. 本田HR-V Sport官图发布 换装高功率1.5T发动机
  6. redhat 6.4 虚拟化平台搭建千万PV架构
  7. HTTPS为什么更安全,先看这些 , 网络加密 , 加密解密
  8. Java中BufferedReader和scanner的对比
  9. 处理异常:org.springframework.beans.factory.BeanNotOfRequiredTypeException
  10. python基础——使用list和tuple