问题描述
我正在尝试通过多种方法使用FPDF将matplotlib中的图插入到pdf文件中。仅通过将图像保存到文件并将其插入pdf即可轻松完成该任务。都一样,我想直接插入图而不将其另存为文件。这个问题已经在Stack这里完成了,但是没有一个答案对我有用。下面的代码显示了我尝试过的一些不同方法:
此代码仅用于matplotlib图:
with open('altitud.txt','r') as f:
elevations = json.loads(f.read())
altitud_data = list(itertools.chain.from_iterable(elevations))
x_data = [(0.269978*x) for x in range(0,len(altitud_data))]
plt.plot(x_data,altitud_data,color='green',lw=2)
plt.fill_between(x_data,facecolor="green")
plt.title('VISTA RUTA VERTICAL')
plt.xlabel('XX')
plt.ylabel('YY')
with io.BytesIO() as output:
plt.savefig(output,format="png")
contents = output.getvalue()
im = Image.frombuffer("I;16",(5,10),contents,"raw","I;12")
pdf = FPDF()
pdf.add_page()
pdf.image(im,h=70,w=150,x=30,y=100,type="png")
pdf.output('imge_example.pdf','F')
第二种方法:
import io
from PIL import Image
with io.BytesIO() as output:
plt.savefig(output,format="png")
contents = output.getvalue()
img = Image.frombytes("RGBA",(10,contents)
outf = io.BytesIO()
img.save(outf,"PNG",optimize=True)
data = outf.getvalue()
pdf = FPDF()
pdf.add_page()
pdf.image(data,'F')
第三种方法:
import io
from PIL import Image
with io.BytesIO() as output:
plt.savefig(output,format="png")
contents = output.getvalue()
stream = BytesIO(contents)
image = Image.open(stream).convert("RGBA")
pdf = FPDF()
pdf.add_page()
pdf.image(image,'F')
最后使用base64:
img = BytesIO()
plt.savefig(img,format='png')
img.seek(0)
base_64 = base64.b64encode(img.read())
img = base64.b64decode(base_64)
stream = BytesIO(img)
image = Image.open(stream).convert("RGBA")
stream.close()
pdf = FPDF()
pdf.add_page()
pdf.image(image,'F')
如果有人对如何实现有任何想法或线索。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)