@pvgがあなたのbase64機能とトリックをload_resource機能をオーバーライドしない、コメントで述べたように。
import base64,io
def load_resource(self, reason, filename):
if reason == "image":
if filename.startswith("http://") or filename.startswith("https://"):
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)
EDIT:
これは、PDFに画像を挿入するためのサンプルコードです。コード内のいくつかの説明にコメントしました。
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("http://") or filename.startswith("https://"):
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 : https://pastebin.com/CaZJ7n6s
pdf = PDF()
pdf.add_page()
pdf_path = # give path to where you want to save pdf
pdf.sample_pdf(img,pdf_path)
'fpdf'をサブクラス化し、' Load_resource'をオーバーライドして 'BytesIO'ファイルのようなオブジェクトを返すことができます。 – pvg
それは素晴らしいアイデアです。私が立ち往生した場合、あなたが詳細な回答を投稿できるかどうかは私には助けになります。 –
すべての画像解析コードは 'load_resource'を呼び出します。それを見て、不明なことがある場合は特定の質問をしてください。あるいは、別のpdfライブラリを使ってみるといいかもしれません。これは(PHPのポートです) – pvg