Itext 附加到最后一页的底部

Itext 附加到最后一页的底部,itext,Itext,我正在将数字签名添加到现有pdf中,我需要有关如何获取矩形坐标的建议,以便将签名附加到从最后一页左侧0开始的新行,如果该页已满,则添加新页。 我能确定最后一页是否有我签名的空间吗?这样我就可以决定是添加新页面还是添加到最后一页。 我的pdf将由多个用户在不同的时间签名,因此我的计划是在最后一页的底部附加第一个签名,然后在收到新签名时附加新签名。 我正在使用Itext进行数字签名,需要在pdf中添加签名的建议 public class Signatures { static void si

我正在将数字签名添加到现有pdf中,我需要有关如何获取矩形坐标的建议,以便将签名附加到从最后一页左侧0开始的新行,如果该页已满,则添加新页。 我能确定最后一页是否有我签名的空间吗?这样我就可以决定是添加新页面还是添加到最后一页。 我的pdf将由多个用户在不同的时间签名,因此我的计划是在最后一页的底部附加第一个签名,然后在收到新签名时附加新签名。 我正在使用Itext进行数字签名,需要在pdf中添加签名的建议

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,这样我的签名就会出现在这条线上。如果我找不到行,我能找到字符串官方标题的文本坐标吗?还有很多关于如何找到给定文本的坐标的问题。基本上,他们使用文本提取和自定义策略。您能告诉我在哪里可以找到文本提取策略吗?您的编辑显示您找到了用于提取坐标的代码。您可能不仅应该添加代码,还应该添加一些您仍然缺少的信息。