将matplotlib图插入pdf文件

问题描述

我正在尝试通过多种方法使用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')

Firs方法

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 (将#修改为@)