首页 > 解决方案 > itext 5 TextField 使用带有粗体和斜体的中文字体

问题描述

我正在尝试在 itext 5 中使用 TextField。我的字体名称是“微软正黑体”,英文是“Microsoft JhengHei”。我想用粗体和斜体使用这种字体。

初始化字体( 3 是 Font.BOLD | Font.ITALIC 和 BC 是我的基色)

Font fontZh = FontFactory.getFont(CurrentFont.getFontName(), BaseFont.IDENTITY_H, BaseFont.EMBEDDED,
                    CurrentFont.getFontSize(), 3, BC);

我有一个 textField 变量并将 fontZh 设置为 setFont。

field.setFont(fontZh.getBaseFont());

pdf 结果只有字体样式、大小和颜色是正确的。但是粗体和斜体是行不通的。

标签: javaitext

解决方案


您只能将 a 设置BaseFont为字段。这尤其意味着您FontFactory.getFont调用中的那些属性仅成为返回的一部分Font而不是底层的一部分BaseFont,不在您使用检索的基本字体中fontZh.getBaseFont(),因此未设置为该字段。

以这种方式丢失的属性包括特定的样式信息,例如斜体粗体(除非引用的字体文件已经是斜体或粗体,或者引用的字体系列已使用粗体或斜体字体文件注册)和颜色。

(您说在您的测试中颜色是正确的;如果是,那不是因为它是通过字体传输的。由于您没有显示足够的代码进行良好的分析,我只能猜测;我推测颜色要么是默认的开始,要么你使用其他指令设置它。)

因此,如果您想在文本字段中使用粗体或斜体字体,则应使用引用字体文件的基本字体,该字体文件已经以所需的粗体和斜体组合绘制字符,例如在Century Gothic使用的情况下GOTHICBI.TTFGOTHIC.TTF。不知道你有没有“微软正黑体”这样的变种。

如果要设置字段的字体颜色,可以通过设置字段来实现,即

field.setTextColor(BC);

在使用构建字段字典之前field.getTextField()


推荐阅读