我正在开发一个应用程序,需要使用Puppeteer来查看网页,并将其作为PDF下载给最终用户。我正在使用express.js作为服务器。我遇到的问题是,当我在Windows上进行本地开发时,我的PDF下载看起来就像他们所依赖的源网页,但当我将应用程序部署到Heroku (使用基于Ubuntu的环境)时,字体从Times New Roman改为sans-serif。
这里是我的木偶词典打印pdf代码的片段:
async function printPdf(url) {
const browser = await puppeteer.launch({
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
],
})
const page = await browser.newPage()
await page.goto(url, {waitUntil: 'networkidle0'})
const pdf = await page.pdf({ format: 'A4' })
await browser.close()
return pdf
}当我在Windows 10中本地开发时,PDF下载是正确的:
localhost: PDF引用的firefox源视图:

localhost:生成PDF下载,正确使用Times字体:

我的项目使用“基于Ubuntu20.04”的Heroku-20堆栈部署到一个免费的dynos中。我从未使用过Linux,我担心这可能是问题的根源。
部署后,web应用程序将正确显示firefox中的字体:

但是PDF下载使用font-family: sans-serif:

如何确保部署在Linux环境中的应用程序使用Times字体下载PDF?
发布于 2022-01-16 20:11:03
按照Heroku支助小组的说法:
库ttf-mscorefonts-installer有一个没有运行的后安装脚本(安装字体),因为我们在apt构建包中使用了dpkg -x (提取)而不是dpkg -i (安装)。安装程序正在下载和解压缩,但实际上没有发生任何有价值的事情。有两种解决办法:
对于我的具体用例,通过将字体添加到我的构建中并通过CSS链接解决了这个问题。我发现这个博客很有帮助:将字体添加到您的反应性应用程序的3种快速方法
https://stackoverflow.com/questions/70656005
复制相似问题