2015-07-19 92 views
1

我從下面的鏈接中找到了這個例子。我有問題,因爲我無法讓編譯器找到CMSProcessableInputStream類。Java編譯器找不到bouncycastle的CMSProcessableInputStream

有沒有人有任何建議?

https://apache.googlesource.com/pdfbox/+/5f032354760374773f7339bbad2678d3281e90ee/examples/src/main/java/org/apache/pdfbox/examples/signature/CreateVisibleSignature.java

這是我的pom.xml的一個片段:

 <dependency> 
     <groupId>org.apache.pdfbox</groupId> 
     <artifactId>pdfbox</artifactId> 
     <version>1.8.9</version> 
    </dependency> 
    <dependency> 
    <groupId>com.itextpdf</groupId> 
    <artifactId>itextpdf</artifactId> 
    <version>5.5.6</version> 
    </dependency> 
    <dependency> 
     <groupId>org.bouncycastle</groupId> 
     <artifactId>bcpg-jdk16</artifactId> 
     <version>1.46</version> 
    </dependency> 
    <dependency> 
     <groupId>org.bouncycastle</groupId> 
     <artifactId>bcprov-jdk16</artifactId> 
     <version>1.46</version> 
    </dependency> 
    <dependency> 
     <groupId>org.bouncycastle</groupId> 
     <artifactId>bcmail-jdk16</artifactId> 
     <version>1.46</version> 
    </dependency> 
    <dependency> 
     <groupId>org.bouncycastle</groupId> 
     <artifactId>bcprov-ext-jdk16</artifactId> 
     <version>1.46</version> 
    </dependency> 

這是代碼:

@Override 
public byte[] sign(InputStream content) throws SignatureException, 
     IOException { 
    CMSProcessableInputStream input = new CMSProcessableInputStream(content); 
    CMSSignedDataGenerator gen = new CMSSignedDataGenerator(); 
    // CertificateChain 
    List<Certificate> certList = Arrays.asList(cert); 
    CertStore certStore = null; 
    try { 
     certStore = CertStore.getInstance("Collection", 
       new CollectionCertStoreParameters(certList), provider); 
     gen.addSigner(privKey, (X509Certificate) certList.get(0), 
       CMSSignedGenerator.DIGEST_SHA256); 
     gen.addCertificatesAndCRLs(certStore); 
     CMSSignedData signedData = gen.generate(input, false, provider); 
     return signedData.getEncoded(); 
    } catch (Exception e) { 
     // should be handled 
     System.err.println("Error while creating pkcs7 signature."); 
     e.printStackTrace(); 
    } 
    throw new RuntimeException("Problem while preparing signature"); 
} 

回答

1

1. 的CMSProcessableInputStream類是CreateSignature類的一部分(沒有「可見」一詞),它位於相同的包中,您可以在PDFBox的源代碼下載中找到它。在這裏獲取: https://pdfbox.apache.org/downloads.html#recent 並點擊「pdfbox-1.8.9-src.zip」,然後查找pdfbox-1.8.9 \ examples \ src \ main \ java \ org \ apache \ pdfbox \ examples \ signature \在zip文件中創建Signature.java。

2. 的1.8.9版本PDFBox的的使用BC版本1.44,as shown on the official website

<dependency> 
    <groupId>org.bouncycastle</groupId> 
    <artifactId>bcprov-jdk15</artifactId> 
    <version>1.44</version> 
</dependency> 
<dependency> 
    <groupId>org.bouncycastle</groupId> 
    <artifactId>bcmail-jdk15</artifactId> 
    <version>1.44</version> 
</dependency> 

另一種解決方案是使用PDFBOX應用內,其具有內BC。

一般提示:使用您在谷歌上找到的源代碼需要您自擔風險。你不知道它是什麼版本,或者它是否正確。先試着看官方網站。

+0

嗨蒂爾曼,我剛試過,但我仍然得到同樣的編譯錯誤。 – DenisMP

+0

@DenisMP對不起,我意識到我的答案毫無價值。我已經做了更多的研究,希望這會有所幫助。 –

+0

三倍贊成你的*一般提示*。 – mkl