我正在用 Python 和 Django 编写一个 Web 应用程序。我使用 weasyprint 编写 pdf 文档,我想使用
write_png()
获取每个 pdf 的 png 缩略图。
这是我的views.py
:
pdf_letter = weasyprint.HTML(string=letter, base_url=static_url).render(
stylesheets=[weasyprint.CSS(static_url + "/abrechnung/css/print-portrait.css")]
)
pdf_table = weasyprint.HTML(string=table).render(
stylesheets=[weasyprint.CSS(static_url + "/abrechnung/css/print-landscape.css")]
)
val = []
for doc in pdf_letter, pdf_table:
for p in doc.pages:
val.append(p)
pdf_file = pdf_letter.copy(val).write_pdf(f"{datetime.now()}.pdf")
thumbnail = pdf_letter.copy(val).write_png(f"{datetime.now()}.png")
当我尝试运行该程序时,我在浏览器中收到以下错误消息:
“文档”对象没有属性“write_png”
pdf_file = pdf_letter.copy(val).write_pdf(f"{datetime.now()}.pdf")
thumbnail = pdf_letter.copy(val).write_png(f"{datetime.now()}.png")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
有关 write_png() 函数的 weasyprint 文档可以在这里找到: https://doc.courtbouillon.org/weasyprint/v52.5/api.html#weasyprint.document.Document.write_png
当我阅读 weasyprint 文档时,我指出
weasyprint.HTML.render()
生成一个 weasyprint.document.Document。
该对象具有功能write_png()
。
苏....WTF?我在这里做错了什么?
我试过这个
for i, page in enumerate(document.pages):
document.copy([page]).write_png('page_%s.png' % i)
还有这个
for page in document.pages:
yield document.copy([page]).write_png()
来自 weasyprint 教程(变量等当然适合我的代码),但两者都不起作用 - 我遇到了相同的错误。 单独写入pdf文件是没有问题的,稍后保存并返回。当我尝试添加缩略图功能时,问题才开始出现。
经过更多挖掘,我终于自己找到了答案:他们在 2021 年放弃了 write_png() 并且没有人愿意更改文档......
这是有关该主题的博客文章: https://www.courtbouillon.org/blog/00008-weasyprint-53-beta/