【问题标题】:unable to set background color on iTextSharp signature appearance无法在 iTextSharp 签名外观上设置背景颜色
【发布时间】:2015-06-26 14:17:56
【问题描述】:

有人对如何在 iTextSharp 中的 PdfSignatureAppearance 矩形上设置背景颜色有任何想法吗?我创建了 PdfSignatureAppearance 对象并可以设置它在页面上的位置,但矩形只有透明背景。我正在尝试应用一种颜色(真的)。

我尝试创建一个新的 iTextSharp.text.Rectangle 然后设置 rect.BackgroundColor = new BaseColor(System.Drawing.Color.Yellow); 这不起作用。我看到其他人试图通过将样式应用于签名外观对象的 layer2 来进行类似的操作。我试过这些没有运气。

PdfTemplate sigAppLayer2 = appearance.GetLayer(2);
sigAppLayer2.SetRGBColorFill(255, 0, 0);
sigAppLayer2.SetGrayFill(2);
sigAppLayer2.BoundingBox.BackgroundColor = new BaseColor(System.Drawing.Color.Yellow);

每当我尝试对 layer2 进行上述样式更改之一时,PDF 上的可见签名都会消失。如果我尝试将它应用到第 0 层或第 1 层,那么什么也不会发生。我假设我正在触摸正确的图层 (2)。

有什么想法吗?目标是在签名框上获得背景而不是让它透明。

请参阅下面的评论。我也尝试对第 2 层和第 0 层进行此设置。两者都导致一个红色框,但缺少签名文本。

PdfTemplate sigAppLayer2 = appearance.GetLayer(2);
Rectangle rect = sigAppLayer2.BoundingBox;
PdfTemplate sigAppLayer0 = appearance.GetLayer(0);
sigAppLayer0.SetRGBColorFill(255, 0, 0);
sigAppLayer0.Rectangle(rect.Left, rect.Bottom, rect.Width, rect.Height);
sigAppLayer0.Fill();

【问题讨论】:

  • 但缺少签名文本 - 您知道在完成appearance.GetLayer(2) 之后您必须自己添加文字,不是吗?要么将图层留给 iText,要么自己完成。
  • 我不知道你不能在不破坏它的情况下操作 layer2。请参阅下面的评论。如果有办法在设置签名矩形背景时保留文本,有什么想法吗?我尝试在将 rectangle 参数设置为 SetVisibleSignature 方法之前对其进行操作,但它似乎并没有通过创建签名块来保持格式化。
  • 我不知道你不能在不破坏它的情况下操作 layer2。 - 更重要的是,iText(在 preClose 期间)检查是否已经有一些 layer 2 材料.如果有,它会按原样(例如你的矩形)。如果没有,它会创建其默认的第 2 层外观。
  • 谢谢。也许我错过了一些东西。我首先使用PdfSignatureAppearance.SetVisibleSignature() 方法。这将创建第 2 层,绘制矩形,然后将矩形文本设置为签名数据。之后,我在第 2 层执行 Get 并使用边界框进行填充。也许我读错了你的评论,但如果第 2 层已经存在,那么它不应该保持原样而不是让文本消失吗?
  • 我首先使用的是 PdfSignatureAppearance.SetVisibleSignature() 方法。这会创建第 2 层, - 不,它不会。第一个GetLayer(2) 调用会创建一个空的layer2,并且只有在PreClose 期间还没有layer2 时,iText 才会创建一个layer2 并向其中添加一些文本。

标签: itextsharp itext


【解决方案1】:

您需要绘制矩形并用填充颜色填充该矩形。

根据记忆(未经测试),您需要这样的东西:

PdfTemplate sigAppLayer2 = appearance.GetLayer(2);
Rectangle rect = sigAppLayer2.BoundingBox;
sigAppLayer2.SetRGBColorFill(255, 0, 0);
sigAppLayer2.Rectangle(rect.Left, rect.Bottom, rect.Width, rect.Height);
sigAppLayer2.Fill();

【讨论】:

  • 谢谢。这让我更接近解决方案。如果我执行此方法,我会在签名框所在的位置得到一个红色框,但现在所有签名文本都丢失了。我还尝试从第 2 层获取边界框矩形尺寸,然后构建具有相同尺寸的第 0 层填充矩形。这也会创建红色矩形,但这里也缺少签名文本。有什么想法吗?
  • 如果先添加文本再添加矩形,那么矩形将覆盖文本。文本会在那里,但您不会看到它,原因应该很明显。
  • 谢谢。那讲得通。有关如何完成此最佳实践的任何建议?我正在使用appearance.SetVisibleSignature() 方法来创建签名矩形。正是它创造了文本。问题是,如果我尝试先创建填充颜色的矩形,似乎他 layer2 及其边界框还不存在
【解决方案2】:

就是这样:

    PdfTemplate sigAppLayer2 = appearance.GetLayer(2);
    Rectangle rect = sigAppLayer2.BoundingBox;
    sigAppLayer2.SetRGBColorFill(255, 0, 0);
    sigAppLayer2.Rectangle(rect.Left, rect.Bottom, rect.Width, rect.Height);
    sigAppLayer2.Fill();

    sigAppLayer2.ResetRGBColorFill();// <--------- you needs this

    sigAppLayer2.BeginText() ...etc

【讨论】:

    猜你喜欢
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    相关资源
    最近更新 更多