我在PDF模板中设置AcroField的文本值,文本来自另一个LOB系统。这很好用。但是,客户最近要求我们能够在字段中支持上标文本。
我的第一个想法,因为它需要最少量的重新编码,将允许客户在LOB系统中指定一些标记(例如'普通文本^ Ssuper脚本文本^ S更普通的文本'将产生我将在我的应用程序中查找“普通文本超级脚本文本更多普通文本”,然后将子字符串上的字体设置为更小,然后设置垂直偏移量。我已经找到并使用了一些示例,我可以在AcroField上设置字体,但我似乎无法得到一个明确的答案,如果我可以设置子字符串的字体。我知道我们can do it using Chunks,但看起来在我们的模板和创建文档的代码中需要进行大量的重组。
我正在寻找一个正确的方向,而不是其他任何东西。
答案 0 :(得分:2)
丰富的文字可能就是你所追求的。
iText允许您使用AcroFields.setFieldRichValue
设置富文本值。
如果您想使用此功能,可以在the PDF specification ISO 32000-1中的12.7.3.4 富文本字符串部分找到此富文本的说明。
请注意该方法的JavaDocs注释:
/**
* Sets the rich value for the given field. See <a href="http://www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf">PDF Reference</a> chapter
* 12.7.3.4 (Rich Text) and 12.7.4.3 (Text Fields) for further details. Note that iText doesn't create an appearance for Rich Text fields.
* So you either need to use XML Worker to create an appearance (/N entry in the /AP dictionary), or you need to use setGenerateAppearances(false) to tell the viewer
* that iText didn't create any appearances.
* @param name Field name
* @param richValue html markup
* @return success/failure (will fail if the field isn't found, isn't a text field, or doesn't support rich text)
* @throws DocumentException
* @throws IOException
* @since 5.0.6
*/
public boolean setFieldRichValue(String name, String richValue) throws DocumentException, IOException
因此,使用setGenerateAppearances(false)
通知PDF查看器它应该从富文本创建外观;或者,您可以尝试自己创建外观。但是,我认为iText还没有包含自动创建该外观的代码的原因;最可能的做法与Adobe Reader一样,这并不是一件容易的事。
PS:用作超级脚本,规范明确提到
vertical-align decimal 调整所附文本基线的数量。正值表示上标;负值表示下标。该值的格式为pt,可选地以符号开头,后跟“pt”。
您可能希望将其与
结合使用font-size decimal 所附文本的字体大小。值的格式为pt。