IText7如何解码字段的默认外观int字体对象及其属性

Posted

技术标签:

【中文标题】IText7如何解码字段的默认外观int字体对象及其属性【英文标题】:IText7 How to decode field's default appearance int Font object and its properties 【发布时间】:2017-05-08 16:52:04 【问题描述】:

我有一个带有一些字段的AcroForm,我需要获取其中一个字段的字体信息。我知道我必须使用

(PdfFormField)field.getDefaultAppearance()

但这会导致像

这样的字符串
/Helv 12 Tf 0.25 0.25 0.25 rg` 

有没有一种简单的方法可以将该字符串解析为PdfFont 对象?

很明显,我可以从给定的字符串中手动解析它,但我怀疑 IText 有一些工具可以为我做这件事不是吗?

除了/Helv 只是“参考”或类似的东西,显然指向Helvetica 但如果我有某种自定义字体呢?

谢谢!

【问题讨论】:

关于Helv等:通常相关字体资源字典中的字体名称映射到字体定义。但是,DefaultA 外观中的字体名称有时不是,参见。 this answer 中的使用 /Helv、/HeBo、... 部分。 【参考方案1】:

如果要在表单域中使用字体,可以使用PdfFormField#getFont() 方法,这将返回直接使用的PdfFont 对象。要设置自定义字体,请使用PdfFormField#setFont(PdfFont font),这也将重新创建表单域的外观。使用PdfFormField#setFontSize(float fontsize) 设置字段内文本的大小。使用PdfFormField#setClor(..)设置文字颜色。

你从getDefaultAppearance()得到的信息是用pdf语法写的,可以解析如下:

`/Helv 12 Tf 0.25 0.25 0.25 rg`

font size Tf 指令为后面的文本指令设置 font(subset)size。使用它们插入到 pdf 中的名称来引用字体。在这种情况下 /Helv,它可能会指向 Helvetica 的(一个子集)。然而,它不一定是 helvetica,一些小丑可以插入 Comic Sans 并将其命名为 /Helv。 12 是字体大小。

x y z rg 方法使用 RGB 值设置字体颜色,x, yz 相对强度值在区间 [0.0,1.0] 内。

【讨论】:

以上是关于IText7如何解码字段的默认外观int字体对象及其属性的主要内容,如果未能解决你的问题,请参考以下文章

使用iText 7(C#)创建删除线字体

iText7高级教程之html2pdf——6.在pdfHTML中使用字体

iText7高级教程之html2pdf——6.在pdfHTML中使用字体

如果在 PDF 表单中多次出现,Java PDFBox 不会保持字段的字体外观

如何在 acroforms 中获取字体信息?

使用 circe 解码 JSON 对象时捕获未使用的字段