如何解决通过python的ebooklib修改epub文件,但是<head>里面的所有内容都丢失了
我正在使用 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,然后解压缩,然后我可以得到所有的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 文件中即可。
任何帮助将不胜感激。
解决方法
这里是 Ebooklib 的作者。使用 Ebooklib 执行此操作的唯一正确方法是读取 EPUB 文件并通过从原始文件中挑选您需要的内容从头开始构建新的 EPUB。你永远不应该读取文件,修改它并写下来,因为我们希望最终得到有效的 EPUB3,我们的方法是“我将忽略所有垃圾元数据、额外文件,只需要我需要的并保留我的布局文件夹”。
话虽如此,那是针对我们开发的在线发布系统。在系统之外使用 Ebooklib 能够做这样的事情确实很有意义。我目前不确定这需要多少更改。会去看看。
亚历山大
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。