【发布时间】:2025-11-30 00:20:04
【问题描述】:
我正在使用 python 电子书库 ebooklib 来修改一批 epub 文件。伪代码如下。
book = epub.read_epub(input_path)
page_add = epub.EpubHtml(title='index_add', file_name='index_add.html', lang='en')
page_add.content = u'''
<?xml version='1.0' encoding='utf-8'?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<body>
<div>
I'm a new added page
</div>
</body>
</html>
'''
book.add_item(page_add)
book.spine.insert(1, page_add)
epub.write_epub(output_path, book, {})
运行代码后,生成了一个新的 epub 文件,并在其中添加了新页面。问题是所有原始 epub 文件的原始内容都失去了样式。
众所周知,epub 文件是由 HTML 文件组成的。我把文件扩展名从.epub改为.zip,然后unzip,就可以得到所有的HTML文件了。对这些文件挖了一会,发现样式丢失的原因是所有的样式表文件都位于所有原始HTML文件的<head>标签内,而新文件丢失了所有这些内容。 <head> 标签。原始的<head> 如下所示:
<head>
<link href="../stylesheet.css" rel="stylesheet" type="text/css"/>
<link href="../page_styles.css" rel="stylesheet" type="text/css"/>
</head>
从ebooklib的doc,我找到了如下描述:
在定义内容时,您可以将其定义为有效的 HTML 文件,或者只是作为内容的 HTML 元素的一部分。它会忽略你在
<head>元素中的任何内容。
我认为这可能是<head>标签内所有内容丢失的原因。我不知道为什么 ebooklib 会这样做。有没有人有办法解决它?我认为我的要求很普遍。只需将一个页面添加到许多现有的 epub 文件中。
我们将不胜感激。
【问题讨论】: