Как создать минимальный файл epub с помощью ebooklibPython

Программы на Python
Anonymous
Как создать минимальный файл epub с помощью ebooklib

Сообщение Anonymous »

Я хотел бы использовать Python и ebooklib для создания «минимального» ePub из существующего. Другими словами, я хочу сохранить только необходимое подмножество метаданных (название, создатель, дата, издатель), изображение обложки, содержание, корешок и (очевидно) весь текст и удалить все лишние данные (лишние метаданные, лишние изображения, шрифты и т. д.).
Вот мой текущий код:

Код: Выделить всё

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 можно правильно открыть стандартной программой чтения epub примерно в 8 случаях из 10, но в в остальных случаях читатель жалуется на неправильный формат и не может корректно отобразить книгу. Так что я предполагаю, что некоторые другие элементы архива тоже следует скопировать, но я не специалист по формату epub, а документация пакета ebooklib довольно короткая и не охватывает все подробности.
Есть ли здесь мастер epub, который мог бы дать мне несколько советов?
Заранее спасибо

Подробнее здесь: https://stackoverflow.com/questions/789 ... g-ebooklib

Вернуться в «Python»