From 1350589a54f267124b33ccd95f38a70e9029ec4f Mon Sep 17 00:00:00 2001 From: sergeymaksimov Date: Tue, 9 Oct 2018 16:36:54 +0300 Subject: [PATCH] Add page number shift option --- src/calibre/ebooks/conversion/plugins/pdf_output.py | 3 +++ src/calibre/ebooks/pdf/render/from_html.py | 2 +- src/calibre/ebooks/pdf/render/toc.py | 12 ++++++------ 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/calibre/ebooks/conversion/plugins/pdf_output.py b/src/calibre/ebooks/conversion/plugins/pdf_output.py index d797c5f..d5de4a5 100644 --- a/src/calibre/ebooks/conversion/plugins/pdf_output.py +++ b/src/calibre/ebooks/conversion/plugins/pdf_output.py @@ -148,6 +148,9 @@ class PDFOutput(OutputFormatPlugin): ' This will cause the margins specified in the conversion settings to be ignored.' ' If the document does not specify page margins, the conversion settings will be used as a fallback.') ), + OptionRecommendation(name='pdf_page_number_shift', recommended_value=0, + help=_('Value added to page number.') + ), } def specialize_options(self, log, opts, input_fmt): diff --git a/src/calibre/ebooks/pdf/render/from_html.py b/src/calibre/ebooks/pdf/render/from_html.py index 093cca3..88d366f 100644 --- a/src/calibre/ebooks/pdf/render/from_html.py +++ b/src/calibre/ebooks/pdf/render/from_html.py @@ -465,7 +465,7 @@ class PDFWriter(QObject): set_section(col, tl_sections, 'current_tl_section') self.doc.init_page(page_margins) if self.header or self.footer: - if evaljs('paged_display.update_header_footer(%d)'%self.current_page_num) is True: + if evaljs('paged_display.update_header_footer(%d)'%(self.current_page_num + self.opts.pdf_page_number_shift)) is True: self.load_header_footer_images() self.painter.save() diff --git a/src/calibre/ebooks/pdf/render/toc.py b/src/calibre/ebooks/pdf/render/toc.py index ea84f2b..6bcfb24 100644 --- a/src/calibre/ebooks/pdf/render/toc.py +++ b/src/calibre/ebooks/pdf/render/toc.py @@ -12,7 +12,7 @@ from lxml.html import tostring from lxml.html.builder import (HTML, HEAD, BODY, TABLE, TR, TD, H2, STYLE) -def convert_node(toc, table, level, pdf): +def convert_node(toc, table, level, pdf, shift): tr = TR( TD(toc.text or _('Unknown')), TD(), ) @@ -29,14 +29,14 @@ def convert_node(toc, table, level, pdf): a = anchors[path] dest = a.get(frag, a[None]) num = pdf.page_tree.obj.get_num(dest[0]) - tr[1].text = type('')(num) + tr[1].text = type('')(num+shift) table.append(tr) -def process_children(toc, table, level, pdf): +def process_children(toc, table, level, pdf, shift): for child in toc: - convert_node(child, table, level, pdf) - process_children(child, table, level+1, pdf) + convert_node(child, table, level, pdf, shift) + process_children(child, table, level+1, pdf, shift) def toc_as_html(toc, pdf, opts): @@ -73,6 +73,6 @@ def toc_as_html(toc, pdf, opts): body = html[1] body.set('class', 'calibre-pdf-toc') - process_children(toc, body[1], 0, pdf) + process_children(toc, body[1], 0, pdf, opts.pdf_page_number_shift) return tostring(html, pretty_print=True, include_meta_content_type=True, encoding='utf-8') -- 2.9.2.windows.1