mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
PDF Output: Fix an error when trying to set header or footer with an input document that has invalid content after the main body. Fixes #2040074 [PDF transition fails - number of header/footer pages](https://bugs.launchpad.net/calibre/+bug/2040074)
This commit is contained in:
parent
1643fc08ad
commit
6516163afc
@ -75,6 +75,14 @@ def create_skeleton(container):
|
||||
spine_name = tuple(container.spine_names)[-1][0]
|
||||
root = container.parsed(spine_name)
|
||||
root = copy.deepcopy(root)
|
||||
body = None
|
||||
for child in tuple(root.iterchildren('*')):
|
||||
if body is None:
|
||||
if child.tag == XHTML('body') or child.tag == 'body':
|
||||
body = child
|
||||
else:
|
||||
root.remove(child)
|
||||
if body is None:
|
||||
body = last_tag(root)
|
||||
body.text = body.tail = None
|
||||
del body[:]
|
||||
@ -899,7 +907,7 @@ def test_merge_fonts():
|
||||
PAGE_NUMBER_TEMPLATE = '<footer><div style="margin: auto">_PAGENUM_</div></footer>'
|
||||
|
||||
|
||||
def add_header_footer(manager, opts, pdf_doc, container, page_number_display_map, page_layout, page_margins_map, pdf_metadata, report_progress, toc=None):
|
||||
def add_header_footer(manager, opts, pdf_doc, container, page_number_display_map, page_layout, page_margins_map, pdf_metadata, report_progress, toc, log):
|
||||
header_template, footer_template = opts.pdf_header_template, opts.pdf_footer_template
|
||||
if not footer_template and opts.pdf_page_numbers:
|
||||
footer_template = PAGE_NUMBER_TEMPLATE
|
||||
@ -1055,7 +1063,7 @@ def add_header_footer(manager, opts, pdf_doc, container, page_number_display_map
|
||||
div.append(format_template(footer_template, page_num, margins.bottom))
|
||||
|
||||
container.commit()
|
||||
# print(open(job[0]).read())
|
||||
# print(container.raw_data(name))
|
||||
results = manager.convert_html_files([job], settle_time=1)
|
||||
data = results[name]
|
||||
if not isinstance(data, bytes):
|
||||
@ -1065,8 +1073,7 @@ def add_header_footer(manager, opts, pdf_doc, container, page_number_display_map
|
||||
first_page_num = pdf_doc.page_count()
|
||||
num_pages = doc.page_count()
|
||||
if first_page_num != num_pages:
|
||||
raise ValueError('The number of header/footers pages ({}) != number of document pages ({})'.format(
|
||||
num_pages, first_page_num))
|
||||
raise ValueError(f'The number of header/footers pages ({num_pages}) < number of document pages ({first_page_num})')
|
||||
pdf_doc.append(doc)
|
||||
pdf_doc.impose(1, first_page_num + 1, num_pages)
|
||||
report_progress(0.9, _('Headers and footers added'))
|
||||
@ -1176,7 +1183,7 @@ def convert(opf_path, opts, metadata=None, output_path=None, log=default_log, co
|
||||
add_header_footer(
|
||||
manager, opts, pdf_doc, container,
|
||||
page_number_display_map, page_layout, page_margins_map,
|
||||
pdf_metadata, report_progress, toc if has_toc else None)
|
||||
pdf_metadata, report_progress, toc if has_toc else None, log)
|
||||
|
||||
num_removed = remove_unused_fonts(pdf_doc)
|
||||
if num_removed:
|
||||
|
Loading…
x
Reference in New Issue
Block a user