2

html-pdf我有一个 AWS Lambda 函数,它使用带有自定义字体的库生成 PDF 。

起初,我从 Google Fonts 外部导入我的字体,但后来 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。

4

1 回答 1

1

您可以将字体上传到 S3 存储桶,然后/tmp在执行期间将它们下载到 lambda 的目录。如果您的 lib 创建.pkl文件,您应该首先将您的根目录更改为/tmp(lambda 不允许写入默认根目录)。以下 Python 代码将您的文件从/fontsS3 存储桶中的目录下载到/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,
        )
于 2021-09-03T12:46:57.150 回答