是的,有点。 PDF 字段可以具有富文本值(自 acrobat 6/pdf1.5 起)以及常规值。
常规值使用默认外观中定义的字体...单一字体。
丰富的值格式(iText 不直接支持,至少现在还不是),在文档的第 12.7.3.4 章中进行了描述。PDF 参考 http://www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf. <b>, <i>, <p>
,以及相当多的 css2 文本属性。它需要具有各种属性。
要启用丰富的值,您必须设置字段标志的第 26 位(PdfName.FF
) 对于文本字段。 PdfFormField 没有“setRichValue”,但它们是字典,因此您可以:
myPdfFormField.put(PdfName.RV, new PdfString( richTextValue ) );
如果您尝试将富文本添加到尚不支持它的现有字段:
AcroFields fields = stamper.getAcroFields();
AcroFields.Item fldItem = fields.getFieldItem(fldName);
PdfDictionary mergedDict = item.getMerged(0);
int flagVal = mergedDict.getAsNumber(PdfName.FF).intValue();
flagVal |= (1 << 26);
int writeFlags = AcroFields.Item.WRITE_MERGED | AcroFields.Item.WRITE_VALUE;
fldItem.writeToAll(PdfName.FF, new PdfNumber(flagVal), writeFlags);
fldItem.writeToAll(PdfName.RV, new PdfString(richTextValue), writeFlags);
实际上,当我键入此消息时,我正在向 iText 添加富文本支持(不是锐利的)。 SO 的贡献者万岁。 Paulo 最近在保持 iTextSharp 同步方面做得很好,所以这不应该是一个问题。下一个主干版本应该有这个功能......所以你可以写:
myPdfFormField.setFieldFlags( PdfFormField.FF_RICHTEXT );
myPdfFormField.setRichValue( richTextValue );
or
// note that this will fail unless the rich flag is set
acroFields.setFieldRichValue( richTextValue );
注意:iText 的外观生成尚未更新,只是更新了价值方面。这将需要更多的工作。所以你会想要acroFields.setGenerateAppearances(false)
或者让 IS 在打开表单时重置字段值,以强制 Acrobat/Reader 为您构建外观。