Как объединить два файла pisaDocument - PullRequest
1 голос
/ 17 апреля 2019

Используя xhtml2pdf, как я могу добавить два Python объекта 'pisaContext'.

Мое требование состоит в том, чтобы отобразить две страницы отдельно в 2 разных файла PDF, а затем объединить, вернуть объединенный файл PDF.

1 Ответ

0 голосов
/ 30 апреля 2019

Я знаю, что это старый вопрос, но я сталкиваюсь с этой проблемой сегодня, вот мое решение с использованием 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()
...