diff --git a/src/calibre/ebooks/pdf/html_writer.py b/src/calibre/ebooks/pdf/html_writer.py
index 08d203cd4b..623e914898 100644
--- a/src/calibre/ebooks/pdf/html_writer.py
+++ b/src/calibre/ebooks/pdf/html_writer.py
@@ -1134,7 +1134,7 @@ def convert(opf_path, opts, metadata=None, output_path=None, log=default_log, co
results = manager.convert_html_files(jobs, settle_time=1, has_maths=has_maths)
num_pages = 0
page_margins_map = []
- log(f'Merging {len(margin_files)} PDF render results, this could take a while...')
+ all_docs = []
for i, margin_file in enumerate(margin_files):
name = margin_file.name
data = results[name]
@@ -1145,13 +1145,10 @@ def convert(opf_path, opts, metadata=None, output_path=None, log=default_log, co
doc_pages = doc.page_count()
page_margins_map.extend(repeat(resolve_margins(margin_file.margins, page_layout), doc_pages))
num_pages += doc_pages
+ all_docs.append(doc)
- if pdf_doc is None:
- pdf_doc = doc
- else:
- st = monotonic()
- pdf_doc.append(doc)
- log(f'Merged ({i}/{len(margin_files)-1}) in {monotonic()-st:.1f} seconds')
+ pdf_doc = all_docs[0]
+ pdf_doc.append(*all_docs[1:])
page_number_display_map = get_page_number_display_map(manager, opts, num_pages, log)
diff --git a/src/calibre/utils/podofo/doc.cpp b/src/calibre/utils/podofo/doc.cpp
index 6f1220c9b9..66a6499bde 100644
--- a/src/calibre/utils/podofo/doc.cpp
+++ b/src/calibre/utils/podofo/doc.cpp
@@ -11,6 +11,7 @@
#include
#include
#include
+#include
using namespace pdf;
@@ -365,12 +366,15 @@ PDFDoc_append(PDFDoc *self, PyObject *args) {
PdfMemDocument *dest = self->doc;
try {
+ std::vector docs(PyTuple_GET_SIZE(args));
for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(args); i++) {
PyObject *doc = PyTuple_GET_ITEM(args, i);
int typ = PyObject_IsInstance(doc, (PyObject*)&PDFDocType);
if (typ == -1) return NULL;
if (typ == 0) { PyErr_SetString(PyExc_TypeError, "You must pass a PDFDoc instance to this method"); return NULL; }
- const PdfMemDocument *src = ((PDFDoc*)doc)->doc;
+ docs[i] = ((PDFDoc*)doc)->doc;
+ }
+ for (auto src : docs) {
std::unordered_map ref_map;
std::unordered_map page_parent_map;
const unsigned initial_page_count = dest->GetPages().GetCount();