Nat*_*han 5 io matplotlib fpdf python-3.x pandas
我在 pandas 中生成了一些图并将其保存在 BytesIO 流中,然后我想将其添加到 pdf 页面,然后将 pdf 文件作为附件发送到电子邮件中:
import matplotlib.pyplot as plt
import io
from fpdf import FPDF
fig = plt.figure()
...
buf = io.BytesIO()
fig.savefig(buf, format='png')
pdf = FPDF()
pdf.add_page()
pdf.image(buf.getvalue(), type='PNG')
buf.close()
Run Code Online (Sandbox Code Playgroud)
但这不起作用,并报告以下错误:
Traceback (most recent call last):
File "XXXX.py", line 166, in send_email
pdf.image(buf.getvalue(), type='PNG')
File "/usr/local/lib/python3.6/site-packages/fpdf/fpdf.py", line 150, in wrapper
return fn(self, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/fpdf/fpdf.py", line 971, in image
info=self._parsepng(name)
File "/usr/local/lib/python3.6/site-packages/fpdf/fpdf.py", line 1769, in _parsepng
if name.startswith("http://") or name.startswith("https://"):
TypeError: startswith first arg must be bytes or a tuple of bytes, not str
Run Code Online (Sandbox Code Playgroud)
我想纯粹在内存中解决这个问题,而不是在本地保存图像文件。谁能帮我这个?太感谢了。
是的,您可以使用字节代替文件......
就我而言,我有一个 MSSQL 查询,其中包含二进制字符串形式的图像。我想直接使用它们,而不保存多个图像文件。所以我一直在寻找解决方案。
我们需要的:
pip install fpdf2
Run Code Online (Sandbox Code Playgroud)
然后将 IO 和 FPDF2 导入到 python 3.x 文件中:
import io
from fpdf import FPDF
Run Code Online (Sandbox Code Playgroud)
查看Github 上 fpdf2 存储库的image_parsing.py可以发现,fpdf2 也可以处理二进制对象。不需要真正的图像文件。
使用io 的 BytesIO,我们可以从字节字符串创建一个二进制对象。
我们将二进制对象命名为“图片”并将其作为图像放入 PDF 页面中。
import io
from fpdf import FPDF
# create bytes object of the image data
picture = io.BytesIO(b"some initial binary data: \x00\x01")
# set page to portrait A4 and positioning in mm
pdf = FPDF("P", "mm", "A4")
# create a page
pdf.add_page()
# insert image
# on position: x=10mm, y=10mm
# size: width=50mm hight=auto
pdf.image(picture,10,10,50)
# create PDF file
pdf.output("fpdf_test.pdf")
Run Code Online (Sandbox Code Playgroud)
我希望这对某些人有帮助。
| 归档时间: |
|
| 查看次数: |
2248 次 |
| 最近记录: |