删除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)
);
而不是您当前的矩形尺寸和位置。
我有一个小应用程序可以使用 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: 748next == 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)
);
而不是您当前的矩形尺寸和位置。