Вот мой текущий код:
Код: Выделить всё
import ebooklib as ebl
from ebooklib import epub
def minimal_epub(filename):
old, new = epub.read_epub(filename), epub.EpubBook()
for key in ['title', 'creator', 'date', 'publisher']:
metadata = old.get_metadata('DC', key)
if metadata: new.add_metadata('DC', key, metadata[0][0])
print(new.get_metadata('DC', key)) # show current metadata field
print(new.metadata) # show all metadata fields
# assume that the largest image in archive is the cover image
sortkey = lambda item: -len(item.content) # sort images by decreasing sizes
cover = sorted(old.get_items_of_type(ebl.ITEM_IMAGE), key=sortkey)[0]
new.set_cover(cover.file_name, cover.content) # keep largest image as cover
print(cover.file_name) # show cover filename
for item in old.get_items_of_type(ebl.ITEM_DOCUMENT):
new.add_item(item); print(item) # show name of document items
for item in old.get_items_of_type(ebl.ITEM_STYLE):
new.add_item(item); print(item) # show name of styles
new.toc = old.toc; print(new.toc) # show links in table of content
new.spine = old.spine; print(new.spine) # show spine
new.add_item(epub.EpubNcx()); new.add_item(epub.EpubNav()) # navigation
epub.write_epub(filename.replace('.','+.'), new)
>>> minimal_epub('path/to/file.epub')
Сгенерированный (минимальный) файл epub можно правильно открыть стандартной программой чтения epub примерно в 8 случаях из 10, но в в остальных случаях читатель жалуется на неправильный формат и не может корректно отобразить книгу. Так что я предполагаю, что некоторые другие элементы архива тоже следует скопировать, но я не специалист по формату epub, а документация пакета ebooklib довольно короткая и не охватывает все подробности.
Есть ли здесь мастер epub, который мог бы дать мне несколько советов?
Заранее спасибо
Подробнее здесь: https://stackoverflow.com/questions/789 ... g-ebooklib