当前位置: 首页 > 知识库问答 >
问题:

iText戳记-Java[重复]

施飞驰
2023-03-14

我很难在PDF文档上加盖印章而不使数字签名无效。

目前,我成功地在PDF上加盖印章。但是,如果文档之前已签名,则签名不再有效。我理解为什么会发生这种情况,但如果我使用Acrobat添加文本或使用注释标记文本,则签名是有效的。

我尝试添加批注或注释,但签名仍然无效。有没有一种方法可以在不使数字签名失效的情况下使用iText向PDF添加戳记?

这是我用来盖章的代码片段:

        PdfReader reader = new PdfReader(inputstream);

        stamp = new PdfStamper(reader, new FileOutputStream(file));


        PdfContentByte pcb;
        BaseFont bf = BaseFont.createFont("Courier", BaseFont.CP1250,BaseFont.EMBEDDED);

        Rectangle r = reader.getPageSizeWithRotation(1);

        pcb = stamp.getOverContent(1);

        // set the font and size
        float size = 12;
        pcb.setFontAndSize(bf, size);

        float width = 90;
        float centerX = 0, startY = 0;
        centerX = r.getWidth() - (width / 2) - 20;
        startY = r.getHeight() - (15 * 2) - 145;

        pcb.beginText();
        pcb.showTextAligned(PdfContentByte.ALIGN_CENTER, stampText, centerX, startY, 0);

        pcb.setFontAndSize(bf, 10);
        pcb.showTextAligned(PdfContentByte.ALIGN_CENTER, date, centerX-9, startY-8, 0);
        pcb.endText();
        stamp.close();          

非常感谢您的帮助,谢谢

共有1个答案

长孙景焕
2023-03-14

我成功了':)

这是用于使用iText将自定义文本添加到文档而不使数字签名无效的代码。

//Read the source PDF
PdfReader reader = new PdfReader(inputstream);
//Create PdfStamp object
stamp = new PdfStamper(reader, new FileOutputStream(file), '\0', true);

//Create the proper annotation
PdfAnnotation annot = PdfAnnotation.createFreeText(stamp.getWriter(),  new Rectangle(150, 150, 200, 200), "Annotation 1", pcb);
annot.setFlags(PdfAnnotation.FLAGS_PRINT);

//Insert the annotation         
stamp.addAnnotation(annot, 1);
//Close the stamp
stamp.close();  

编辑:

为了在不使数字签名无效的情况下将图像戳插入文档,我使用了以下代码:

//Read the pdf 
PdfReader reader = new PdfReader(inputstream);
//Use PdfStamper in append mode
stamp = new PdfStamper(reader, new FileOutputStream(file), '\0', true); 

//Read the image
Image img = Image.getInstance(ImageIO.read(imgStream), null);

float w = img.getScaledWidth();
float h = img.getScaledHeight();
Rectangle location = new Rectangle(70, 770 - h, 70 + w, 770);

//Create stamp annotation           
PdfAnnotation stampAnnot = PdfAnnotation.createStamp(stamp.getWriter(), location, null, "ITEXT");
img.setAbsolutePosition(0, 0);
//Create new PdfContentByte from the stamp writer
//If you use cd = stamp.getOverContent(1) - you'll invalidate the signatures
PdfContentByte cb = new PdfContentByte(stamp.getWriter());
PdfAppearance app = cb.createAppearance(w, h);
app.addImage(img);
stampAnnot.setAppearance(PdfName.N, app);
stampAnnot.setFlags(PdfAnnotation.FLAGS_PRINT);

stamp.addAnnotation(stampAnnot, 1);
reader.close();
 类似资料:
  • 问题内容: 我在不使数字签名无效的情况下加盖PDF文档时遇到麻烦。 目前,我已成功将PDF标记。但是,如果文档先前已签名,则签名不再有效。我知道为什么会发生这种情况,但是如果我使用Acrobat添加文本或使用注释对其进行标记,则签名有效。 我尝试添加注释或注释,但是它仍然使签名无效。有没有一种方法可以使用iText在不使数字签名无效的情况下将戳记添加到PDF ? 这是我用来标记的代码片段: 任何帮

  • 我们一直试图在现有的签名PDF中添加注释/戳,而不使签名失效,但不幸的是,浏览器不会显示戳/注释。在Adobe Reader中打开时,可以在那里看到注释。任何其他的想法都是受欢迎的。所有我们想要的是一个小文本在现有的签名PDF不会使签名无效。 以下是我们的代码:

  • 问题内容: 我有一列称为“ s_timestamp”。 如何返回时间戳中具有当天的所有记录? 例如, 我想要以下输出: 让我知道是否不清楚。 问题答案: 只是使用。例如 日期() CURDATE()

  • 有没有可以在java中使用的库来正确转换19位unix时间戳,使其在java中具有适当的人类可读日期格式?

  • 但是,这与使用lombok注释非常相同: 除了明显不需要处理lombok依赖项之外,使用记录有什么好处吗?

  • 问题内容: 该查询可以很容易地从第二列返回将来的时间戳,因为它是“数学地”舍入的。这可能会导致一些意外的错误,只是因为检索到的时间是从将来开始的0.5s。 所以我的问题是-最简单的四舍五入方法是什么? PS:我知道转换为秒数并返回的解决方案 PPS:结果应为时间戳类型,而不是字符串 UPD : 找到了解决方案 问题答案: