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

How to disable options as printing in generated PDF file?

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

是否有一些选项可以从代码中生成它,还是仅取决于可视化它的程序(网络浏览器、adobe 等)。

如果您要从 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"); 

Note we are setting owner password not user password, hence user will be allowed to open without.

现在设置用户权限

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

在你的情况下,我猜你只喜欢允许屏幕阅读器,如果你还想允许 COPY 或其他操作(参见上面的 link),请将这些 | 添加到你的属性中

jrxml 属性

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

java代码

configuration.setPermissions(PdfWriter.ALLOW_SCREENREADERS);

Notice: it is up to the reader/application to respect the permission, hence a developer can always open and do what they want with any PDF document. As example iText contains a flag unethicalreading, if you set it to true, you will be able to have owner access to these documents without knowing the password.