数字阅读ePub格式因其良好的兼容性和阅读体验,已经成为电子书的主流格式之一。而Markdown作为一种轻量级标记语言,以其简洁易用的特点深受技术写作者喜爱。本文将介绍如何使用Python、wxPython以及ebooklib等库,构建一个功能完备的Markdown转ePub工具,让您轻松将文章、笔记转换成精美的电子书。
C:\pythoncode\new\output\PhotoToMDToEpub.py
这个应用程序具有以下核心功能:
为什么选择这些技术来实现我们的应用?
应用采用双栏布局设计:
界面设计遵循了简洁实用的原则,使用wxPython的SplitterWindow实现可调节的分栏布局,保证在不同屏幕尺寸下都有良好的使用体验。
def setup_layout(self):
# 左侧面板布局
left_sizer = wx.BoxSizer(wx.VERTICAL)
left_sizer.Add(wx.StaticText(self.left_panel, label="图片列表:"), 0, wx.ALL, 5)
left_sizer.Add(self.list_box, 1, wx.EXPAND | wx.ALL, 5)
left_sizer.Add(wx.StaticText(self.left_panel, label="预览:"), 0, wx.ALL, 5)
left_sizer.Add(self.preview, 0, wx.ALL | wx.CENTER, 5)
self.left_panel.SetSizer(left_sizer)
# 右侧面板布局
right_sizer = wx.BoxSizer(wx.VERTICAL)
right_sizer.Add(wx.StaticText(self.right_panel, label="Markdown 编辑区:"), 0, wx.ALL, 5)
right_sizer.Add(self.memo, 1, wx.EXPAND | wx.ALL, 5)
self.right_panel.SetSizer(right_sizer)
# 分割器设置
self.splitter.SplitVertically(self.left_panel, self.right_panel)
self.splitter.SetSashGravity(0.35)
图片是电子书中的重要元素,我们实现了完整的图片管理功能:
def on_insert_images(self, event):
wildcard = "图片文件|*.jpg;*.jpeg;*.png;*.gif;*.bmp|所有文件|*.*"
dlg = wx.FileDialog(
self, "选择图片", wildcard=wildcard, style=wx.FD_OPEN | wx.FD_MULTIPLE
)
if dlg.ShowModal() == wx.ID_OK:
paths = dlg.GetPaths()
for path in paths:
filename = os.path.basename(path)
self.image_paths.append(path)
self.list_box.Append(filename)
图片预览功能通过调整图片尺寸,确保在有限空间内展示完整图像:
def display_preview(self, index):
if 0 <= index < len(self.image_paths):
img_path = self.image_paths[index]
img = wx.Image(img_path, wx.BITMAP_TYPE_ANY)
# 调整图片大小适合预览区域
img_width, img_height = img.GetWidth(), img.GetHeight()
preview_width, preview_height = self.preview.GetSize()
ratio = min(preview_width / img_width, preview_height / img_height)
new_width, new_height = int(img_width * ratio), int(img_height * ratio)
if new_width > 0 and new_height > 0:
img = img.Scale(new_width, new_height)
bitmap = wx.Bitmap(img)
self.preview.SetBitmap(bitmap)
self.preview.Refresh()
这是本应用最核心的功能,涉及以下步骤:
关键代码片段:
def convert_md_to_epub(self, md_path):
# 创建ePub书籍
book = epub.EpubBook()
# 设置元数据
book.set_identifier(os.path.basename(md_path))
book.set_title(os.path.splitext(os.path.basename(md_path))[0])
book.set_language('zh')
# 从markdown内容中提取图片并处理
image_refs = []
lines = md_content.split('\n')
for i, line in enumerate(lines):
# 解析markdown图片引用
if '' in line:
# 处理图片,添加到ePub
...
# 转换markdown为HTML
html_content = markdown.markdown(md_content)
# 创建章节
chapter = epub.EpubHtml(
title='Content',
file_name='content.xhtml',
content=f'{html_content}'
)
book.add_item(chapter)
# 添加导航结构
...
# 写入ePub文件
epub_path = os.path.splitext(md_path)[0] + ".epub"
epub.write_epub(epub_path, book, {})
使用这个工具的典型工作流程:
这个工作流程大大简化了从内容创作到电子书生成的过程,特别适合博客作者、教程撰写者以及电子书创作者使用。
这个项目还有很多可以扩展的方向:
在开发这个项目的过程中,我得到了几点经验:
要运行这个应用,您需要安装以下Python库:
pip install wxPython Pillow ebooklib markdown
然后直接运行Python脚本即可启动应用:
python md_to_epub_converter.py
*注:使用NeatReader功能时,请确认已正确安装NeatReader软件,且路径为"C:\Program Files (x86)\NeatReader\NeatReader.exe"。如有不同,可修改代码中的路径设置。
*