使用epublib自动生成epub文件
本文的目的是将获取到的多个网页打包生成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文件相关推荐
- Android 个人学习笔记- 导入android项目,无法自动生成R文件的解决方法
2019独角兽企业重金招聘Python工程师标准>>> 从网上下载源码导进eclipse后,发现该有的jar包都有以后,就是无法在gen目录下生成R文件. 假如你也遇到这样的问题,你 ...
- aidl生成java文件_Android AIDL自动生成Java文件测试
/******************************************************************************** * Android AIDL自动生成 ...
- c 自动生成html文件,webpack4系列教程(三):自动生成项目中的HTML文件
1. webpack中的CommonJS和ES Mudule 规范 1.1 CommonJs规范 CommonJs规范的出发点:JS没有模块系统.标准库较少.缺乏包管理工具:为了让JS可以在任何地方运 ...
- linux系统中自动生成snap文件_在Linux操作系统下自动生成Makefile的方法
在Linux操作系统下进行开发,编写Makefile似乎是不可缺少的事情.但是对于一个比较大的工程,编写一个符合规范的Makefile并非易事.而且由于Makefile的各种显式,隐式规则,加之平时并 ...
- Android Studio SVN配置忽略文件 1.用Android Studio创建一个项目,会在根目录和Module目录下自动生成.gitignore文件,貌似是Git的配置文件,
Android Studio SVN配置忽略文件 1.用Android Studio创建一个项目,会在根目录和Module目录下自动生成.gitignore文件,貌似是Git的配置文件,和SVN没有关 ...
- 搜索的php mysql代码生成器_PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)...
根据 Mysql 里的字段 自动生成 类文件: 但需要导入: require_once ./db/ez_sql_core.php; require_once ./db/ez_sql_mysql.php ...
- 在WebStorm里配置watcher实现编辑less文件时自动生成.css文件
一.webstrom自动生成css文件 1.安装 nodejs //查看nodejs版本 node -v //查看npm版本 npm -v //全局安装less npm install ...
- python制作相册_《自拍教程73》Python 自动生成相册文件夹
这里将告诉您<自拍教程73>Python 自动生成相册文件夹,具体操作过程:案例故事: 接Python mediainfo批量重命名图片文件,测试图片是批量重命名好了, 但是将测试图片放于 ...
- Android Studio的res自动生成的文件出错了_莫韵乐与bug的奇妙冒险
Android Studio的res自动生成的文件出错了_莫韵乐与bug的奇妙冒险 无论学什么编程语言都要跟奇怪的bug过不去 奇怪的bug出现了 今天满怀欣喜地进行安卓开发学习,创建好一个新的项目之 ...
- Python 自动化教程(5) : 自动生成Word文件
系列教程: Python 自动化教程(1) 概述,第一篇 Excel自动化 Python 自动化教程(2) : Excel自动化:使用pandas库 Python 自动化教程(3) : 自动生成PPT ...
最新文章
- 基于海康机器视觉算法平台的对位贴合项目个人理解 | CSDN原力计划
- 关于数据中台的深度思考与总结(超级干货)
- 将打包好的VUE文件部署到Web容器(Nginx)中,解决接口调用跨域问题
- js富文本编辑器_自制富文本编辑器
- servlet与tomcat的关系
- HDR:为用户打造的视觉盛宴
- AWS Elemental推出新一代基于云的直播视频服务
- axios请求失败,response.data返回的状态码及错误信息获取
- vue3 @/cli脚手架搭建项目
- 软件设计师07-程序语言基础知识
- 根据卫星运动矢量计算轨道六根数
- 德州农工大学计算机硕士申请,2019至领留学获德州农工大学TAMU电子工程硕士ECE录取...
- macOS Ventura 13.1 (22C65) 正式版发布,ISO、IPSW、PKG 下载
- Android 悬浮窗日志工具
- 武林传奇之七剑下天山java游戏开发商_宝3武林传奇之七剑下天山的配方
- CSS3中的transition和transform属性
- 嵌入式Linux学习笔记之Linux内核裁剪
- 通过RabbitMQ 进行消息通知
- java 开发用到网络爬虫,抓取汽车之家网站全部数据经历
- 为什么你和同事关系处不好?
热门文章
- centos mysql 主从安装_基于 CentOS Mysql 安装与主从同步配置详解
- php stacktrace,Laravel:如何在PhpUnit上启用stacktrace错误
- mysql client 升级_解决consider upgrading MySQL client问题
- redis双写一致性问题
- 本田HR-V Sport官图发布 换装高功率1.5T发动机
- redhat 6.4 虚拟化平台搭建千万PV架构
- HTTPS为什么更安全,先看这些 , 网络加密 , 加密解密
- Java中BufferedReader和scanner的对比
- 处理异常:org.springframework.beans.factory.BeanNotOfRequiredTypeException
- python基础——使用list和tuple