密码保护的PDF Jaspersoft

时间:2017-10-18 08:57:13

标签: java jasper-reports itext password-protection export-to-pdf

我正在尝试使用 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

1 个答案:

答案 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。