我尝试使用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)
有人能让我知道我错过了什么,或者这是飞碟限制吗?
答案 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"))
);