查看: 701|回复: 57

[其他] 将如若北音大大的epub转换为电脑版可阅读状态(附代码和程序)

[复制链接]

1

听众

0

收听

0

好友

儒士

Rank: 4

UID
172238
积分
225
回帖
106
主题
6
铜币
1425
威望
169
银币
0
贡献
0
发书数
0
注册时间
2024-3-17
最后登录
2024-5-2
在线时间
28 小时
发表于 2024-4-26 11:56 | 显示全部楼层 |阅读模式
本帖最后由 hbwbf 于 2024-4-26 13:59 编辑

如若北音大大的一些epub,例如【多看全屏版】《道诡异仙》(精校全本+番外)等,只能在手机多看上阅读(书友测试SumatraPDF和稻壳也可以打开),不能在其他的一些电脑上的阅读器(neatreader之类的)和epub编辑器正常打开,我编写了python代码来把这些epub转换为电脑上可阅读的状态,这里分享一下(已征得如若北音大大同意)。
注意:转换完成的文件中用作背景的图片不能在一些电脑阅读软件里正常显示,感兴趣的可以在例如sigil的epub编辑器里自行编辑更正

使用环境:python 3.x(配置python环境以及如何运行py脚本,请自行在搜索引擎搜索)
使用方法:
1.运行脚本,输入文件路径(如下图红线),之后等待转换完成;

2.转换完成的文件在同一个文件夹,文件名前添加了'new'字样,如下图蓝色部分所示;

代码附件如下:


更新:将py脚本转换成了exe文件,下载解压后打开exe文件就可以用了,不用安装python。使用方法同上,输入文件路径即可。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

评分

参与人数 2威望 +1 铜币 +2 收起 理由
最后的守护者 + 1 论坛有您更精彩!
chetiayi + 2 论坛有您更精彩!

查看全部评分

回复

使用道具 举报

4

听众

1

收听

0

好友

儒士

Rank: 4

UID
132743
积分
235
回帖
362
主题
3
铜币
956
威望
52
银币
0
贡献
0
发书数
2
注册时间
2021-4-17
最后登录
2024-5-6
在线时间
72 小时
发表于 2024-4-26 12:31 | 显示全部楼层
太好了,技术宅拯救世界。很需要这个
[发帖际遇]: wokelove 前世一辈子没有讨到老婆,今世终成女儿国主,奖励 2 铜币. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

5

听众

1

收听

0

好友

举人

Rank: 6Rank: 6

UID
165139
积分
1790
回帖
2059
主题
28
铜币
1692
威望
746
银币
0
贡献
0
发书数
0
注册时间
2023-11-12
最后登录
2024-5-6
在线时间
322 小时
发表于 2024-4-26 12:46 | 显示全部楼层
谢谢楼主的技术分享,虽然看不懂也不会用。
回复 支持 反对

使用道具 举报

7

听众

0

收听

1

好友

贡士

Rank: 7Rank: 7Rank: 7

UID
143261
积分
2166
回帖
1965
主题
29
铜币
16765
威望
1163
银币
1
贡献
3
发书数
0
注册时间
2022-5-28
最后登录
2024-5-7
在线时间
619 小时
发表于 2024-4-26 12:56 | 显示全部楼层
为了验证在PC上能不能打开,我刚才下载了你说的那本书,neatreader我没装,Calibre确实不能打开:



SumatraPDF能打开:


稻壳阅读器能打开:


但SumatraPDF和稻壳也有一个问题,那就是封面和正文能正常显示,但“制作说明”和“简介”那里显示为空白,虽然不影响阅读正文,但确实是存在bug。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
[发帖际遇]: dot 与金三胖合影并将照片出售给太阳报,增加了 2 威望. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

7

听众

0

收听

1

好友

贡士

Rank: 7Rank: 7Rank: 7

UID
143261
积分
2166
回帖
1965
主题
29
铜币
16765
威望
1163
银币
1
贡献
3
发书数
0
注册时间
2022-5-28
最后登录
2024-5-7
在线时间
619 小时
发表于 2024-4-26 12:59 | 显示全部楼层
下载那本书我花了2威望,结果回复这个帖子,发帖际遇又把我的2威望给还回来了
回复 支持 反对

使用道具 举报

1

听众

0

收听

0

好友

儒士

Rank: 4

UID
172238
积分
225
回帖
106
主题
6
铜币
1425
威望
169
银币
0
贡献
0
发书数
0
注册时间
2024-3-17
最后登录
2024-5-2
在线时间
28 小时
 楼主| 发表于 2024-4-26 13:23 | 显示全部楼层
dot 发表于 2024-4-26 12:56
为了验证在PC上能不能打开,我刚才下载了你说的那本书,neatreader我没装,Calibre确实不能打开: ...

制作说明和简介的图片在北音大大的html代码里用的是背景图的方法显示的,这在电脑上的一些编辑器还有阅读器里不能正常显示,在手机app例如多看里可以,这跟两种阅读器显示背景的方法有关,不是我代码的问题
回复 支持 反对

使用道具 举报

1

听众

0

收听

0

好友

童生

Rank: 3Rank: 3

UID
160425
积分
157
回帖
129
主题
15
铜币
740
威望
85
银币
0
贡献
0
发书数
0
注册时间
2023-8-29
最后登录
2024-5-6
在线时间
26 小时
发表于 2024-4-26 13:24 | 显示全部楼层
EPUB是一种流行的电子书格式,其本质其实是由一系列的HTML文件、图片、样式表(CSS)和字体文件构成,通常被封装在一个.zip压缩包中,扩展名为.epub。LZ的这个脚本执行了以下操作:

好的,我将详细解释这个脚本的每一步操作:

1. 导入必要的Python模块:zipfile用于解压缩和压缩ZIP文件,os和glob用于文件和目录操作,shutil用于高级文件操作。

2. 定义find_files_with_char函数:在指定目录中查找文件名中含有特定字符串的文件。

3. 定义rename_files_in_directory函数:在指定目录中查找文件并重命名。如果文件名包含old_name,则将其替换为new_name。

4. 定义extract_file_from_zip函数:解压EPUB文件并重命名解压后的文件。
   - 使用zipfile模块打开EPUB文件,遍历其中的文件。
   - 对于图片文件(扩展名为.jpg、.webp或.png),将其解压到./OEBPS/Images/目录,并将文件名重命名为"1.jpg"、"2.webp"等格式。
   - 对于HTML文本文件(扩展名为.html或.xhtml),将其解压到./OEBPS/Text/目录,并将文件名重命名为"1.html"、"2.xhtml"等格式。
   - 对于字体文件(扩展名为.ttf、.TTF或.otf),将其解压到./OEBPS/Fonts/目录,并将文件名重命名为"1.ttf"、"2.TTF"等格式。
   - 对于样式表文件(扩展名为.css),将其解压到./OEBPS/Styles/目录,并将文件名重命名为"1.css"、"2.css"等格式。
   - 在重命名的过程中,将原始文件名和新文件名的对应关系保存在name_pair字典中。

5. 定义replace_strings_in_file函数:替换文件中的字符串。
   - 读取文件内容。
   - 对replacements字典进行迭代,将其键(旧字符串)替换为其值(新字符串)。
   - 将修改后的内容写回文件。

6. 定义compress_and_delete函数:压缩文件夹并删除原始文件夹。
   - 确保传入的路径是目录。
   - 使用zipfile模块将文件夹压缩到指定的ZIP文件中。
   - 删除原始文件夹。

7. 提示用户输入EPUB文件路径,并尝试打开文件。如果文件不存在、权限不足或发生其他错误,给出相应的提示。

8. 开始转换过程:
   - 切换工作目录到EPUB文件所在的目录。
   - 调用extract_file_from_zip函数解压EPUB文件并重命名解压后的文件。
   - 遍历./OEBPS目录下的所有文件,对于非字体和图片文件,调用replace_strings_in_file函数替换文件内容中的字符串,使用name_pair字典中记录的新旧文件名对应关系进行替换。
   - 调用compress_and_delete函数将修改后的文件夹重新压缩为一个新的EPUB文件,文件名为"new"+原始文件名。如果新文件已存在,则删除它。
   - 将mimetype文件添加到新的EPUB文件中。mimetype文件是EPUB文件的必要组成部分,用于标识该文件是一个EPUB电子书。
   - 删除临时的mimetype文件。

9. 如果转换过程中发生任何错误,给出相应的提示。

通过以上详细的步骤,这个脚本对无法在PC上打开阅读的EPUB文件进行了修复。它规范化了文件名,修复了HTML文本中的资源引用,并添加了必要的mimetype文件。这些操作解决了由于文件名不规范、引用错误和缺少mimetype文件导致的EPUB文件无法打开的问题,使得修复后的EPUB文件可以在PC上正常打开和阅读。

很佩服LZ的钻研精神,我也遇到了很多次如音大大的epub无法在PC上阅读的体验,倒是从没想到写个脚本来替换修复。感谢LZ的辛勤付出!
回复 支持 反对

使用道具 举报

7

听众

0

收听

1

好友

贡士

Rank: 7Rank: 7Rank: 7

UID
143261
积分
2166
回帖
1965
主题
29
铜币
16765
威望
1163
银币
1
贡献
3
发书数
0
注册时间
2022-5-28
最后登录
2024-5-7
在线时间
619 小时
发表于 2024-4-26 13:31 | 显示全部楼层
hbwbf 发表于 2024-4-26 13:23
制作说明和简介的图片在北音大大的html代码里用的是背景图的方法显示的,这在电脑上的一些编辑器还有阅读 ...

我没说你代码有问题啊,我都没使用你的代码转换书籍~~~
我只是说原版的epub在稻壳和sumatraPDF上能打开,如果是之前已经下载了很多本epub的话,还是尽量用这两个阅读器吧,从电脑里一本本地找,再去转换太麻烦了。。。如果是新下载的,倒是可以尝试转换一下。
回复 支持 反对

使用道具 举报

1

听众

0

收听

0

好友

儒士

Rank: 4

UID
172238
积分
225
回帖
106
主题
6
铜币
1425
威望
169
银币
0
贡献
0
发书数
0
注册时间
2024-3-17
最后登录
2024-5-2
在线时间
28 小时
 楼主| 发表于 2024-4-26 13:37 | 显示全部楼层
本帖最后由 hbwbf 于 2024-4-26 13:45 编辑
dot 发表于 2024-4-26 13:31
我没说你代码有问题啊,我都没使用你的代码转换书籍~~~
我只是说原版的epub在稻壳和sumatraPDF上能打开 ...

好的,我写这个代码的原因就是不想换阅读器,之前一直用电脑的neatreader看,结果北音大大的一些epub没法在里面正常打开,只能用其他软件例如手机多看app,所以才想写这个代码转换一下,这样就能在一些epub编辑器里打开文件,背景图片不能正常显示的问题就可以自己解决了
回复 支持 反对

使用道具 举报

2

听众

0

收听

0

好友

贡士

Rank: 7Rank: 7Rank: 7

UID
169435
积分
2105
回帖
1580
主题
173
铜币
4823
威望
1228
银币
0
贡献
0
发书数
0
注册时间
2024-1-30
最后登录
2024-5-6
在线时间
169 小时
发表于 2024-4-26 13:37 | 显示全部楼层
就佩服楼主这样的技术牛人!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|阡陌居

GMT+8, 2024-5-7 03:31 , Processed in 0.042387 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表