飞碟在生成PDF时忽略嵌入字体

时间:2017-10-11 05:41:05

标签: pdf itext flying-saucer

我尝试使用Flying Saucer为以下HTML生成PDF:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <style type="text/css">
  @font-face {
  font-family: 'Roboto';
  font-style: normal;
  font-weight: 300;
  src:url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAGSwABMAAAAAtfwAAQAAAAA...zubbzBiN9B2+6bK8AAAABV9JwXgAA) format('woff');
  -fs-pdf-font-embed: embed;
  -fs-pdf-font-encoding: Identity-H;
}

    body {
      font-family: Roboto;
      font-size: 26px;
      font-weight: 300;
      letter-spacing: -.03em;
    }
  </style>
</head>
<body>
<p>The quick brown fox jumps over the lazy dog</p>
</body>
</html>

其中base64字体取自https://gist.github.com/abelaska/9c9eda70d31315f27a564be2ee490cf4

        ITextRenderer renderer = new ITextRenderer();
        renderer.setDocumentFromString(data);
        renderer.layout();
        renderer.createPDF(os);

当我检查Adobe Reader中的属性中使用的字体时,会列出Times New Roman而不是上面的字体。

如果我在css中使用字体路径,则PDF会正确显示字体。

src:url(/usr/local/Roboto.woff)

有人能让我知道我错过了什么,或者这是飞碟限制吗?

1 个答案:

答案 0 :(得分:0)

飞碟使用iText(但不是最新版本)。 在iText7中解决了许多与字体和HTML相关的问题,这实际上是我们首先转移到iText7的很大一部分原因。

尝试使用pdfHTML。它是一个iText7插件,允许您将HTML5(+ CSS3)转换为PDF。它的AGPL许可和开源。 (或者更确切地说,我们目前正在开源)。

https://itextpdf.com/itext7/pdfHTML

这是一些示例代码:

// load license
LicenseKey.loadLicenseFile("path_to_license_key.xml");

// conversion
HtmlConverter.convertToPdf(
    "<b>This text should be written in bold.</b>", 
    new PdfWriter(new File("C://users/user5733033/output.pdf"))
);