mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
PDF Output: Fix page numbers in outline not always correct
This commit is contained in:
parent
e61dbefc7f
commit
4bc92ec184
@ -35,12 +35,12 @@ class Outline(object):
|
|||||||
page, ypos = 0, 0
|
page, ypos = 0, 0
|
||||||
item = getattr(toc, 'outline_item_', None)
|
item = getattr(toc, 'outline_item_', None)
|
||||||
if item is not 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:
|
if toc.fragment:
|
||||||
amap = self.pos_map.get(item, None)
|
amap = self.pos_map.get(item, None)
|
||||||
if amap is not None:
|
if amap is not None:
|
||||||
page, ypos = amap.get(toc.fragment, (0, 0))
|
page, ypos = amap.get(toc.fragment, (page, ypos))
|
||||||
else:
|
|
||||||
page, ypos = self.pos_map.get(item, {}).get(None, (0, 0))
|
|
||||||
return page, ypos
|
return page, ypos
|
||||||
|
|
||||||
def add_children(self, toc, parent):
|
def add_children(self, toc, parent):
|
||||||
|
@ -196,6 +196,7 @@ class PDFWriter(QObject): # {{{
|
|||||||
self.insert_cover()
|
self.insert_cover()
|
||||||
|
|
||||||
self.render_succeeded = False
|
self.render_succeeded = False
|
||||||
|
self.current_page_num = self.doc.page_count()
|
||||||
self.combine_queue.append(os.path.join(self.tmp_path,
|
self.combine_queue.append(os.path.join(self.tmp_path,
|
||||||
'qprinter_out.pdf'))
|
'qprinter_out.pdf'))
|
||||||
self.first_page = True
|
self.first_page = True
|
||||||
@ -283,9 +284,13 @@ class PDFWriter(QObject): # {{{
|
|||||||
paged_display.fit_images();
|
paged_display.fit_images();
|
||||||
''')
|
''')
|
||||||
mf = self.view.page().mainFrame()
|
mf = self.view.page().mainFrame()
|
||||||
|
start_page = self.current_page_num
|
||||||
|
if not self.first_page:
|
||||||
|
start_page += 1
|
||||||
while True:
|
while True:
|
||||||
if not self.first_page:
|
if not self.first_page:
|
||||||
self.printer.newPage()
|
if self.printer.newPage():
|
||||||
|
self.current_page_num += 1
|
||||||
self.first_page = False
|
self.first_page = False
|
||||||
mf.render(self.painter)
|
mf.render(self.painter)
|
||||||
nsl = evaljs('paged_display.next_screen_location()').toInt()
|
nsl = evaljs('paged_display.next_screen_location()').toInt()
|
||||||
@ -297,11 +302,10 @@ class PDFWriter(QObject): # {{{
|
|||||||
amap = self.bridge_value
|
amap = self.bridge_value
|
||||||
if not isinstance(amap, dict):
|
if not isinstance(amap, dict):
|
||||||
amap = {} # Some javascript error occurred
|
amap = {} # Some javascript error occurred
|
||||||
pages = self.doc.page_count()
|
self.outline.set_pos(self.current_item, None, start_page, 0)
|
||||||
self.outline.set_pos(self.current_item, None, pages, 0)
|
|
||||||
for anchor, x in amap.iteritems():
|
for anchor, x in amap.iteritems():
|
||||||
pagenum, ypos = x
|
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):
|
def append_doc(self, outpath):
|
||||||
doc = self.podofo.PDFDoc()
|
doc = self.podofo.PDFDoc()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user