如何在使用 Flying Saucer 和 OpenPDF 从 XHTML 生成的 PDF 中为 AcroForm 字段使用自定义字体?
How do I use custom fonts for AcroForm fields in a PDF generated from XHTML with Flying Saucer and OpenPDF?
我似乎遇到了无法独自解决的问题。
我使用 flyingsaucer-9.1.20 和 openpdf-1.3.22 从 XHTML 源生成 PDF。
我的客户 CI 要求将 Verdana 作为他们所有文档的字体。所以我嵌入了字体并创建了 PDF,如下例所示:
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ITextRenderer renderer = new ITextRenderer();
renderer.setDocumentFromString(xhtmlDoc);
renderer.getFontResolver().addFont(fontDir + "verdana.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
renderer.layout();
renderer.createPDF(outputStream);
这是一个示例 XHTML 源代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css">
body {
font-size: 7.5pt;
font-family: Verdana;
}
input {
font-size: 7.5pt;
width: 500px;
height: 15px;
font-family: Verdana;
}
</style>
</head>
<body>
TestField: <input type="text" value="Test"></input>
<p>This is an example Text</p>
</body>
</html>
这是生成的 PDF 文件在 Adobe Acrobat 中的样子 Reader DC:
到目前为止还不错,它使用我的嵌入字体,但是当我单击输入字段时,字体会改变并且在编辑后保持原样:
当我在 Chrome 中打开 PDF 并单击输入字段时,它看起来像这样:
大部分是空白,有时是一些随机字母,如我实际项目中的示例所示:
似乎存在某种编码问题,Adobe Acrobat Reader 回退到其默认字体。当我使用 OpenPDF 中的一种标准字体时,它工作得很好。几天来我一直在为这个问题苦苦挣扎,我就是无法解决这个问题。
我是不是漏掉了什么?
我通过更改
设法解决了这个问题
renderer.getFontResolver().addFont(fontDir + "verdana.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
至
renderer.getFontResolver().addFont(fontDir + "verdana.ttf", BaseFont.CP1257, BaseFont.EMBEDDED);
我似乎遇到了无法独自解决的问题。 我使用 flyingsaucer-9.1.20 和 openpdf-1.3.22 从 XHTML 源生成 PDF。
我的客户 CI 要求将 Verdana 作为他们所有文档的字体。所以我嵌入了字体并创建了 PDF,如下例所示:
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ITextRenderer renderer = new ITextRenderer();
renderer.setDocumentFromString(xhtmlDoc);
renderer.getFontResolver().addFont(fontDir + "verdana.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
renderer.layout();
renderer.createPDF(outputStream);
这是一个示例 XHTML 源代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css">
body {
font-size: 7.5pt;
font-family: Verdana;
}
input {
font-size: 7.5pt;
width: 500px;
height: 15px;
font-family: Verdana;
}
</style>
</head>
<body>
TestField: <input type="text" value="Test"></input>
<p>This is an example Text</p>
</body>
</html>
这是生成的 PDF 文件在 Adobe Acrobat 中的样子 Reader DC:
到目前为止还不错,它使用我的嵌入字体,但是当我单击输入字段时,字体会改变并且在编辑后保持原样:
当我在 Chrome 中打开 PDF 并单击输入字段时,它看起来像这样:
大部分是空白,有时是一些随机字母,如我实际项目中的示例所示:
似乎存在某种编码问题,Adobe Acrobat Reader 回退到其默认字体。当我使用 OpenPDF 中的一种标准字体时,它工作得很好。几天来我一直在为这个问题苦苦挣扎,我就是无法解决这个问题。
我是不是漏掉了什么?
我通过更改
设法解决了这个问题renderer.getFontResolver().addFont(fontDir + "verdana.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
至
renderer.getFontResolver().addFont(fontDir + "verdana.ttf", BaseFont.CP1257, BaseFont.EMBEDDED);