如何合并两个比萨文件

时间:2019-04-17 06:45:43

标签: python django xhtml2pdf

如何使用xhtml2pdf附加两个“ pisaContext”对象python。

我的要求是将两个页面分别呈现为2个不同的pdf,然后合并返回合并的pdf。

1 个答案:

答案 0 :(得分:0)

我知道这是一个老问题,但是今天我面临这个问题,这是我使用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")

基本上,我使用StringIO在内存中渲染两个pisaDocument,并使用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()