java - 受密码保护的 PDF Jaspersoft

标签 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,它工作正常,但是当我包含密码部分时,出现错误

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

最佳答案

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。

关于java - 受密码保护的 PDF Jaspersoft,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46806329/

相关文章:

java - 使用 Java 修改 XML 中的一些字段的最佳方法是什么

java - 尝试使用 Java 打印 JasperReports 报告时,Tomcat Apache 服务器在尝试再次查看报告时关闭

java - java中如何计算一个段落的行数?

java - itext7,html转pdf无法换行长英文单词或长数字

java - 将 JScrollBar/JScrollPane 添加到此 JTextPane 时遇到问题

java - 使用 ReadOnlyPDOMProvider 导入索引内容

java - 如何在 JasperReports 中从 Java 向报表传递多个参数并导出为 PDF

java - 如何使用JasperResports中的结果集作为数据源?

java - iText 中的 setMargins 方法是否有效?

java - JAVA多线程中的同步和对象锁