我正在尝试使用 JasperReports 和Java生成受密码保护的PDF文件。
代码如下:
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,它工作正常,但当我包含密码部分时,我收到了错误
引起:java.lang.ClassNotFoundException:org.bouncycastle.asn1.DEREncodable
我包括以下两个罐子:
bcprov-jdk15on-1.47.jar
bcmail-jdk15on-1.47.jar
但问题仍未解决。我在某处看到它可能与iText 2.1.7的兼容性问题
所以我删除了iText 2.1.7并包含了iText 5.3.2
现在我有以下错误
线程中的异常“awt-eventqueue-0”java.lang.noclassdeffounderror:com / lowagie / text / documentexception
答案 0 :(得分:1)
JasperReports PDF生成基于iText 2.1.7(至少是当前版本,有些JR版本使用的是5.x版本,但由于某种原因,此更改已被还原),实际上甚至是一个略有修补的变体。
因此,您很可能希望继续使用5.0M之前版本的iText。
现在您应该知道那些旧的iText版本是针对同样旧的BouncyCastle版本编写的:JR iText 2.1.7版本中的Maven依赖关系信息表明使用了BouncyCastle 1.38。
这也解释了原始错误消息,BC 1.38和1.47之间存在实质性变化,特别是版本1.47本身是BC API的重大变化。
所以你应该尝试较旧的BC版本,最好是1.38。