layer2中的签名外观字体颜色(itext 7)

时间:2018-01-26 18:44:10

标签: java itext itext7

我正在尝试使用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字体颜色?

提前多多感谢。

1 个答案:

答案 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之前已经宣布弃用了几年。

是否有这么大的利益集团游说支持那些被弃用的行为?