我们的客户喜欢 Jasper 查看器,但我们遇到了问题。它将数据导出为几种不同的格式(PDF、Excel、CSV、HTML 等),但我们的客户只想导出为 PDF。
我们如何自定义 Jasper 查看器,以便我们的用户可以选择导出数据的唯一格式是 PDF?
我们的客户喜欢 Jasper 查看器,但我们遇到了问题。它将数据导出为几种不同的格式(PDF、Excel、CSV、HTML 等),但我们的客户只想导出为 PDF。
我们如何自定义 Jasper 查看器,以便我们的用户可以选择导出数据的唯一格式是 PDF?
我找到了一个解决方案,在我看来这很糟糕,但可以解决我的问题。
好吧:阅读 JasperViewer 类的源代码,我在该类上找到了一个名为 viewer 的受保护字段。
所以,我所要做的就是编写这样的代码:
Field jrViewerField;
try {
jrViewerField = viewer.getClass().getDeclaredField("viewer");
jrViewerField.setAccessible(true);
JRViewer jrViewer = (JRViewer) jrViewerField.get(viewer);
List<JRSaveContributor> savers = new ArrayList<JRSaveContributor>();
for (JRSaveContributor sc : jrViewer.getSaveContributors()) {
savers.add(sc);
}
for (JRSaveContributor sc : savers) {
if (! sc.getClass().getName().toLowerCase().contains("pdf")) {
jrViewer.removeSaveContributor(sc);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
这不是一个漂亮的解决方案,但至少它适用于 Jasper Reports 的 3.7.1 版本。它没有可能与其他版本的系统一起使用的保证,因此我强烈建议任何人使用此解决方案,除非这是您的最后一个资源。
为什么不设置只允许 PDF 的 SaveContributor?例如。JRPDFSaveContributor。
JRViewer viewer = new JRViewer(jrPrint);
viewer.setSaveContributors(new JRSaveContributor[] { new JRPdfSaveContributor(Locale.getDefault(), null) });
从 \apache-tomcat-7.0.12\webapps\jasperserver\WEB-INF\flows 打开 viewReportsBean.xml
继续向下滚动到文档末尾,您将看到以下几行
<entry key="pdf" value-ref="pdfExporterConfiguration"/>
<entry key="xls" value-ref="xlsExporterConfiguration"/>
<entry key="csv" value-ref="csvExporterConfiguration"/>
<entry key="docx" value-ref="docxExporterConfiguration"/>
<entry key="rtf" value-ref="rtfExporterConfiguration"/>
<entry key="swf" value-ref="swfExporterConfiguration"/>
<entry key="odt" value-ref="odtExporterConfiguration"/>
<entry key="ods" value-ref="odsExporterConfiguration"/>
<entry key="xlsx" value-ref="xlsxExporterConfiguration"/>
<!-- entry key="txt" value-ref="txtExporterConfiguration"/
</util:map>
只需添加一个评论标签来禁用它们,你就完成了!快乐的编码...
<entry key="pdf" value-ref="pdfExporterConfiguration"/>
<!-- <entry key="xls" value-ref="xlsExporterConfiguration"/> -->
<!--<entry key="csv" value-ref="csvExporterConfiguration"/> -->
<!--<entry key="docx" value-ref="docxExporterConfiguration"/> -->
<!--<entry key="rtf" value-ref="rtfExporterConfiguration"/> -->
<!--<entry key="swf" value-ref="swfExporterConfiguration"/> -->
<!--<entry key="odt" value-ref="odtExporterConfiguration"/> -->
<!--<entry key="ods" value-ref="odsExporterConfiguration"/> -->
<!--<entry key="xlsx" value-ref="xlsxExporterConfiguration"/> -->
<!-- entry key="txt" value-ref="txtExporterConfiguration"/-->
</util:map>