gpt4 book ai didi

java - Layer2 中的签名外观字体颜色(itext 7)

转载 作者:行者123 更新时间:2023-12-02 11:42:18 25 4
gpt4 key购买 nike

我正在尝试使用 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字体颜色的方法。

我在 Text 或 Paragraph 类中找到了 setFontColor。

但是,在生成signatureApperance时,调用的方法似乎是PdfSignatureAppearance.setLayer2Text(String),参数只是一个String。

如何修改iText7中的layer2字体颜色?

提前非常感谢。

最佳答案

显然,在将 PdfSignatureAppearance 从 iText 5 移植到 iText 7 时,没有考虑在 iText 5 字体对象中传输颜色的选项,至少我没有看到任何官方的传输方式将所需的颜色添加到外观创建过程中。

在这种情况下,显而易见的选择是手动创建第 2 层。这样做,您可以选择根据需要设计外观。您可以复制并粘贴原始代码(包括所需的隐藏辅助方法),以从原始 iText 设计开始您的设计。

如果您不想这样做,即如果您仍然希望 iText 创建外观并只是稍微调整一下,有一个解决方法:您可以要求 iText 创建外观,然后对它们进行操作一点。

不幸的是,现在需要反射,因为用于生成外观的 PdfSignatureAppearance 方法 getAppearance() protected 。 (它曾经在 iText 5 中是public...)

如果您接受这样的解决方法,您可以像这样为文本着色:

PdfSigner signer = ...;
PdfSignatureAppearance appearance = signer.getSignatureAppearance();

[... customize the appearance using its usual methods ...]

// call appearance.getAppearance() using reflection
// this initializes the layers in the appearance object
Method getAppearanceMethod = PdfSignatureAppearance.class.getDeclaredMethod("getAppearance");
getAppearanceMethod.setAccessible(true);
getAppearanceMethod.invoke(appearance);

// add a fill color setting instruction
// at the start of layer 2
PdfFormXObject layer2 = appearance.getLayer2();
PdfStream layer2Stream = layer2.getPdfObject();
byte[] layer2Bytes = layer2Stream.getBytes();
layer2Stream.setData("1 0 0 rg\n".getBytes());
layer2Stream.setData(layer2Bytes, true);

signer.signDetached(...);

( CreateSpecialSignatureAppearance 测试方法 testColorizeLayer2Text)

由于原始生成的外观中的填充颜色未明确设置,而是默认为黑色,因此此前置指令将所有文本着色为红色(使用具有 100% 红色、0% 绿色和 0% 蓝色的 RGB 颜色)。

<小时/>

实际上,我有点惊讶 iText 7 仍然带有所有这些签名层内容。至少自从 ISO 32000-1 于 2008 年发布以来,除了支持 Adob​​e 查看器特定行为之外,没有理由再使用这些层,甚至 Adob​​e 自己在 ISO 32000-1 之前几年就已宣布弃用这些行为。

是否有如此大的利益集团游说支持这些已弃用的行为?

关于java - Layer2 中的签名外观字体颜色(itext 7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48467637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com