详情页标题前

腾讯云云函数(SCF)在云函数中使用自定义字体-云淘科技

详情页1

应用场景

通过在云函数中使用 Puppeteer,可按需完成针对特定网页的截图、保存、录屏、生成 PDF 等操作。该功能延续了云函数按需拉起的特性,在需要时才去实际启动实例执行,无需使用虚拟机或容器去持续运行服务,方便封装为通用能力。云函数的运行环境目前仅内置了单一字体,本文提供在云函数中使用自定义字体的最佳实践来解决单一字体不能满足定制化需求的问题。本文以 Node.js 16.13 使用文泉驿正黑体为例,介绍如何在 SCF 中使用自定义字体。

前提条件

需要准备好对应自定义字体文件。如文泉驿正黑体字体文件 WenQuanZhengHei-1.ttf。

整体流程

1. 将字体文件放在函数代码的指定目录下。2. 通过设置字体文件配置文件 fonts.config,使其可以加载 1 中指定目录下的字体文件。3. 通过设置 SCF 环境变量 XDG_CONFIG_HOME,指定字体配置文件的加载路径。

操作步骤

1. 在函数代码根目录下创建文件夹fonts,将提前准备好的字体文件放在该目录下。2. 在函数代码根目录下创建文件夹fontconfig,在该目录下创建字体配置文件fonts.conffonts.conf 内容如下:注意第 27 行中的 /var/user/fonts 即为步骤 1 中创建的 fonts 文件夹在 SCF 环境下的路径。


<!-- DO NOT EDIT THIS FILE. IT WILL BE REPLACED WHEN FONTCONFIG IS UPDATED. LOCAL CHANGES BELONG IN 'local.conf'.
The intent of this standard configuration file is to be adequate for most environments. If you have a reasonably normal environment and have found problems with this configuration, they are probably things that others will also want fixed. Please submit any problems to the fontconfig bugzilla system located at fontconfig.org
Note that the normal 'make install' procedure for fontconfig is to replace any existing fonts.conf file with the new version. Place any local customizations in local.conf which this file references.
Keith Packard-->

/usr/share/fonts /var/user/fonts /usr/share/X11/fonts/Type1 /usr/share/X11/fonts/TTF /usr/local/share/fonts fonts ~/.fonts
mono monospace 
sans serif sans-serif 
sans sans-serif 
/etc/fonts/conf.d

/var/cache/fontconfig fontconfig ~/.fontconfig
0x0020 0x00A0 0x00AD 0x034F 0x0600 0x0601 0x0602 0x0603 0x06DD 0x070F 0x115F 0x1160 0x1680 0x17B4 0x17B5 0x180E 0x2000 0x2001 0x2002 0x2003 0x2004 0x2005 0x2006 0x2007 0x2008 0x2009 0x200A 0x200B 0x200C 0x200D 0x200E 0x200F 0x2028 0x2029 0x202A 0x202B 0x202C 0x202D 0x202E 0x202F 0x205F 0x2060 0x2061 0x2062 0x2063 0x206A 0x206B 0x206C 0x206D 0x206E 0x206F 0x2800 0x3000 0x3164 0xFEFF 0xFFA0 0xFFF9 0xFFFA 0xFFFB 30 

步骤 1、2 完成后,函数代码目录结构如下:

├── 函数代码文件(如 index.js、app.js) ├── fonts   |   └── WenQuanZhengHei-1.ttf├── fontconfig|   └── fonts.conf

3. 将函数代码打包为 zip 格式,选择“本地上传 zip 包”,创建函数或者更新函数代码,上传完成后单击部署完成云端函数代码的更新。注意函数代码打包时是将代码根目录下全部文件进行打包,即上述文件结构中的全部文件,不需要打包外层文件夹。

腾讯云云函数(SCF)在云函数中使用自定义字体-云淘科技

4. 编辑函数环境变量,添加环境变量后,单击保存完成配置更新。key:XDG_CONFIG_HOMEvalue:/var/user

腾讯云云函数(SCF)在云函数中使用自定义字体-云淘科技


5. 验证字体是否添加成功。Node.js 环境下,使用font-list库,可以打印出环境中支持的字体。完成上述配置后,可以看到环境中已经成功加载了文泉驿正黑体。

var fontList = require('font-list')console.log(await fontList.getFonts()) //打印环境中支持的字体



腾讯云云函数(SCF)在云函数中使用自定义字体-云淘科技


镜像部署函数也可以采用如下方式实现自定义字体。以在镜像内包装 Chrome、Puppeteer 以及自身所需的字体文件,构筑成镜像,并使用此镜像来部署函数为例。操作步骤如下:

1. 编写 dockerfile

下文向您提供一个简单的、通过 alpine 基础镜像来构筑包含了 chrome 和 puppeteer 的镜像构建文件,文件可以命名为 mypuppeteer.dockerfile。示例如下:

FROM alpine
# Installs latest Chromium (92) package.RUN apk add --no-cache \ chromium \ nss \ freetype \ harfbuzz \ ca-certificates \ ttf-freefont \ nodejs \ yarn

# Tell Puppeteer to skip installing Chrome. We'll be using the installed package.ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \ PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
# Puppeteer v10.0.0 works with Chromium 92.RUN yarn add puppeteer@10.0.0
# 添加 cjk 字体以支持中文COPY NotoSansCJK.ttc /usr/share/fonts/TTF

注意代码中所使用的 字体文件,需要下载放置到 docker file 所在的相同目录。本文仅提供示例,您可以根据实际情况选择字体文件,调整文件名及 docker file 中对应字段。

2. 镜像构建

通过如下命令可以完成镜像构建,将构建出名称为 mypuppeteer:v1 的镜像:

docker build -t mypuppeteer:v1 -f mypuppeteer.dockerfile .

3. 本地测试

本地镜像构建完成后,可以使用如下 test.js 脚本快速测试验证效果。您可通过脚本针对网页截图并保存。

const puppeteer = require('puppeteer');(async () => {  const browser = await puppeteer.launch({    executablePath: '/usr/bin/chromium-browser',    args: ['--no-sandbox','--disable-setuid-sandbox','--ignore-certificate-errors'],    defaultViewport: {        width: 1920,        height: 1080,        deviceScaleFactor: 3,      },  });  const page = await browser.newPage();  await page.goto('https://www.baidu.com');  await page.screenshot({path: '/home/test.png'});  await browser.close();})();

执行以下命令运行镜像,将测试脚本目录挂载到容器内并运行,同时截屏文件也将生成在此目录下。

docker run -it --rm -v $(pwd):/home mypuppeteer:v1 node /home/test.js

您可以通过查看是否输出截屏文件,以验证字体文件是否生效。

4. 后续操作

可以运行 chrome、puppeteer 的镜像构建完成后,您可以基于此镜像之上构建函数运行环境,并通过将镜像 push 到腾讯云的镜像仓库,利用云函数的自定义镜像部署能力构筑自身所需的业务。
云函数的自定义镜像部署的说明及使用方法详情见 使用镜像部署函数功能说明。

常见问题

报错 “font-list 模块找不到”怎么处理?

您可以按以下步骤安装相关模块:

cd src
npm install font-list



官网1折活动,限时活动,即将结束,速速收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:https://www.yunxiaoer.com/149804.html

(0)
上一篇 2023年12月9日 下午1:25
下一篇 2023年12月9日 下午1:26
详情页2

相关推荐

  • 腾讯云对象存储服务端加密

    简介 本文档提供关于如何使用在上传对象时开启服务端加密。服务端加密的密钥分为三种:COS 托管加密密钥客户提供的加密密钥KMS 托管加密密钥 使用 COS 托管加密密钥的服务端加密(SSE-COS)保护数据 由腾讯云 COS 托管主密钥和管理数据。COS 会帮助您在数据写入数据中心时自动加密,并在您取用该数据时自动解密。目前支持使用 COS 主密钥对数据进行…

    腾讯云 2023年12月9日
  • 阿里云负载均衡健康检查概述-云淘科技

    负载均衡通过健康检查来判断后端服务器(ECS实例)的业务可用性。健康检查机制提高了前端业务整体可用性,避免了后端ECS异常对总体服务的影响。 开启健康检查功能后,当后端某台ECS健康检查出现异常时,负载均衡会自动将新的请求分发到其它健康检查正常的ECS上;而当该ECS恢复正常运行时,负载均衡会将其自动恢复到负载均衡服务中。 如果您的业务对负载敏感性高,高频率…

    2023年12月10日
  • 腾讯云对象存储异常处理

    简介 API 返回的 Response 为 Golang HTTP 标准库 Response 类型。用户可通过 err.Error() 获取错误提示,服务端返回的具体信息,请参见 COS 错误码。 服务端异常 API 返回的 Response 结构中包含调用结构,如下所示: 成员 描述 类型 X-Cos-Request-Id Response 中响应头,请求…

    腾讯云 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 在阿里函数计算里F工具与Severless dev区别是什么呢?-云小二-阿里云

    在阿里函数计算里F工具与Severless dev区别是什么呢?函数计算结果存储在表格存储或者mysql中,是在函数计算中添加触发器去调用表格存储吗?那如果表格存储调用函数计算呢,,另外能否给一些案例文档吗?在函数计算添加table store触发器,选择对应表格?表格更新时自动触发函数计算?另外我看表格存储中也有触发器,哪里添加函数计算触发器能够触发某个函…

    阿里云 2023年12月13日
  • 腾讯云内容分发网络CDN欠费说明

    1. 当您的账号处于欠费状态时,腾讯云会通过短信、邮件、站内信等方式提醒您欠费状态,并为您保留2个小时的缓冲时间,2个小时后账号未冲正,将会停止加速服务。2023年12月5日及之前转按月结算的用户,欠费缓冲期为24小时。按月结算用户是指中国境内计费区域或中国境外计费区域其中有一个是按月结算的用户。2. 缓冲时间结束后,系统会停止您账号下加速域名的 CDN 服…

    2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。