如何使用 FPDF 从 AWS 存储桶下载图像以生成 PDF?
How can I download an image from an AWS bucket to generate a PDF from, using FPDF?
我有一个这样的 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')
我正在尝试使用来自 AWS S3 存储桶的 .png
文件直接生成 PDF,如下所示:
pdf.image(bucket_folder_name + '/' + file_name + '.png')
不幸的是,我得到了错误:
[Errno 2] No such file or directory
问题是什么?
要使用 S3 存储桶中的文件,您需要先下载它们 - S3 存储桶不像本地文件夹,您可以提供路径并使用文件。
先使用download_file
下载文件,然后将文件名传递给pdf.image(...)
。
download_file
方法有以下参数:
s3.download_file('BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME')
像这样:
import boto3
s3 = boto3.client('s3')
...
filename_with_extension = file_name + '.png';
outputPath = '/tmp/' + filename_with_extension;
s3.download_file(bucket_folder_name, filename_with_extension, outputPath)
pdf.image(outputPath)
重要说明:您必须写入/tmp
目录,因为这是AWS允许的唯一可用文件系统你写信给(和读)。
任何其他路径都会导致 [Errno 13] Permission denied
错误以表明这一点。
根据 docs:
You can configure each Lambda function with its own ephemeral storage between 512MB and 10,240MB, in 1MB increments. The ephemeral storage is available in each function’s /tmp directory.
我有一个这样的 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')
我正在尝试使用来自 AWS S3 存储桶的 .png
文件直接生成 PDF,如下所示:
pdf.image(bucket_folder_name + '/' + file_name + '.png')
不幸的是,我得到了错误:
[Errno 2] No such file or directory
问题是什么?
要使用 S3 存储桶中的文件,您需要先下载它们 - S3 存储桶不像本地文件夹,您可以提供路径并使用文件。
先使用download_file
下载文件,然后将文件名传递给pdf.image(...)
。
download_file
方法有以下参数:
s3.download_file('BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME')
像这样:
import boto3
s3 = boto3.client('s3')
...
filename_with_extension = file_name + '.png';
outputPath = '/tmp/' + filename_with_extension;
s3.download_file(bucket_folder_name, filename_with_extension, outputPath)
pdf.image(outputPath)
重要说明:您必须写入/tmp
目录,因为这是AWS允许的唯一可用文件系统你写信给(和读)。
任何其他路径都会导致 [Errno 13] Permission denied
错误以表明这一点。
根据 docs:
You can configure each Lambda function with its own ephemeral storage between 512MB and 10,240MB, in 1MB increments. The ephemeral storage is available in each function’s /tmp directory.