mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Final patches to inital multi comic code
This commit is contained in:
parent
7444f2f092
commit
568b060552
@ -7,7 +7,7 @@ __docformat__ = 'restructuredtext en'
|
|||||||
Based on ideas from comiclrf created by FangornUK.
|
Based on ideas from comiclrf created by FangornUK.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
import os, sys, shutil, traceback, textwrap
|
import os, sys, shutil, traceback, textwrap, glob, fnmatch
|
||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
|
|
||||||
|
|
||||||
@ -389,10 +389,34 @@ def create_lrf(pages, profile, opts, thumbnail=None):
|
|||||||
print _('Output written to'), opts.output
|
print _('Output written to'), opts.output
|
||||||
|
|
||||||
|
|
||||||
def create_pdf(pages, profile, opts, thumbnail=None):
|
def create_pdf(pages, profile, opts, thumbnail=None,toc=None):
|
||||||
width, height = PROFILES[profile]
|
width, height = PROFILES[profile]
|
||||||
|
|
||||||
from reportlab.pdfgen import canvas
|
from reportlab.pdfgen import canvas
|
||||||
|
|
||||||
|
cur_page=0
|
||||||
|
heading = []
|
||||||
|
if toc != None:
|
||||||
|
if len(toc) == 1:
|
||||||
|
toc = None
|
||||||
|
else:
|
||||||
|
toc_index = 0
|
||||||
|
base_cur = 0
|
||||||
|
rem = 0
|
||||||
|
breaker = False
|
||||||
|
while True:
|
||||||
|
letter=toc[0][0][base_cur]
|
||||||
|
for i in range(len(toc)):
|
||||||
|
if letter != toc[i][0][base_cur]:
|
||||||
|
breaker = True
|
||||||
|
if breaker:
|
||||||
|
break
|
||||||
|
if letter == os.sep:
|
||||||
|
rem=base_cur
|
||||||
|
base_cur += 1
|
||||||
|
toc.append(("Not seen",-1))
|
||||||
|
toc_last=''
|
||||||
|
|
||||||
|
|
||||||
pdf = canvas.Canvas(filename=opts.output, pagesize=(width,height+15))
|
pdf = canvas.Canvas(filename=opts.output, pagesize=(width,height+15))
|
||||||
pdf.setAuthor(opts.author)
|
pdf.setAuthor(opts.author)
|
||||||
@ -400,7 +424,52 @@ def create_pdf(pages, profile, opts, thumbnail=None):
|
|||||||
|
|
||||||
|
|
||||||
for page in pages:
|
for page in pages:
|
||||||
pdf.drawImage(page, x=0,y=0,width=width, height=height)
|
if opts.keep_aspect_ratio:
|
||||||
|
img = NewMagickWand()
|
||||||
|
if img < 0:
|
||||||
|
raise RuntimeError('Cannot create wand.')
|
||||||
|
if not MagickReadImage(img, page):
|
||||||
|
raise IOError('Failed to read image from: %'%self.path_to_page)
|
||||||
|
sizex = MagickGetImageWidth(img)
|
||||||
|
sizey = MagickGetImageHeight(img)
|
||||||
|
if opts.keep_aspect_ratio:
|
||||||
|
# Preserve the aspect ratio by adding border
|
||||||
|
aspect = float(sizex) / float(sizey)
|
||||||
|
if aspect <= (float(width) / float(height)):
|
||||||
|
newsizey = height
|
||||||
|
newsizex = int(newsizey * aspect)
|
||||||
|
deltax = (width - newsizex) / 2
|
||||||
|
deltay = 0
|
||||||
|
else:
|
||||||
|
newsizex = width
|
||||||
|
newsizey = int(newsizex / aspect)
|
||||||
|
deltax = 0
|
||||||
|
deltay = (height - newsizey) / 2
|
||||||
|
pdf.drawImage(page, x=deltax,y=deltay,width=newsizex, height=newsizey)
|
||||||
|
else:
|
||||||
|
pdf.drawImage(page, x=0,y=0,width=width, height=height)
|
||||||
|
if toc != None:
|
||||||
|
if toc[toc_index][1] == cur_page:
|
||||||
|
tmp=toc[toc_index][0]
|
||||||
|
toc_current=tmp[rem:len(tmp)-4]
|
||||||
|
index=0
|
||||||
|
while True:
|
||||||
|
key = 'page%d-%d' % (cur_page, index)
|
||||||
|
pdf.bookmarkPage(key)
|
||||||
|
(head,dummy,list)=toc_current.partition(os.sep)
|
||||||
|
try:
|
||||||
|
if heading[index] != head:
|
||||||
|
heading[index] = head
|
||||||
|
pdf.addOutlineEntry(title=head,key=key,level=index)
|
||||||
|
except:
|
||||||
|
heading.append(head)
|
||||||
|
pdf.addOutlineEntry(title=head,key=key,level=index)
|
||||||
|
index += 1
|
||||||
|
toc_current=list
|
||||||
|
if dummy == "":
|
||||||
|
break
|
||||||
|
toc_index += 1
|
||||||
|
cur_page += 1
|
||||||
pdf.showPage()
|
pdf.showPage()
|
||||||
# Write the document to disk
|
# Write the document to disk
|
||||||
pdf.save()
|
pdf.save()
|
||||||
@ -432,7 +501,7 @@ def do_convert(path_to_file, opts, notification=lambda m, p: p, output_format='l
|
|||||||
if not new_pages:
|
if not new_pages:
|
||||||
raise ValueError('Could not find any pages in the comic: %s'%source)
|
raise ValueError('Could not find any pages in the comic: %s'%source)
|
||||||
if not getattr(opts, 'no_process', False):
|
if not getattr(opts, 'no_process', False):
|
||||||
new_pages, failures, tdir2 = process_pages(pages, opts, notification)
|
new_pages, failures, tdir2 = process_pages(new_pages, opts, notification)
|
||||||
if not new_pages:
|
if not new_pages:
|
||||||
raise ValueError('Could not find any valid pages in the comic: %s'%source)
|
raise ValueError('Could not find any valid pages in the comic: %s'%source)
|
||||||
if failures:
|
if failures:
|
||||||
@ -452,7 +521,7 @@ def do_convert(path_to_file, opts, notification=lambda m, p: p, output_format='l
|
|||||||
if output_format == 'epub':
|
if output_format == 'epub':
|
||||||
create_epub(pages, opts.profile, opts, thumbnail=thumbnail)
|
create_epub(pages, opts.profile, opts, thumbnail=thumbnail)
|
||||||
if output_format == 'pdf':
|
if output_format == 'pdf':
|
||||||
create_pdf(pages, opts.profile, opts, thumbnail=thumbnail)
|
create_pdf(pages, opts.profile, opts, thumbnail=thumbnail,toc=toc)
|
||||||
for tdir in to_delete:
|
for tdir in to_delete:
|
||||||
shutil.rmtree(tdir)
|
shutil.rmtree(tdir)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user