背景

闲暇之时,喜欢在我的ireader上面看点读物,当然,也免不了无聊时看点打发时间的小说。ireader就这点好,看网文方便。尽管号称有50w的书源,但是我关注的一些正经小说在上面也找不到,毕竟独家版权的不在少数。那就只有到处找一些精校后的资源(一般都是完结两三年的,对作者的影响较小。也会看正版啦,只不过自带商城上面没有,也没有办法离线保存),除开一些别人已经精心制作好的,其他一些epub尽管能用,但是内容和排版却不是那么尽人意。自己动手的话,耗时也比较大。有人会问,为什么不用一些转换工具,比如EasyPub、ePUBee Magic等呢?甚至还有在线转换工具ePUBee之类的。是啊,这么多可选择的工具,还要去造轮子。

可是这些工具都有共通之处,那就是会在一些你看不到的地方甚至看得到的地方增加广告。或许是我过于追求完美,无法容忍。所以便花了两个夜晚的时间制作出来这个无广告、无门槛(?)的工具————epubBuilder。这只是一个非常初期的版本,可以在本地使用,稍微改改就能直接上线变成一个互联网工具。岂不美哉?

食用指南

打开 index.php ,看到如下内容,需要填写的内容都在后面有备注,按实际情况填写即可。填写完成之后用CLI模式,控制台直接输入 php index.php即可

<?php
define('ROOT', dirname(__FILE__) . '/');
define('TMPDIR', ROOT . 'tmp');
define('OS', TMPDIR . '/OEBPS/');
require ROOT . 'lib/epub.class.php';

## 填写区,勿动以上内容
$config = [
    'styles' => '', //自定义样式路径,本地
    'txtPath' => ROOT . '此处填写txt文件名称', //把txt文件放到index.php文件目录下
    'coverImg' => '', //自定义封面图片路径,可以为网络图片地址,建议放在本地
    'toc' => false, //是否要插入正文目录. ireader对正文目录的兼容效果不好(实际上是不支持dl dd标签),默认关闭。
    'patternType' => 1, //必填,书籍目录类型,见下方参数说明,
    'creater' => '', //作者,必填
    'bookName' => '', //书名,必填
    'language' => 'zh-CN', //语言,默认中文
    'date' => date("Y-m-d"), //发布时间,默认当前日期
];


## 填写区结束,勿动以下内容

(new epub($config))->epub_builder();

参数patternType说明

1 第xxx章/回/部/节/集/卷 xxxx。标准格式推荐,大作基本符合类型1. 示例: 第1520章 我有男朋友了

2 类型1 + 简介/前言/序章/楔子/终章/后记/尾声/番外。在类型1的基础上扩充了其他常见标题,标题不包括段前空白。示例: 番外 我与男朋有的那段往事

3 同类型2,区别在于类型3包括段前空白,容错率底(匹配更精准,建议选择这个)示例:简介 我叫你老公

4 Chapter/Section 序号 标题。 英文书籍常用此格式,示例: Chapter 1 我来自地球

5 正文 序号。非标准格式,示例:正文 12

6 序号 标题。晋江常用标题,示例: 1 我就是李明亮,阁下?

实现思路

实现方法比较简单。epub的本质就是zip,所以只需要生成对应的html章节页面,和对应的目录信息之后,然后压缩到一起。html和目录均采用模板文件生成,这样处理之后的所有标准格式。