相关疑难解决方法(0)

iText冲压-Java

我在不使数字签名无效的情况下加盖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, …
Run Code Online (Sandbox Code Playgroud)

java pdf itext digital-signature invalidation

4
推荐指数
1
解决办法
3469
查看次数

PDF/A-3A 文档的 PAdES LTV 签名产生无效签名

介绍

我对标记为符合 PDF/A - 3A 的 PDF 文档进行数字签名时遇到问题。使用 PDFBox(最新版本,2.0.24)我最终在 Adob​​e Acrobat 中得到一个无效签名,而使用 iText7(最新版本)我得到一个有效签名。目标是获得符合 PAdES LTV 的签名。

概述

我的流程如下(同时使用 PDFBox 和 iText7):

  • 我打开 PDF,创建用于签名的哈希值(要签名的数据)
  • 我打电话给第三方服务找回数字签名
  • 在服务响应中,我还获得了为了 LTV 质量需要嵌入到 PDF 中的 OCSP 和 CRL 内容
  • 我在 PDF 中嵌入了签名
  • 我将文档保存到内存中,然后重新打开它以嵌入 OCSP 和 CRL
  • 我嵌入了 OCSP 和 CRL 项,创建了各自的 DSS 和 VRI 词典
  • 我将 PDF 保存到磁盘

对于 PDFBox,签名代码在这里,OCSP/CRL 嵌入代码在这里。对于 iText7,签名和 OCSP/CRL 嵌入的代码在这里

问题

现在,这适用于大多数 PDF 文件,包括多签名文档。问题在于一个特定的 PDF,它被创建为 PDF/A 兼容,级别 3A。

使用 PDFBox,如果我只是嵌入签名并在 Adob​​e Acrobet 中打开文档,则签名是有效的。如果我还嵌入了 OCSP/CRL 内容,则签名不再有效。Adobe Acrobat …

java pdf signing pdfbox pades

4
推荐指数
1
解决办法
123
查看次数

PDFBox表单填写 - saveIncremental不起作用

我有一个pdf文件,其中包含一些我希望从java填写的表单字段.现在我正试图填写一个我正在寻找的形式.我的代码看起来像这样:

    File file = new File("c:/Testy/luxmed/Skierowanie3.pdf");
    PDDocument document = PDDocument.load(file);
    PDDocumentCatalog doc = document.getDocumentCatalog();
    PDAcroForm Form = doc.getAcroForm();

    String formName = "topmostSubform[0].Page1[0].pana_pania[0]";
    PDField f = Form.getField(formName);
    setField(document, formName, "Artur");
    System.out.println("New value 2nd: " + f.getValueAsString());

    document.saveIncremental(new FileOutputStream("c:/Testy/luxmed/nowy_pd3.pdf"));
    document.close();
Run Code Online (Sandbox Code Playgroud)

还有这个:

public static void setField(PDDocument pdfDocument, String name, String Value) throws IOException 
{
    PDDocumentCatalog docCatalog = pdfDocument.getDocumentCatalog();
    PDAcroForm acroForm = docCatalog.getAcroForm();
    PDField field = acroForm.getField(name);

    if (field instanceof PDCheckBox){
        field.setValue("Yes");
    }
    else if (field instanceof PDTextField){
        System.out.println("Original value: " + field.getValueAsString());
        field.setValue(Value); …
Run Code Online (Sandbox Code Playgroud)

java pdf pdfbox

2
推荐指数
1
解决办法
1363
查看次数

标签 统计

java ×3

pdf ×3

pdfbox ×2

digital-signature ×1

invalidation ×1

itext ×1

pades ×1

signing ×1