Puppeteer截图/生成PDF乱码:alpine linux中文字体如何解决?
Author:zhoulujun Date:
Puppeteer在生成PDF与截图的时候,发现中文全身乱码。中文好了,繁体是乱码
是因为linux上,默认没有中文字体支持,特别是像alpine这种魔改精简版!
linux字体推荐
Linux 上常用的支持中文简体与繁体的字体,我们肯定推荐开源免费可以商用的
Noto Sans CJK(思源黑体)
Google 和 Adobe 合作推出的开源字体,支持完整的 CJK 字符集。
字体风格现代化,适用于网页和文档。
包名:
font-noto-cjk
文泉驿系列
文泉驿正黑(wqy-zenhei):传统黑体风格,支持简体和繁体中文。
文泉驿微米黑(wqy-microhei):适合小屏幕的简洁字体。
包名:
wqy-zenhei
,wqy-microhei
思源宋体(Noto Serif CJK)
传统宋体风格,与 Noto Sans CJK 搭配使用。
包名:
font-noto-cjk
阿里巴巴普惠体
免费商用字体,支持简体中文。
需要手动下载字体文件并安装。
AR PL 字体
ttf-arphic-uming
(华文明体风格):适合繁体中文。ttf-arphic-ukai
(仿宋风格):支持简体和繁体中文。
首推思源与文泉驿,个人鉴于设置Noto Sans CJK 优先。
# Install necessary font RUN apk add --no-cache \ fontconfig \ font-noto-cjk \ ttf-ubuntu-font-family \ ttf-freefont \ ttf-liberation \ font-droid-nonlatin\ ttf-roboto RUN fc-cache -f -v
字体包搜索,可以在pkgs.alpinelinux.org 上面查查看
整体如下:
# Base image FROM acrdevopsprodeas01.azurecr.io/node:20-alpine # Create app directory WORKDIR /app # Install app dependencies COPY package.json /app/ # Install necessary font RUN apk add --no-cache \ fontconfig \ font-noto-cjk \ ttf-ubuntu-font-family \ ttf-freefont \ ttf-liberation \ font-droid-nonlatin\ ttf-roboto RUN fc-cache -f -v # Install necessary packages for Puppeteer RUN apk add --no-cache chromium nss freetype harfbuzz ca-certificates ttf-freefont #RUN npx puppeteer browsers install chrome ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser \ UPPETEER_SKIP_CHROMIUM_DOWNLOAD="true" RUN yarn install --ignore-scripts && yarn cache clean # Bundle app source COPY . /app # EXPOSE 8000 CMD [ "yarn", "start" ]
在前端配置:
body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans CJK", "Noto Sans SC", "Noto Sans TC", "Roboto", "Poppins", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; @apply text-ft-text-primary min-w-[375px]; /* NOTE: `375px` is iPhone SE width */ }
当然,也可以不在linux上安装字体,完全靠前端解决
前端解决linux乱码问题:
AKS 运维如过不能很好的配合搞镜像的话,也可以前端自己解决
比如google字体:https://github.com/notofonts/noto-cjk
也可以去google font 搜索:https://fonts.google.com/noto/specimen/Noto+Sans+SC
下载思源黑体
可以从 Google 或 Adobe 获取字体文件,例如:
Noto Sans CJK:Google Fonts
Noto Sans CJK 的字体文件:
NotoSansCJK-Regular.otf
。
然后设置css
@font-face { font-family: 'Noto Sans CJK'; src: url('fonts/NotoSansCJK-Regular.otf') format('opentype'); font-weight: normal; font-style: normal; } body { font-family: "Noto Sans CJK", "Helvetica Neue", Arial, sans-serif; }
然后使用使用 JavaScript 动态加载 css样式
<script> // 判断操作系统是否为 Linux if (navigator.platform.indexOf('Linux') !== -1) { var link = document.createElement('link'); link.rel = 'stylesheet'; //link.href = 'https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;700&family=Noto+Sans+TC:wght@400;700&display=swap'; link.href = './demo.css'; document.head.appendChild(link); } </script>
当然,也可以使用媒体查询器
版权问题
思源黑体是完全免费的,适合用于商业项目,包括网站、印刷品、广告、应用程序等。
思源黑体由 Google 和 Adobe 合作推出,发布于 SIL Open Font License 1.1 (OFL 1.1) 授权协议下。这种协议允许用户在以下条件下自由使用字体:
免费使用:可以自由地用于个人或商业用途。
自由分发:可以将字体分发给他人。
修改和衍生:
允许修改字体文件并创建衍生版本。
如果分发修改后的版本,必须更改字体名称以避免与原字体混淆。
完整的 SIL OFL 1.1 协议内容可以在 SIL OFL 官网 查看。
文泉驿字体系列(如 wqy-zenhei
和 wqy-microhei
)是开源字体,主要由 文泉驿项目(WenQuanYi Project)开发,遵循 GPL(GNU General Public License) 或 LGPL(Lesser General Public License) 许可协议。根据这些开源协议,文泉驿字体是免费且可以商用的。
其他的,比如微软雅黑、Segoe UI 、苹果冬青黑 ,这些在网页上展示没有问题,但是如过用于DPF与截图,涉及商用,是要赔钱的!
转载本站文章《Puppeteer截图/生成PDF乱码:alpine linux中文字体如何解决?》,
请注明出处:https://www.zhoulujun.cn/html/webfront/browser/Puppeteer/9457.html