web-dev-qa-db-ja.com

pdfboxを使用してJava)でpdfにサインインする方法

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);
}

次に、IamはPDFを保存しますが、1)signメソッドが呼び出されないことに気づきました。2)証明書をどこに添付する必要がありますか?サイン法で?

pdf:

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

私は何かが恋しいと思いますが、ドキュメントにはファイルに署名する方法については何も書かれていません。

事前にJCをTahnks。

@Ed

これが私のPDFを保存する方法です:

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();
        }
    }
}
12
Jakub C

リンクされたPDFBox-SignExample.Zipは古くなっています。代わりにこのサンプルを使用してください:

https://svn.Apache.org/repos/asf/pdfbox/trunk/examples/src/main/Java/org/Apache/pdfbox/examples/signature/CreateSignature.Java

それはよりよく文書化され、最新に保たれています。

7
ThomasCh