我在python中使用pyfpdf生成pdf文件.我有一个Base64,我想插入到pdf文件中,而不必将其另存为文件系统中的图像.但是pyfpdf图片功能仅接受文件路径.
I'm using pyfpdf in python to generate pdf files. I have a Base64 which I want to insert into a pdf file without having to save it as an image in my file system. But the pyfpdf image function only accepts file path.
fpdf.image(name, x = None, y = None, w = 0, h = 0, type = '', link = '')是否有一种方法(破解)直接从内存中插入base64或缓冲的图像,而无需事先保存到文件系统中?我什至在github上检查了它们的源代码,无法确定.
Is there a way (hack) to directly insert base64 or buffered image from memory, without having to save into the file system beforehand? I even checked their source code on github and couldn't figure.
链接: github/reingart/pyfpdf/tree/master /fpdf
推荐答案正如注释中提到的@pvg一样,用base64功能覆盖load_resource函数可以解决问题.
As @pvg mentioned in the comments, overriding load_resource function with your base64 functionality does the trick.
import base64,io def load_resource(self, reason, filename): if reason == "image": if filename.startswith("") or filename.startswith(""): f = BytesIO(urlopen(filename).read()) elif filename.startswith("data"): f = filename.split('base64,')[1] f = base64.b64decode(f) f = io.BytesIO(f) else: f = open(filename, "rb") return f else: self.error("Unknown resource loading reason \"%s\"" % reason)这是将图像插入pdf的示例代码.我在代码中评论了一些说明.
This is a sample code to insert images into pdf. I commented some instructions in code.
from fpdf import FPDF import os import io import base64 class PDF(FPDF): def load_resource(self, reason, filename): if reason == "image": if filename.startswith("") or filename.startswith(""): f = BytesIO(urlopen(filename).read()) elif filename.startswith("data"): f = filename.split('base64,')[1] f = base64.b64decode(f) f = io.BytesIO(f) else: f = open(filename, "rb") return f else: self.error("Unknown resource loading reason \"%s\"" % reason) def sample_pdf(self,img,path): self.image(img,h=70,w=150,x=30,y=100,type="jpg") #make sure you use appropriate image format here jpg/png pdf.output(path, 'F') if __name__ == '__main__': img = # pass your base64 image # you can find sample base64 here : pastebin/CaZJ7n6s pdf = PDF() pdf.add_page() pdf_path = # give path to where you want to save pdf pdf.sample_pdf(img,pdf_path)更多推荐
使用pyfpdf将Base64图像插入pdf
发布评论