我正在尝试使用 Google Apps 脚本制作基于 html 文件的 PDF 生成器。不幸的是我无法为此应用自定义字体。我想出了以 base64 格式加载字体的想法,但它对我不起作用。我错过了什么?
我尝试将
@font-face
与谷歌字体一起使用,但似乎在转换之前没有获取它(从部署的脚本获取doGet(e)
时工作正常)。
这是代码:
功能:
function htmlToPdf() {
var fileIdOfFontFile = "1xXWmKZ2wRzWq_4DWfeIK67QKFVkF_nVu";
var fontBlob = DriveApp.getFileById(fileIdOfFontFile).getBlob();
var htmlTemplate = HtmlService.createTemplateFromFile("site");
htmlTemplate.fontData = fontBlob.getContentType() + ';base64,' + Utilities.base64Encode(fontBlob.getBytes());
var pdf_html = htmlTemplate.evaluate().getContent();
var blob = Utilities.newBlob(pdf_html, MimeType.HTML).getAs(MimeType.PDF);
DriveApp.createFile(blob);
}
html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<style>
@font-face {
font-family: "Gloria Hallelujah";
src: url(<?= fontData ?>);
}
* {
font-family: "Gloria Hallelujah";
}
</style>
<body>
<p>test</p>
</body>
</html>
编辑: 解决方案是更改 html,如下所示:
@font-face {
font-family: "Gloria Hallelujah";
src: url(<?= fontData ?>);
}
到
@font-face {
font-family: "Gloria Hallelujah";
src: url("data:<?= fontData ?>");
}
对我来说有趣的是,将
data:
作为字符串部分传递并不以相同的方式工作。这可能是我的错误,但我在 html 文件中留下了 data:
。
解决办法是在
data:
中添加url()
。检查编辑。