Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在用jasperreport生成的pdf中定位位置以放置签名?_Java_Jasper Reports_Export To Pdf_Pdf Reader - Fatal编程技术网

Java 如何在用jasperreport生成的pdf中定位位置以放置签名?

Java 如何在用jasperreport生成的pdf中定位位置以放置签名?,java,jasper-reports,export-to-pdf,pdf-reader,Java,Jasper Reports,Export To Pdf,Pdf Reader,我用JAVA和jasper生成了一个PDF文件。这样的jasper文件是用iReport设计的。创建pdf文件后,我想在pdf中的具体位置放置带有PdfStamper的签名。我发现了可能的解决方案: 使用PdfSignatureAppearance.setVisibleSignature方法。此不符合我的需要,因为它将签名定位在基于坐标的位置 PdfStamper stp = PdfStamper.createSignature(reader, outStream, '\0', fileTmp)

我用JAVA和jasper生成了一个PDF文件。这样的jasper文件是用iReport设计的。创建pdf文件后,我想在pdf中的具体位置放置带有PdfStamper的签名。我发现了可能的解决方案:

使用PdfSignatureAppearance.setVisibleSignature方法。此不符合我的需要,因为它将签名定位在基于坐标的位置

PdfStamper stp = PdfStamper.createSignature(reader, outStream, '\0', fileTmp);
PdfSignatureAppearance sap = stp.getSignatureAppearance();
sap.setVisibleSignature(new Rectangle(100, 100, 200, 200), 1, null);
使用PdfReader.getAcroFields(),然后遍历AcroFields,获取预定义表单字段的坐标,并插入签名,如前一个选项所示。问题是我不能用iReport定义AcroFields,所以我也不能使用它

我的问题:在用Java创建PDF后,有没有办法用iReport定义字段并读取?

您可以使用来查找PDF中的图像和文本

示例(显示如何在pdf中查找文本和图像的位置)

但是,我通常使用


然后将
baos
写入文件。

如果您有图像(带有签名),您可以查看。有几种受支持的字段类型:java.io.InputStream、java.awt.Image、etcHi Petter!谢谢你的回答。第一种方法非常有效!非常感谢你。第二个的问题是,我无法在静态位置定位标志,这取决于PDF@alvgarvilla嗯,我不明白你不需要定位,你把(签名图像)放在示例中的lastPageFooter带上(这样它总是有一个精确的位置(在最后一页上),然后在此处添加带有固定位置的pdf签名。诚然,这种方式的签名在所有pdf中都是固定位置的,但这更多是一个意见原因,如果报告是否良好,底部是否有签名。不过,感谢您的接受。
PdfReader reader = new PdfReader(src);
int pageILikeToCheck =reader.getNumberOfPages(); //set the page or loop them all        
final String matchStr = "FIND THIS TEXT";

PdfReaderContentParser parser = new PdfReaderContentParser(reader);
parser.processContent(pageILikeToCheck, new RenderListener() {  

    @Override
    public void renderImage(ImageRenderInfo renderInfo) {
        PdfImageObject image;
        try {
            image = renderInfo.getImage();
            if (image == null) return;
            System.out.println("Found image");
            System.out.println(renderInfo.getStartPoint());
        } catch (IOException e) {
            e.printStackTrace();
        }     
    }

    @Override
    public void renderText(TextRenderInfo renderInfo) {

        if(renderInfo.getText().length()>0 && matchStr.contains(renderInfo.getText())){
            System.out.println("FOUND MY TEXT");
            System.out.println(renderInfo.getBaseline().getStartPoint());
            System.out.println(renderInfo.getBaseline().getEndPoint());
        }
    }

    @Override
    public void endTextBlock() {
    }

    @Override
    public void beginTextBlock() {
    }
});
PdfReader reader = new PdfReader(src);
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
PdfStamper stamper = new PdfStamper(reader, baos);
int pageSignature=1;
stamper.addSignature("Signature", pageSignature, 320, 570, 550, 620);