2017-10-18 236 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。