Itext 附加到最后一页的底部
我正在将数字签名添加到现有pdf中,我需要有关如何获取矩形坐标的建议,以便将签名附加到从最后一页左侧0开始的新行,如果该页已满,则添加新页。 我能确定最后一页是否有我签名的空间吗?这样我就可以决定是添加新页面还是添加到最后一页。 我的pdf将由多个用户在不同的时间签名,因此我的计划是在最后一页的底部附加第一个签名,然后在收到新签名时附加新签名。 我正在使用Itext进行数字签名,需要在pdf中添加签名的建议Itext 附加到最后一页的底部,itext,Itext,我正在将数字签名添加到现有pdf中,我需要有关如何获取矩形坐标的建议,以便将签名附加到从最后一页左侧0开始的新行,如果该页已满,则添加新页。 我能确定最后一页是否有我签名的空间吗?这样我就可以决定是添加新页面还是添加到最后一页。 我的pdf将由多个用户在不同的时间签名,因此我的计划是在最后一页的底部附加第一个签名,然后在收到新签名时附加新签名。 我正在使用Itext进行数字签名,需要在pdf中添加签名的建议 public class Signatures { static void si
public class Signatures {
static void signPdf(SignatureDTO signatureDTO) throws Exception{
KeyStore ks = KeyStore.getInstance("pkcs12", "BC");
ks.load(new FileInputStream(signatureDTO.pks), signatureDTO.pwd.toCharArray());
String alias = (String)ks.aliases().nextElement();
PrivateKey pk = (PrivateKey) ks.getKey(alias, signatureDTO.pwd.toCharArray());
Certificate[] chain = ks.getCertificateChain(alias);
PdfReader reader = new PdfReader(signatureDTO.src);
FileOutputStream os = new FileOutputStream(signatureDTO.dest);
PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0');
PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
appearance.setReason(signatureDTO.reason);
appearance.setLocation(signatureDTO.location);
appearance.setVisibleSignature(signatureDTO.rectangle, signatureDTO.page, signatureDTO.fieldName);
ExternalSignature es = new PrivateKeySignature(pk, "SHA-256", "BC");
ExternalDigest digest = new BouncyCastleDigest();
MakeSignature.signDetached(appearance, digest, es, chain, null, null, null, 0, CryptoStandard.CMS);
}
static class SignatureDTO {
String src,dest,pks,pwd, reason,location;
Rectangle rectangle;
int page;
String fieldName;
}
public static void main(String[] args)
throws Exception {
Security.addProvider(new BouncyCastleProvider());
SignatureDTO signatureDTO= new SignatureDTO();
signatureDTO.dest="resources/OCD-Final-signed1.pdf";
signatureDTO.src="resources/OCD-Final.pdf";
signatureDTO.fieldName="sign1";
signatureDTO.location="VA";
signatureDTO.reason="Approval";
signatureDTO.pks="resources/test1.pfx";
signatureDTO.pwd="test123";
signatureDTO.page=5;
signatureDTO.rectangle= new Rectangle(72, 732, 144, 780);
signPdf(signatureDTO);
signatureDTO.src=signatureDTO.dest;
signatureDTO.dest="resources/OCD-Final-signed2.pdf";
signatureDTO.pks="resources/test5657.pfx";
signatureDTO.fieldName="sign2";
signatureDTO.rectangle= new Rectangle(160, 732, 232, 780);
signPdf(signatureDTO);
}
}
我尝试了这个方法,找到与我要查找的文本匹配的TextRenderInfo对象,但是TextRenderInfo没有任何坐标
PdfReader reader = new PdfReader(signatureDTO.src);
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
TextMarginFinder finder;
finder= parser.processContent(5, new TextMarginFinder(){
@Override
public void renderText(TextRenderInfo renderInfo) {
super.renderText(renderInfo);
if(renderInfo.getText().equals("Approving Official")){
textRenderInfos.add(renderInfo);
}
}
});
请告知我可以从TextRenderInfo获取坐标吗
基于文本查找坐标的代码
PdfReader reader = new PdfReader(signatureDTO.src);
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
parser.processContent(5, new TextMarginFinder(){
@Override
public void renderText(TextRenderInfo renderInfo) {
super.renderText(renderInfo);
if(mathStr.contains(renderInfo.getText())){
textRenderInfos.put(renderInfo.getText(),renderInfo);
System.out.println(renderInfo.getBaseline().getStartPoint().get(Vector.I1));
System.out.println(renderInfo.getBaseline().getEndPoint().get(Vector.I2));
System.out.println(renderInfo.getBaseline().getEndPoint().get(Vector.I3));
}
}
这是和的副本,示例显示了如何在页面顶部添加边距,我的问题是如何找到文本的坐标,我使用jasper reports创建了我的pdf,我的pdf有官方标题和空白行供其签名,现在我想找到这条线的坐标,得到它的坐标,然后把它传递给PDFSignaturePearance,这样我的签名就会出现在这条线上。如果我找不到行,我能找到字符串官方标题的文本坐标吗?还有很多关于如何找到给定文本的坐标的问题。基本上,他们使用文本提取和自定义策略。您能告诉我在哪里可以找到文本提取策略吗?您的编辑显示您找到了用于提取坐标的代码。您可能不仅应该添加代码,还应该添加一些您仍然缺少的信息。