Final patches to inital multi comic code

This commit is contained in:
james_ 2009-01-23 20:44:04 +00:00
parent 7444f2f092
commit 568b060552

View File

@ -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)