Skip to content

Commit

Permalink
Viewer: Improve rendering of comics. No blank pages after large image…
Browse files Browse the repository at this point in the history
…s or after every image in multi-page mode.
  • Loading branch information
kovidgoyal committed Oct 9, 2019
1 parent 871b038 commit 5ea542b
Showing 1 changed file with 40 additions and 2 deletions.
42 changes: 40 additions & 2 deletions src/calibre/ebooks/conversion/plugins/comic_input.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,8 +185,11 @@ def convert(self, stream, opts, file_ext, log, accelerators):
pages = self.get_pages(fname, cdir)
if not pages:
continue
wrappers = self.create_wrappers(pages)
comics.append((title, pages, wrappers))
if self.for_viewer:
comics.append((title, pages, [self.create_viewer_wrapper(pages)]))
else:
wrappers = self.create_wrappers(pages)
comics.append((title, pages, wrappers))

if not comics:
raise ValueError('No comic pages found in %s'%stream.name)
Expand Down Expand Up @@ -265,3 +268,38 @@ def create_wrappers(self, pages):
f.write(wrapper.encode('utf-8'))
wrappers.append(page)
return wrappers

def create_viewer_wrapper(self, pages):
from calibre.ebooks.oeb.base import XHTML_NS

def page(src):
return '<img src="{}"></img>'.format(os.path.basename(src))

pages = '\n'.join(map(page, pages))
base = os.path.dirname(pages[0])
wrapper = '''
<html xmlns="%s">
<head>
<meta charset="utf-8"/>
<style type="text/css">
html, body, img { height: 100vh; display: block; margin: 0; padding: 0; border-width: 0; }
img {
width: 100%%; height: 100%%;
object-fit: contain;
margin-left: auto; margin-right: auto;
max-width: 100vw; max-height: 100vh;
top: 50vh; transform: translateY(-50%%);
position: relative;
page-break-after: always;
}
</style>
</head>
<body>
%s
</body>
</html>
''' % (XHTML_NS, pages)
path = os.path.join(base, 'wrapper.xhtml')
with open(path, 'wb') as f:
f.write(wrapper.encode('utf-8'))
return path

0 comments on commit 5ea542b

Please sign in to comment.