You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何禁用JasperReports生成PDF文件中的文本复制功能

问题解决步骤

1. 修复加密依赖版本冲突

你当前使用的bcprov-jdk14-139.jar版本过老,和JasperReports 6.9.0存在兼容性问题,按以下方式调整依赖:

  • 移除现有bcprov-jdk14-139.jar
  • 引入bcprov-jdk15on-1.60.jar,确保服务器类路径下只有一个版本的BouncyCastle包,避免多版本冲突
  • 若使用Maven管理项目,确认BouncyCastle依赖的scope没有设为provided,避免打包时被排除

2. 补全JRXML配置

你当前的配置缺失了用户密码项,JasperReports的PDF加密逻辑要求必须同时配置owner密码和user密码(user密码可设为空)才能触发权限校验,完整配置如下:

<property name="net.sf.jasperreports.export.pdf.encrypted" value="true"/>
<property name="net.sf.jasperreports.export.pdf.128.bit.key" value="true"/>
<property name="net.sf.jasperreports.export.pdf.owner.password" value="12345"/>
<property name="net.sf.jasperreports.export.pdf.user.password" value=""/>
<property name="net.sf.jasperreports.export.pdf.permissions.allowed" value="SCREENREADERS"/>

permissions.allowed仅保留SCREENREADERS的配置是正确的,其余所有权限(包括文本复制、修改、打印等)都会被默认禁止。

3. 校验Java导出代码的优先级

如果是通过Java代码触发导出,需要确认导出配置没有覆盖JRXML中的属性,代码中正确的加密配置示例如下:

// 初始化PDF导出器
JRPdfExporter exporter = new JRPdfExporter();
// 配置PDF导出参数
SimplePdfExporterConfiguration pdfConfig = new SimplePdfExporterConfiguration();
pdfConfig.setEncrypted(true);
pdfConfig.set128BitKey(true);
pdfConfig.setOwnerPassword("12345");
pdfConfig.setUserPassword("");
pdfConfig.setPermissionsAllowed(PdfPermissions.SCREENREADERS);
exporter.setConfiguration(pdfConfig);
// 其余导出逻辑省略

4. 用官方阅读器测试验证

部分第三方PDF阅读器会默认绕过PDF权限校验,测试时请使用官方Adobe Acrobat Reader打开生成的PDF,确认复制功能是否被禁用。

内容的提问来源于stack exchange,提问作者Jesús Martín

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:15:01