我正在尝试使用iText7 7.1.0(java)中的字体颜色生成带外观的签名。
使用iText5时,调用FontFactory.getFont()
时包含了fontColor,然后:
Font font = FontFactory.getFont(fontName, encoding, embedFont, fontSize, style, bColor);
appearance.setLayer2Font(font);
但是,在iText7中,似乎Font丢失了fontSize和fontColor信息。
fontSize有一个新的appearance.setLayer2FontSize()
方法。
但是我无法找到指示layer2字体颜色的方法。
我在clases Text或Paragraph中找到了一个setFontColor。
但是,在生成signatureApperance时,要调用的方法似乎是PdfSignatureAppearance.setLayer2Text(String)
,参数只是一个String。
如何修改iText7中的layer2字体颜色?
提前多多感谢。
答案 0 :(得分:1)
显然,在将UndoRecord.CustomRecordName
从iText 5移植到iText 7时,没有考虑在iText 5字体对象中传输颜色的选项,至少我没有看到任何正式的传输方式在外观创作过程中所需的颜色。
在这种情况下,显而易见的选择是手动创建第2层。这样做,您可以根据需要设计外观。您可以复制并粘贴原始代码,包括所需的隐藏辅助方法,从原始的iText设计开始您的设计。
如果您不想这样做,即如果您仍然希望iText创建外观并仅稍微调整一下,则有一个解决办法:您可以要求iText创建外观然后操纵他们有点。
不幸的是,现在需要反思,因为生成外观PdfSignatureAppearance
的{{1}}方法是PdfSignatureAppearance
。 (它曾经是iText 5中的getAppearance()
...)
如果您对这种解决方法没问题,可以将文字着色为:
protected
(CreateSpecialSignatureAppearance测试方法public
)
由于最初生成的外观中的填充颜色未明确设置,但默认情况下为黑色,因此此前置指令将所有文本着色为红色(使用100%红色,0%绿色和0%蓝色的RGB颜色)。
我真的有点惊讶,iText 7仍然带有所有这些签名层的东西。至少自ISO 32000-1于2008年发布以来,没有理由再使用这些层,除了支持Adobe查看器特定的行为,甚至Adobe本身在ISO 32000-1之前已经宣布弃用了几年。
是否有这么大的利益集团游说支持那些被弃用的行为?