Jasper reports 生成密码保护的pdf。如何为每个用户获取唯一的密码?

Jasper reports 生成密码保护的pdf。如何为每个用户获取唯一的密码?,jasper-reports,password-protection,jasperserver,export-to-pdf,Jasper Reports,Password Protection,Jasperserver,Export To Pdf,我已经在JasperServer上上传了我的报告,在那里我正在安排报告,并使用jobs rest api将pdf作为电子邮件附件发送给用户。一切都很完美,但是我们也需要对pdf进行加密。我已经阅读了,并且能够加密pdf 但我们希望密码是动态的,并且每个用户的密码都不同(对于exmaple来说,密码是他们的电话号码和出生日期的某种组合)。链接中描述的示例将密码指定为jrxml中的报表属性 密码被指定为字符串,并且对于从此jrxml生成的每个pdf都类似 我试过这样的东西 其中$F{date

我已经在JasperServer上上传了我的报告,在那里我正在安排报告,并使用jobs rest api将pdf作为电子邮件附件发送给用户。一切都很完美,但是我们也需要对pdf进行加密。我已经阅读了,并且能够加密pdf

但我们希望密码是动态的,并且每个用户的密码都不同(对于exmaple来说,密码是他们的电话号码和出生日期的某种组合)。链接中描述的示例将密码指定为jrxml中的报表属性


密码被指定为字符串,并且对于从此jrxml生成的每个pdf都类似

我试过这样的东西


其中$F{dateOfBirth}是正在为其运行查询的用户的dateOfBirth。但它没有输入字段值,而是将其视为字符串,并将密码设置为=“{$F{dateOfBirth}”

我该怎么做?他们有没有办法让我为每个用户设置不同的密码


注意:数据源是为jasperserver上的报告配置的。在作业执行api调用中,Jasperserver执行查询、填写报告、导出为pdf并将其作为电子邮件发送给用户。

如前所述,只需使用Java即可

下面是一个示例,我将如何编写此代码(它并不完美,但我认为您会得到它):

将这个小片段打包到jar中,将其添加到Studio构建路径中,并将其上载到Jaspersoft服务器

在报告大纲中,右键单击Scriptlet->“创建Scriptlet” scriptlet的类是GetBirthdayScriptlet(这是codesnippet类)

要在报告中使用的表达式为:

$P{>>scriptlet-name<<_SCRIPTLET}.getBirthday("email@example.com")

$P{>>scriptlet name

在Java代码中添加以下代码

JasperPrint print=JasperFillManager.fillReport(jasper,参数,beanColDataSource2); print.setProperty(“net.sf.jasperreports.export.pdf.user.password”,“jasper123”);

插件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.permissions.allowed" value="PRINTING" 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.permissions.allowed”value=“打印”
@DaveJarvis感谢您的回答Davis!尽管如前所述,我无法使用Java代码设置值,因为报告由JasperServer在作业执行rest api调用()时运行并使用为报表配置的数据源。此外,关于propertyExpressions,我认为这些用于设置文本字段和pdf加密属性等元素的属性。无论如何,我会尝试一下并让您知道。干杯!@Dave我尝试了propertyExpressions,但没有使用Jasperserver不接受jrxml。它不起作用。是否有人对其jrxml使用过动态密码?您是否有机会在生成PDF后但在通过网络发送之前对其执行操作?否,作业执行rest api执行报告,将其导出为PDF并将其作为附件发送。1)您可以修改JasperReports库2)您可以修改JR服务器的代码3)您可以添加post Handler谢谢您的回答!尽管我也尝试过使用Scriptlet。我遇到的问题是在哪里使用密码参数值,即在哪里放置$P{>>scriptlet namesscriptlet name此外,用户通过作业执行rest api指定查询参数email@example.com美元/便士{>>scriptlet name如果您想在属性中使用表达式,只需在元素中使用
,因为编译器在设置报表属性之前没有创建任何参数。这通常可以正常工作,但正如我刚刚发现的,export.pdf.user.password是极少数不起作用的情况之一。现在我不知道了I don’我没有找到解决这个问题的方法……无论如何,谢谢你的帮助!!我已经发布了另一个问题,我还没有得到答案。请你看一下,看看你是否能帮上忙。 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.permissions.allowed" value="PRINTING"