Я знаю, что это старый вопрос, но я сталкиваюсь с этой проблемой сегодня, вот мое решение с использованием PyPDF2:
from StringIO import StringIO
from xhtml2pdf import pisa
from PyPDF2 import PdfFileMerger
# html1 and html2 are strings with the html content.
# link_callback is a function that return the path of files requested in the PDF file
pdf1_file = StringIO()
pdf1 = pisa.pisaDocument(
StringIO(html1.encode('UTF-8')),
pdf1_file,
link_callback=link_callback,
encoding='UTF-8'
)
pdf2_file = StringIO()
pdf2 = pisa.pisaDocument(
StringIO(html2.encode('UTF-8')),
pdf2_file,
link_callback=link_callback,
encoding='UTF-8'
)
if not pdf1.err and not pdf2.err:
merger = PdfFileMerger()
merger.append(pdf1_file)
merger.append(pdf2_file)
merger.write("files_merged.pdf")
По сути, я рендерил два документа pisaDocuments в памяти, используя StringIO
, передавал их PdfFileMerger
методом append
и, наконец, записывал в файл с именем "files_merged.pdf". Вы также можете передать экземпляр StringIO
методу write
и сделать все в памяти:
if not pdf1.err and not pdf2.err:
merger = PdfFileMerger()
merger.append(pdf1_file)
merger.append(pdf2_file)
output = StringIO()
merger.write(output)
file_content = output.getvalue()