有些电子书适合制作成MDX查询,有些词典则适合阅读。因此也有MDX转EPUB的需要。
自己摸索的方法,不一定高效,大家有更好的方法欢迎补充。
1、解包MDX,MdxExport解开,词序可能是乱的,要注意。其他的解包 工具暂时没测试。
2、把解包后的TXT稍微处理一下,基本格式如下:
<title>标题</title>
<body0>
正文内容...
</body0>
可以用正则替换:
</>\n(.+)
替换成:
</body0>\n<title>\1</title>\n<body0>
再调整一下第一个词头和最后一个词头,保持格式一致。
3、如果有MDD,也解开,把CSS、图片、TXT,都放在同一目录下,比如:D:\01\05
如:把 CRFDPIC文件夹 放在 D:\01\05目录下。
4、写 Python代码:
import os
from ebooklib import epub
def txt_to_epub(txt_path, epub_path, css_path, img_dir):
# 创建一个EPUB书籍对象
book = epub.EpubBook()
# 设置书籍的标题和作者
book.set_title(os.path.splitext(os.path.basename(txt_path))[0])
book.set_language('ja')
# 检查样式文件是否存在
if not os.path.exists(css_path):
print(f"样式文件 {css_path} 不存在。")
return
# 创建一个样式文件
style = epub.EpubItem(uid="style", file_name="style/ziyuan.css", media_type="text/css", content=open(css_path, 'rb').read())
book.add_item(style)
# 读取TXT文件并解析内容
with open(txt_path, 'r', encoding='utf-8') as file:
content = file.read()
# 将内容分割为章节
chapters = content.split('<title>')[1:]
# 创建一个空的列表来存储章节
chapters_list = []
# 用于存储图片的字典
images = {}
for index, chapter in enumerate(chapters):
# 提取标题
title = chapter.split('</title>')[0].strip()
# 提取内容
body0_index = chapter.find('<body0>')
if body0_index != -1:
body_content = chapter[body0_index+len('<body0>'):].split('</body0>')[0].strip()
else:
body_content = chapter.strip()
# 处理图片
start_idx = 0
while True:
img_tag_start = body_content.find('<img', start_idx)
if img_tag_start == -1:
break
img_tag_end = body_content.find('>', img_tag_start)
src_start = body_content.find('src="', img_tag_start)
src_end = body_content.find('"', src_start + 5)
img_src = body_content[src_start + 5:src_end]
if not img_src.startswith('/'):
img_src = '/' + img_src
img_path = img_src[1:]
if os.path.exists(os.path.join(img_dir, img_path)):
img_uid = f"image{index+1}_{len(images)+1}"
img_item = epub.EpubItem(uid=img_uid, file_name=f"image_{img_uid}.jpg", media_type="image/jpeg", content=open(os.path.join(img_dir, img_path), 'rb').read())
book.add_item(img_item)
images[img_src] = img_uid
body_content = body_content[:src_start] + f'src="image_{img_uid}.jpg"' + body_content[src_end:]
start_idx = img_tag_end
# 创建一个EPUB章节对象
chapter_html = epub.EpubHtml(title=title, file_name=f'chap_{index+1}.xhtml', lang='ja')
chapter_html.content = f'<h1>{title}</h1>{body_content}'
book.add_item(chapter_html)
chapters_list.append(chapter_html)
# 添加书签
book.toc = (epub.EpubNcx(),)
# 设置书籍的主体内容(章节)
book.spine = ['nav'] + chapters_list
# 保存EPUB文件
epub.write_epub(epub_path, book, {})
# 遍历指定目录下的所有TXT文件
for txt_file in os.listdir('D:\\01\\05'):
if txt_file.endswith('.txt'):
txt_path = os.path.join('D:\\01\\05', txt_file)
epub_path = os.path.join('D:\\01\\05', txt_file.replace('.txt', '.epub'))
css_path = os.path.join('D:\\01\\05', 'ziyuan.css') # CSS文件的路径
img_dir = 'D:\\01\\05' # 图片目录
txt_to_epub(txt_path, epub_path, css_path, img_dir)
print(f"Converted {txt_file} to EPUB format.")
print("All files have been converted to EPUB format.")
运行PY,生成EPUB电子书。(按:我不会编程,以上代码AI写的,经过调整后能用)
中国佛教文化大观TXT.zip (1.5 MB)
中国佛教文化大观.epub (2.3 MB)
本身有图片,图片太大,我就生成了无图本,有图的epub有105M。
这只是一个很粗糙的版本,进一步优化,要正则 调整 TXT内的数据结构。以美化书籍排版。