如何在 html 到 pdf 转换过程中使用自定义字体?

问题描述 投票:0回答:1

我正在尝试使用 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:

html css google-apps-script pdf base64
1个回答
0
投票

解决办法是在

data:
中添加
url()
。检查编辑。

© www.soinside.com 2019 - 2024. All rights reserved.