2017-10-18 234 views
0

我想用JasperReports和Java生成密碼保護的PDF文件。受密碼保護的PDF Jaspersoft

代碼如下:

jrPdfExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, path.concat(filename).concat(".pdf")); 
jrPdfExporter.setParameter(JRExporterParameter.JASPER_PRINT, jprint); 
jrPdfExporter.setParameter(JRPdfExporterParameter.OWNER_PASSWORD, "Bancosol123"); 
jrPdfExporter.setParameter(JRPdfExporterParameter.USER_PASSWORD, "Bancosol123"); 
jrPdfExporter.setParameter(JRPdfExporterParameter.IS_ENCRYPTED, Boolean.TRUE); 
jrPdfExporter.exportReport(); 

我利用iText 2.1.7生成PDF,它工作正常,但是當我包括密碼的一部分,我得到了錯誤

Caused by: java.lang.ClassNotFoundException: org.bouncycastle.asn1.DEREncodable

我包括以下兩個jar:

  • bcprov-jdk15on-1.47.jar
  • bcmail-jdk15on-1.47.jar

但問題仍未解決。我讀的地方它可能是一個兼容性問題的iText 2.1.7

所以我刪除的iText 2.1.7,其中包括的iText 5.3.2

現在我有以下錯誤

exception in thread "awt-eventqueue-0" java.lang.noclassdeffounderror: com/lowagie/text/documentexception

+0

爲什麼iText 5.3.2而不是iText 5.5.12? –

+0

'java.lang.noclassdeffounderror:com/lowagie/text/documentexception':這是可以預料的。您需要在所有導入語句中將'com.lowagie'替換爲'com.itextpdf'。 –

+0

_I read somewhere_ - 你在哪裏讀過的?編輯您的文章並添加鏈接。 –

回答

1

JasperReports的PDF世代是基於iText 2.1.7(至少當前版本,有一些JR版本使用5.x版本,但由於某種原因,這種改變已被恢復),實際上甚至是一個略有修補的變體。

因此,您很可能會希望繼續使用5.0.0以前版本的iText。

現在您應該意識到,那些舊的iText版本是針對同樣舊的BouncyCastle版本編寫的:JR iText 2.1.7版本中的Maven依賴信息指示使用BouncyCastle 1.38。

這也解釋了原始的錯誤信息,BC 1.38和1.47之間有很大的變化,尤其是版本1.47本身是BC API的一個主要變化。

所以你應該嘗試使用較早的BC版本,最好是1.38。