【问题标题】:Upload FPDF object to AWS S3 in Python在 Python 中将 FPDF 对象上传到 AWS S3
【发布时间】:2021-10-15 22:31:34
【问题描述】:

我有如下 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 存储桶中。我在 EMR 上使用 jupyter notebook。 当我运行这个时:

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)

我收到错误:

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

你知道怎么处理吗?

感谢您的任何想法。

【问题讨论】:

    标签: python amazon-ec2 amazon-emr amazon-s3


    【解决方案1】:

    您需要将 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.x,则必须使用 pdf.output(dest='S').encode('latin-1') 以获取输出,如果 您不这样做,生成的 PDF 将无效,具体取决于 查看器要么根本没有打开,要么显示为一些空白页

    文档:pdf.output()

    【讨论】:

    • 非常有帮助,谢谢。 PDF 保存,但不显示单元格中定义的内容,此处为:“测试 - 报告”。只是空文件。你猜这可能是什么原因?
    • 我已经更新了我的答案,python3 有一个小问题
    猜你喜欢
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 2021-02-15
    • 2022-11-09
    • 2020-07-04
    • 1970-01-01
    • 2015-09-04
    • 2021-05-18
    相关资源
    最近更新 更多