【发布时间】:2019-07-16 09:37:38
【问题描述】:
我需要创建一个 PDF 缓冲区并将其保存到数据库中。我将完整的 DOM 传递给 puppeteer,其中大部分都可以正常工作。当我打开创建的 PDF 缓冲区时,会应用引导样式并获得精美的 PDF。
但是,字体很棒的图标不会出现。我只有两个 CSS 文件:framework.css(使用 SASS 创建并包含自定义样式、引导样式和 font-awesome)和 print-media(包含打印媒体 css 以隐藏或显示导航等内容)。这是我创建 PDF 缓冲区的代码:
const browser = await puppeteer.launch({
args: ['--disable-dev-shm-usage', '--no-sandbox', '--headless', '--disable-gpu'],
executablePath: pathToChrome}
);
const page = await browser.newPage();
const content = await page.setContent(pdfOptions.dom);
const addCss7 = await page.addStyleTag({path: appPath + '/public/css/framework.css'});
const addCss8 = await page.addStyleTag({path: appPath + '/public/css/print-media.css'});
const buffer = await page.pdf();
F.log(buffer);
在 css 文件夹中,我创建了一个包含 font-awesome 字体的字体文件夹,@font-face 指的是这个路径:
@font-face {
font-family: "FontAwesome";
src: url("./fonts/fontawesome-webfont.eot?v=4.7.0");
src: url("./fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"), url("./fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"), url("./fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"), url("./fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"), url("./fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");
font-weight: normal;
font-style: normal;
}
我是否必须告诉 puppeteer 它应该专门使用某些字体,还是我错过了其他东西?
提前致谢, 帕斯卡
编辑: 尝试使用绝对路径,但这也行不通。如果我这样做,即使是网站也不会包含字体。
@font-face {
font-family: "FontAwesome";
src: url("C:\Users\userFolder\someotherFolder\projectFolder\public\css\fonts\fontawesome-webfont.eot?v=4.7.0");
src: url("C:\Users\userFolder\someotherFolder\projectFolder\public\css\fonts\fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"), url("C:\Users\userFolder\someotherFolder\projectFolder\public\css\fonts\fontawesome-webfont.woff2?v=4.7.0") format("woff2"), url("C:\Users\userFolder\someotherFolder\projectFolder\public\css\fonts\fontawesome-webfont.woff?v=4.7.0") format("woff"), url("C:\Users\userFolder\someotherFolder\projectFolder\public\css\fonts\fontawesome-webfont.ttf?v=4.7.0") format("truetype"), url("C:\Users\userFolder\someotherFolder\projectFolder\public\css\fonts\fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");
font-weight: normal;
font-style: normal;
}
【问题讨论】:
-
您是否尝试使用 headless false 来查看页面中是否正在应用字体?
-
@hardkoded 我刚试过。图标也不在那里加载。
-
我敢打赌问题出在
"./fonts/fontawesome-webfont.eot?v=4.7.0"。您必须认为,如果您调用 newPage 和 setContent,您的根目录将是“about:blank”,因此它将无法找到“./fonts/” -
是的,我也这么认为,但是如何告诉 Chromium 去哪里看呢?
-
也许您可以在某处发布并定位绝对 URL
标签: javascript pdf fonts puppeteer webautomation