如何在生成的PDF文件中禁用打印选项?

时间:2019-06-27 08:23:52

标签: jasper-reports export-to-pdf

当我生成带有jasper报告的PDF时,我不希望用户能够打印它。

是否可以从代码中进行选择,还是仅依赖于可视化程序(Web浏览器,adobe等)。

1 个答案:

答案 0 :(得分:1)

如果要从Java导出,则可以使用jrxml属性或将值设置为SimplePdfExporterConfiguration来实现。

要保护您的pdf文档(在这种情况下,不允许打印),首先要做的是对其进行加密,并确保在类路径中具有用于加密的必要的库,请参见How to configure PDF encryption in JasperReports Server 5.6.1

jrxml属性

<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"/>

java代码

SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
configuration.setEncrypted(true);
configuration.set128BitKey(true);
configuration.setOwnerPassword("1234"); 
  

请注意,我们设置的所有者密码不是用户密码,因此允许用户打开而无需密码。

现在设置用户权限

net.sf.jasperreports.export.pdf.permissions.allowed

就您而言,我想您只希望允许屏幕阅读器,如果您还希望允许COPY或其他操作(请参见上面的链接),请在属性中添加|

jrxml属性

<property name="net.sf.jasperreports.export.pdf.permissions.allowed" value="SCREENREADERS"/>

java代码

configuration.setPermissions(PdfWriter.ALLOW_SCREENREADERS);
  

注意::阅读器/应用程序应尊重许可,因此开发人员可以随时打开并处理任何PDF文档。例如,iText包含一个标记unethicalreading,如果将其设置为true,您将可以让所有者在不知道密码的情况下访问这些文档。