gpt4 book ai didi

python - 通过 flowables 将现有 PDF 合并到新的 ReportLab PDF

转载 作者:太空狗 更新时间:2023-10-29 21:57:21 27 4
gpt4 key购买 nike

我有一个 reportlab SimpleDocTemplate 并将其作为动态 PDF 返回。我正在根据一些 Django 模型元数据生成它的内容。这是我的模板设置:

buff = StringIO()
doc = SimpleDocTemplate(buff, pagesize=letter,
rightMargin=72,leftMargin=72,
topMargin=72,bottomMargin=18)
Story = []

我可以轻松地将 Entry 模型中的文本元数据添加到稍后构建的 Story 列表中:

    ptext = '<font size=20>%s</font>' % entry.title.title()
paragraph = Paragraph(ptext, custom_styles["Custom"])
Story.append(paragraph)

然后通过在 SimpleDocTemplate 上调用 build 生成要在响应中返回的 PDF:

doc.build(Story, onFirstPage=entry_page_template, onLaterPages=entry_page_template)

pdf = buff.getvalue()
resp = HttpResponse(mimetype='application/x-download')
resp['Content-Disposition'] = 'attachment;filename=logbook.pdf'
resp.write(pdf)
return resp

模型上的一个元数据字段是文件附件。当这些文件附件是 PDF 时,我想将它们合并到我正在生成的故事中; IE 表示报告实验室“可流动”类型的 PDF。

我正在尝试使用 pdfrw 这样做,但没有成功。理想情况下,我只想打电话:

from pdfrw import PdfReader
pdf = pPdfReader(entry.document.file.path)
Story.append(pdf)

并将 pdf 附加到现有的故事列表中,以包含在最终文档的生成中,如上所述。

有人有什么想法吗?我尝试使用 pagexobj 进行类似的操作来创建 pdf,并尝试遵循以下示例:

http://code.google.com/p/pdfrw/source/browse/trunk/examples/rl1/subset.py

from pdfrw.buildxobj import pagexobj
from pdfrw.toreportlab import makerl

pdf = pagexobj(PdfReader(entry.document.file.path))

但也没有任何运气。有人可以向我解释将现有 PDF 文件合并到 reportlab flowable 中的最佳方法吗?我不擅长这些东西,几天来一直在努力研究 pdf 生成。 :) 非常感谢任何方向!

最佳答案

我刚刚在一个项目中有一个类似的任务。我用了reportlab (开源版)生成pdf文件和pyPDF以方便合并。我的要求略有不同,因为我只需要每个附件的一页,但我相信这可能足以让您了解总体思路。

from pyPdf import PdfFileReader, PdfFileWriter

def create_merged_pdf(user):
basepath = settings.MEDIA_ROOT + "/"
# following block calls the function that uses reportlab to generate a pdf
coversheet_path = basepath + "%s_%s_cover_%s.pdf" %(user.first_name, user.last_name, datetime.now().strftime("%f"))
create_cover_sheet(coversheet_path, user, user.performancereview_set.all())

# now user the cover sheet and all of the performance reviews to create a merged pdf
merged_path = basepath + "%s_%s_merged_%s.pdf" %(user.first_name, user.last_name, datetime.now().strftime("%f"))

# for merged file result
output = PdfFileWriter()

# for each pdf file to add, open in a PdfFileReader object and add page to output
cover_pdf = PdfFileReader(file( coversheet_path, "rb"))
output.addPage(cover_pdf.getPage(0))

# iterate through attached files and merge. I only needed the first page, YMMV
for review in user.performancereview_set.all():
review_pdf = PdfFileReader(file(review.pdf_file.file.name, "rb"))
output.addPage(review_pdf.getPage(0)) # only first page of attachment

# write out the merged file
outputStream = file(merged_path, "wb")
output.write(outputStream)
outputStream.close()

关于python - 通过 flowables 将现有 PDF 合并到新的 ReportLab PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13368545/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com