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

时间:2018-04-16 16:05:38

标签: java pdf itext sign

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

PdfReader           reader  = new PdfReader(pdfBytes);
FileOutputStream    fos     = new FileOutputStream(new File("/home/john/signedPdf.pdf"));
PdfStamper          stamper = PdfStamper.createSignature(
                            reader, 
                            fos, 
                            '\0', 
                            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签名很好,但矩形中的可见符号有一个填充,一个矩形越过第二个,第二个超过第三个,等等。 这是示例图像: enter image description here enter image description here 存在一种方法来删除这个填充并退出一个矩形克服其他。 提前致谢

1 个答案:

答案 0 :(得分:1)

您使用为此签名创建的矩形

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)。

E.g。你可以使用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)
    );

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