mirror of
git://github.com/kovidgoyal/calibre.git
synced 2026-05-06 01:23:42 +02:00
PDF Output: Fix page numbers in outline not always correct
This commit is contained in:
parent
e61dbefc7f
commit
4bc92ec184
2 changed files with 11 additions and 7 deletions
|
|
@ -35,12 +35,12 @@ def get_pos(self, toc):
|
|||
page, ypos = 0, 0
|
||||
item = getattr(toc, 'outline_item_', None)
|
||||
if item is not None:
|
||||
# First use the item URL without fragment
|
||||
page, ypos = self.pos_map.get(item, {}).get(None, (0, 0))
|
||||
if toc.fragment:
|
||||
amap = self.pos_map.get(item, None)
|
||||
if amap is not None:
|
||||
page, ypos = amap.get(toc.fragment, (0, 0))
|
||||
else:
|
||||
page, ypos = self.pos_map.get(item, {}).get(None, (0, 0))
|
||||
page, ypos = amap.get(toc.fragment, (page, ypos))
|
||||
return page, ypos
|
||||
|
||||
def add_children(self, toc, parent):
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@ def dump(self, items, out_stream, pdf_metadata):
|
|||
self.insert_cover()
|
||||
|
||||
self.render_succeeded = False
|
||||
self.current_page_num = self.doc.page_count()
|
||||
self.combine_queue.append(os.path.join(self.tmp_path,
|
||||
'qprinter_out.pdf'))
|
||||
self.first_page = True
|
||||
|
|
@ -283,9 +284,13 @@ def do_paged_render(self):
|
|||
paged_display.fit_images();
|
||||
''')
|
||||
mf = self.view.page().mainFrame()
|
||||
start_page = self.current_page_num
|
||||
if not self.first_page:
|
||||
start_page += 1
|
||||
while True:
|
||||
if not self.first_page:
|
||||
self.printer.newPage()
|
||||
if self.printer.newPage():
|
||||
self.current_page_num += 1
|
||||
self.first_page = False
|
||||
mf.render(self.painter)
|
||||
nsl = evaljs('paged_display.next_screen_location()').toInt()
|
||||
|
|
@ -297,11 +302,10 @@ def do_paged_render(self):
|
|||
amap = self.bridge_value
|
||||
if not isinstance(amap, dict):
|
||||
amap = {} # Some javascript error occurred
|
||||
pages = self.doc.page_count()
|
||||
self.outline.set_pos(self.current_item, None, pages, 0)
|
||||
self.outline.set_pos(self.current_item, None, start_page, 0)
|
||||
for anchor, x in amap.iteritems():
|
||||
pagenum, ypos = x
|
||||
self.outline.set_pos(self.current_item, anchor, pages + pagenum, ypos)
|
||||
self.outline.set_pos(self.current_item, anchor, start_page + pagenum, ypos)
|
||||
|
||||
def append_doc(self, outpath):
|
||||
doc = self.podofo.PDFDoc()
|
||||
|
|
|
|||
Loading…
Reference in a new issue