我有一个 AWS Lambda 函数,它使用具有自定义字体的html-pdf
库生成 PDF。
起初,我从Google字体外部导入字体,但后来PDF的大小放大了十倍。
所以我尝试在本地导入我的字体src('file:///var/task/fonts/...ttf/woff2')
但仍然没有运气。
最后,我尝试在主项目中创建fonts
文件夹,然后添加了所有字体以及文件fonts.config
:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<dir>/var/task/fonts/</dir>
<cachedir>/tmp/fonts-cache/</cachedir>
<config></config>
</fontconfig>
并设置以下环境:
FONTCONFIG_PATH = /var/task/fonts
但仍然没有运气(我还没有安装 fontconfig,因为我不确定如何以及是否需要(。
我的运行时环境是 Node.js 8.1.0。
您可以将字体上传到 S3 存储桶,然后在执行期间将其下载到 lambda 的/tmp
目录中。如果您的 lib 创建了.pkl
文件,您应该首先将根目录更改为/tmp
(不允许 lambda 写入默认根目录(。 以下 Python 代码将您的文件从 S3 存储桶中的/fonts
目录下载到/tmp/fonts
"本地"目录。
import os
import boto3
os.chdir('/tmp')
os.mkdir(os.path.join('/tmp/', 'fonts'))
s3 = boto3.resource('s3')
s3_client = boto3.client('s3')
my_bucket = s3.Bucket("bucket_name")
for file in my_bucket.objects.filter(Prefix="fonts/"):
filename = file.key
short_filename = filename.replace('fonts/','')
if(len(short_filename) > 0):
s3_client.download_file(
bucket,
filename,
"/tmp/fonts/" + short_filename,
)