繁体   English   中英

如何在使用 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?

我似乎有一个我无法自己解决的问题。 我正在使用flysaucer-9.1.20openpdf-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 文件在 Adob​​e Acrobat Reader DC 中的样子:

pdf1

到目前为止一切顺利,它使用了我的嵌入字体,但是一旦我单击输入字段,字体就会发生变化,并且在编辑后,它会保持这种状态:

pdf2

当我在 Chrome 中打开 PDF 并单击输入字段时,它看起来像这样:

pdf3

大部分是空白,有时是一些随机字母,如我实际项目中的示例所示:

例子

看起来存在某种编码问题,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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM