首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Reportlab Platypus第二次生成空文件

Reportlab Platypus第二次生成空文件
EN

Stack Overflow用户
提问于 2022-03-13 16:54:33
回答 1查看 149关注 0票数 0

最起码的例子:

代码语言:javascript
复制
import io

import lorem
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import SimpleDocTemplate, Paragraph

styles = getSampleStyleSheet()
story = [Paragraph(lorem.text(), styles["Normal"])]

with io.BytesIO() as out:
    doc = SimpleDocTemplate(out)
    doc.build(story) # here, you can replace story with story[:] to fix it

with open("test.pdf", "wb+") as out:
    doc = SimpleDocTemplate(out)
    doc.build(story[:])

上面的代码生成一个空PDF文件(960字节,没有内容,空白页面)。如果将第一个( build(story) )块中的build(story[:])替换为build(story[:]),则在第二个(open文件)块中正确生成test.pdf文件。

为什么?

(WindowsPython3.9.0 amd64,reportlab 3.5.65)

EN

回答 1

Stack Overflow用户

发布于 2022-03-14 08:14:57

答案是这个故事被doc.build消耗掉了。当您构建一个文档时,内部对象会在您的故事中被更改,并且它们不能被重用来扩展另一个文档。我想它在任何地方都没有记录。仅使用浅拷贝是不够的,它很可能最终会出现“可流动太大”的reportlab.platypus.doctemplate.LayoutError错误。

当您想要多次呈现一个故事时,最安全的解决方案是始终使用深拷贝:

代码语言:javascript
复制
import copy
doc.build(copy.deepcopy(story))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71458904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档