删除iText PDF签名中矩形的填充

Delete padding of Rectangle in iText PDF signature

我有一个小应用程序可以使用 iText 在 JAVA 中向 PDF 添加签名。 这是代码片段:

PdfReader           reader  = new PdfReader(pdfBytes);
FileOutputStream    fos     = new FileOutputStream(new File("/home/john/signedPdf.pdf"));
PdfStamper          stamper = PdfStamper.createSignature(
                            reader, 
                            fos, 
                            '[=10=]', 
                            new File("/home/john/"), 
                            true
    );
PdfSignatureAppearance signatureAppearance = stamper.getSignatureAppearance();
signatureAppearance.setRenderingMode(PdfSignatureAppearance.RenderingMode.DESCRIPTION);
Rectangle rectangle = new Rectangle(
                36,
                748 - 20 * (next - 1) ,
                144,
                780 - 20 * (next - 1)
    );
rectangle.normalize();
signatureAppearance.setVisibleSignature(
        rectangle, 
        1, contact);

PDF 签名良好,但矩形中的可见符号有填充,一个矩形超过第二个,第二个超过第三个,依此类推。 这是示例图像: 存在一种删除此填充并避免一个矩形覆盖另一个矩形的方法。 提前致谢

您使用这样创建的矩形作为您的签名

Rectangle rectangle = new Rectangle(
                36,
                748 - 20 * (next - 1) ,
                144,
                780 - 20 * (next - 1)
    );

其中(如评论中所述)整数 next 可以具有连续的签名值,例如1 和 2.

但这意味着您实际上要求重叠的签名矩形!例如。对于值 1 和 2,您得到:

  • next == 1 - 矩形顶部 y: 780;矩形底部 y: 748
  • next == 2 - 矩形顶部 y: 760;矩形底部 y: 728

因此这些矩形在 760 和 748 之间重叠 y

如果您不希望矩形重叠,y 步长因子(当前为 20)必须至少与顶部和底部之间的差异一样大 y 坐标起始值(当前 780 - 748 = 32)。

例如您可以使用步进因子 32

Rectangle rectangle = new Rectangle(
                36,
                748 - 32 * (next - 1) ,
                144,
                780 - 32 * (next - 1)
    );

或者高度为20的矩形

Rectangle rectangle = new Rectangle(
                36,
                760 - 20 * (next - 1) ,
                144,
                780 - 20 * (next - 1)
    );

而不是您当前的矩形尺寸和位置。