我有一个小应用程序,可以使用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签名很好,但矩形中的可见符号有一个填充,一个矩形越过第二个,第二个超过第三个,等等。 这是示例图像: 存在一种方法来删除这个填充并退出一个矩形克服其他。 提前致谢
答案 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)
);
而不是当前的矩形尺寸和位置。