3

我们的客户喜欢 Jasper 查看器,但我们遇到了问题。它将数据导出为几种不同的格式(PDF、Excel、CSV、HTML 等),但我们的客户只想导出为 PDF。

我们如何自定义 Jasper 查看器,以便我们的用户可以选择导出数据的唯一格式是 PDF?

4

3 回答 3

5

我找到了一个解决方案,在我看来这很糟糕,但可以解决我的问题。

好吧:阅读 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 版本。它没有可能与其他版本的系统一起使用的保证,因此我强烈建议任何人使用此解决方案,除非这是您的最后一个资源。

于 2010-04-08T12:34:59.377 回答
3

为什么不设置只允许 PDF 的 SaveContributor?例如。JRPDFSaveContributor。

    JRViewer viewer = new JRViewer(jrPrint);
    viewer.setSaveContributors(new JRSaveContributor[] { new JRPdfSaveContributor(Locale.getDefault(), null) });
于 2012-10-31T13:15:44.347 回答
0

从 \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> 
于 2011-04-22T04:27:02.763 回答