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

如何使用pdfbox在Java中签名pdf

郑伟彦
2023-03-14

我正在尝试使用pdfbox库签署pdf。我现在卡住了,真的需要帮助。

这是我的代码:

private static void signPdf(PDDocument document) throws Exception 
{
    PDSignature sig = new PDSignature();
    sig.setFilter(COSName.ADOBE_PPKLITE);
    sig.setSubFilter(COSName.ADBE_PKCS7_DETACHED);
    sig.setByteRange(new int[] {'a','a','a','a'});
    sig.setContents(new byte[]{(byte) 23, (byte) 23, (byte) 23, (byte) 23});

    SignatureOptions options = new SignatureOptions();

    document.addSignature(sig, new SignatureInterface() {
        public byte[] sign(InputStream content)
                throws SignatureException, IOException       {        
             //this should be made MD5 checksum?           
            return new byte[]{(byte) 'a', (byte) 'a', (byte) 'a', (byte) 'a'};
        }
    }, options);
}

然后我正在保存我的pdf,但是:1)我注意到sign method从来没有被调用2)我应该在哪里附加CertyFicate?在sign method中?

/Type /Sig
/Filter /Adobe.PPKLite
/SubFilter /adbe.pkcs7.sha1
/Contents <0000000000. a lot of zeros..000>
/ByteRange [0 1000000000 1000000000 1000000000]

以下是我保存PDF的方法:

java prettyprint-override">public static void saveFile(COSDocument doc, String out)
        throws IOException, COSVisitorException {  
    java.io.OutputStream os = null;  
    COSWriter writer = null;  
    try {
        os = new java.io.FileOutputStream(out);
        writer = new COSWriter(os);
        writer.write(doc);
    } finally {
        if (os != null) {
            os.close();
        }
        if (writer != null) {
            writer.close();
        }
    }
}

共有1个答案

百里杰
2023-03-14

链接的pdfbox-signexample.zip已过期。请改用此示例:

https://svn.apache.org/repos/asf/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/signature/createSignature.java

更好地记录和保持最新。

 类似资料:
  • 问题内容: 我正在尝试验证Java中经过数字签名的PDF文档。 我使用Apache PDFBox 2.0.6获取签名和已签名的原始PDF,然后使用Bouncy Castle验证分离的签名(计算原始文件的哈希,使用签名者的公钥验证签名并进行比较结果)。 我阅读了这篇文章,并尝试使用以下代码获取签名字节和原始PDF字节: 但是,当我将origPDF保存到文件中时,我注意到它仍然具有签名原始PDF所没有

  • 我尝试使用pdfbox向我的pdf添加多个签名,我尝试使用两个签名,第二个签名总是无效。请给出建议,PDF文件可以进行多次数字签名吗?Adobe livecycle论坛表示同意。

  • PDF创建步骤: 通过添加空签名字段名称创建pdf:suhasb@gmail.com和nikhil.courser@gmail.com,使用原始的hello.pdf输出文件名hello_tag.pdf运行程序>tagpdfsignaturefields.java 从hello_tag.pdf文件中提取签名字段suhasb@gmail.com进行首次签名,输出文件名为hello_signd.pdf

  • 带文本和背景图像的数字文本我正在尝试用Java中的PDFBox对pdf文件进行数字签名,在页面上显示可见的文本,类似于在Acrobat中手动创建时所创建的文本。如图像所示(一个只有快照我正在寻找,另一个也有数字签名的详细信息),这个示例显示了使用图像文件进行签名。怎么做?

  • 我想问一个问题,如果我想在多页pdf中添加数字签名,每页都有相同的印章,我是否可以在第一页只添加一次数字签名,然后其他页面只需要引用第一个印章的外观。因为使用这种方法可以减少添加邮票的时间。 我使用了mkl给出的代码,但我有一个问题。我用其他代码替换了以下代码。 原件: 现在: 原始代码在加盖印花时有效,但修改后的代码将使印花无效。我使用Adobe Acrobat Pro DC打开已签名的文档。此

  • 签署修改的问题。 Iam使用DSC令牌传递文档哈希和签名哈希(外部签名)。 Iam收到错误,例如:“文档自签名以来已被更改或损坏”获取文档哈希:- 外部签名代码:- 签名附加代码:- 此签名附加后,但在打开签名的PDF时会出现如下图所示的错误。 PDF文件链接:https://drive.google.com/file/d/1qRT2CVgET8Ds1fu0b5psii3j8ytPKaLH/vie