我有一个如下的FPDF对象:
import fpdf
pdf = FPDF()
#Cover page
pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(175, 10, 'TEST - report',0,1,'C')
我尝试将这个FPDF对象保存到AWS内的S3桶中。我正在用jupyter笔记本做电子病历。当我运行这个:
my_bucket = 'my-bucket-name'
s3 = boto3.resource('s3')
dir = 'my-dir-name'
file = dir + 'test.pdf'
s3.Bucket(my_bucket).put_object(Key=file, Body=pdf)
I got error:
ParamValidationError: Parameter validation failed:
Invalid type for parameter Body, value: <fpdf.fpdf.FPDF object at 0x7f2dfc2acd10>, type: <class 'fpdf.fpdf.FPDF'>, valid types: <class 'bytes'>, <class 'bytearray'>, file-like object
你知道怎么处理吗?
谢谢你的建议。
您需要将pdf内容字节作为Body
参数传递
python2
dir = 'my-dir-name'
file = 'test.pdf'
s3.Bucket(my_bucket).put_object(Key=dir+'/'+file, Body=pdf.output(file, 'S'))
python3
dir = 'my-dir-name'
file = 'test.pdf'
s3.Bucket(my_bucket).put_object(Key=dir+'/'+file, Body=pdf.output(file, 'S').encode('latin-1'))
注意:在Python 2中字符串是原始数据,但在Python 3中字符串是默认是unicode。如果你正在使用Python 3。你必须使用Xpdf.output(dest='S').encode('latin-1')以获得输出,如果如果不这样做,生成的PDF将无效,并取决于查看器要么根本不打开,要么显示为一些空白页
文档:pdf.output ()