Python 如何将ReportLab画布保存为PNG图像?

Python 如何将ReportLab画布保存为PNG图像?,python,canvas,reportlab,Python,Canvas,Reportlab,我正在使用reportlab绘制一个PDF,通常用于打印。如何将画布另存为PNG图像,而不使用其他二进制工具转换生成的pdf 我假设我需要将其转换为reportlab图形,但没有找到这样做的方法 从reportlab.pdfgen导入画布 c=canvas.Canvasform.pdf,pagesize=100,50 c、 拉丝20,20,'示例…' c、 但另存为图像 从“reportlab用户指南”中,我找到了一段代码,不确定它是否有用 from reportlab.graphics imp

我正在使用reportlab绘制一个PDF,通常用于打印。如何将画布另存为PNG图像,而不使用其他二进制工具转换生成的pdf

我假设我需要将其转换为reportlab图形,但没有找到这样做的方法

从reportlab.pdfgen导入画布 c=canvas.Canvasform.pdf,pagesize=100,50 c、 拉丝20,20,'示例…' c、 但另存为图像
从“reportlab用户指南”中,我找到了一段代码,不确定它是否有用

from reportlab.graphics import renderPM
d = Drawing(400, 200)
d.add(Rect(50, 50, 300, 100, fillColor=colors.yellow))
d.add(String(150, 100, 'Hello World', fontSize=18, fillColor=colors.red))
d.add(String(180, 86, 'Special characters \
\xc2\xa2\xc2\xa9\xc2\xae\xc2\xa3\xce\xb1\xce\xb2',
             fillColor=colors.red))
renderPM.drawToFile(d, 'example1.png', 'PNG')

reportlab包中似乎没有将画布对象转换为PNG图像的函数。但您可以使用另一个包f.e.将画布转换为PNG图像

装置

要使用pdf2image软件包,您应该安装poppler和pdf2image软件包。您可以在“如何安装”部分找到安装说明

安装后,您可以使用以下方法解决问题:

from reportlab.pdfgen import canvas
from pdf2image import convert_from_bytes

c = canvas.Canvas("form.pdf", pagesize=(100, 50))
c.drawString(20, 20, 'Example …')
image = convert_from_bytes(c.getpdfdata())[0]
image.save('form.png')
我觉得这个建议很有帮助。下面是您问题中的示例:

from reportlab.graphics.renderPM import drawToFile
from reportlab.graphics.shapes import Drawing, String

drawing = Drawing(width=100, height=50)
drawing.contents.append(String(20, 20, 'Example …'))
drawToFile(drawing, 'example.png')

在深入研究drawToFile函数之后,我认为您可能可以使用reportlab.graphics.RenderRPM.PMCanvas类而不是标准canvas。它有一个saveToFile方法,但我的第一次尝试只是生成了一个空白图像,所以您必须进行一些实验。

如果您不确定,为什么要将其作为答案发布?因为这是一种从reportlab保存PNG的方法,它也可以做提交者想要做的事情。感谢您的努力,但不幸的是,这就是如何保存在引用代码第2行上创建的图形。我需要这张画布。谢谢你的建议,但pdf2image更好地说poppler是一个巨大的二进制依赖项。不幸的是,到目前为止,我无法控制我的应用程序运行的环境。我会尝试在问题中更清楚地说明这一点。