Add support for viewing and converting KEPUB files

This commit is contained in:
Kovid Goyal 2025-02-24 09:50:07 +05:30
parent 91731ab5b8
commit fce03aaa38
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 13 additions and 3 deletions

View File

@ -18,7 +18,7 @@ What formats does calibre support conversion to/from?
calibre supports the conversion of many input formats to many output formats.
It can convert every input format in the following list, to every output format.
*Input Formats:* AZW, AZW3, AZW4, CBZ, CBR, CB7, CBC, CHM, DJVU, DOCX, EPUB, FB2, FBZ, HTML, HTMLZ, LIT, LRF, MOBI, ODT, PDF, PRC, PDB, PML, RB, RTF, SNB, TCR, TXT, TXTZ
*Input Formats:* AZW, AZW3, AZW4, CBZ, CBR, CB7, CBC, CHM, DJVU, DOCX, EPUB, FB2, FBZ, HTML, HTMLZ, KEPUB, LIT, LRF, MOBI, ODT, PDF, PRC, PDB, PML, RB, RTF, SNB, TCR, TXT, TXTZ
*Output Formats:* AZW3, EPUB, DOCX, FB2, HTMLZ, OEB, LIT, LRF, MOBI, PDB, PMLZ, RB, PDF, RTF, SNB, TCR, TXT, TXTZ, ZIP
@ -34,7 +34,7 @@ It can convert every input format in the following list, to every output format.
What are the best source formats to convert?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In order of decreasing preference: LIT, MOBI, AZW, EPUB, AZW3, FB2, FBZ, DOCX, HTML, PRC, ODT, RTF, PDB, TXT, PDF
In order of decreasing preference: LIT, MOBI, AZW, EPUB, KEPUB, AZW3, FB2, FBZ, DOCX, HTML, PRC, ODT, RTF, PDB, TXT, PDF
I converted a PDF file, but the result has various problems?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -33,7 +33,7 @@ class EPUBInput(InputFormatPlugin):
name = 'EPUB Input'
author = 'Kovid Goyal'
description = _('Convert EPUB files (.epub) to HTML')
file_types = {'epub'}
file_types = {'epub', 'kepub'}
output_encoding = None
commit_name = 'epub_input'
@ -261,6 +261,7 @@ class EPUBInput(InputFormatPlugin):
from calibre.ebooks import DRMError
from calibre.ebooks.metadata.opf2 import OPF
from calibre.utils.zipfile import ZipFile
is_kepub = file_ext.lower() == 'kepub'
try:
zf = ZipFile(stream)
zf.extractall(os.getcwd())
@ -283,6 +284,15 @@ class EPUBInput(InputFormatPlugin):
if opf is None:
raise ValueError(f'{path} is not a valid EPUB file (could not find opf)')
if is_kepub and not self.for_viewer:
log('Removing Kobo markup...')
from calibre.ebooks.oeb.polish.container import Container
from calibre.ebooks.oeb.polish.kepubify import unkepubify_container
container = Container(os.getcwd(), opf, log)
unkepubify_container(container)
container.commit()
del container
opf = os.path.relpath(opf, os.getcwd())
parts = os.path.split(opf)
opf = OPF(opf, os.path.dirname(os.path.abspath(opf)))