Jasper Report:如何自定义JasperViewer使其只能以一种格式导出?

发布于 2024-08-28 09:01:09 字数 146 浏览 11 评论 0原文

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

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

our customer is loving the Jasper viewer, but we have a problem. It exports data to several different formats (PDF, Excel, CSV, HTML, etc.), but our customer only wants to export to PDF.

How can we customize the Jasper Viewer so that the only format which our users can choose to export data is PDF?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

北音执念 2024-09-04 09:01:10

从 \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> 

open up viewReportsBean.xml from \apache-tomcat-7.0.12\webapps\jasperserver\WEB-INF\flows

keep scrolling down to the end of the document you will see the following lines

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

just add a comment tag to disable them and you're done !! happy coding...

<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> 
溺深海 2024-09-04 09:01:09

我找到了一个解决方案,在我看来这很糟糕,但对我的情况有效。

好吧:阅读 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();
            } 

这不是一个漂亮的解决方案,但至少它可以与 3.7.1 版本的 Jasper Reports 一起使用。它不保证可以与其他版本的系统一起使用,因此我强烈建议任何人使用此解决方案,除非这是您最后的资源。

I've found a solution that, in my opinion is just terrible but worked on my case.

Well: reading the source code of the JasperViewer class, I found a protected field named viewer on that class.

So, all I had to do was write a code like this:

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();
            } 

It's not a beautiful solution, but at least it worked with the 3.7.1 version of Jasper Reports. It have NO WARRANTY that may work with another versions of the system, so I highly discourage anyone to use this solution, only if that is your last resource.

森林很绿却致人迷途 2024-09-04 09:01:09

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

    JRViewer viewer = new JRViewer(jrPrint);
    viewer.setSaveContributors(new JRSaveContributor[] { new JRPdfSaveContributor(Locale.getDefault(), null) });

Why not set a SaveContributor that only allows PDFs? E. g. the JRPdfSaveContributor.

    JRViewer viewer = new JRViewer(jrPrint);
    viewer.setSaveContributors(new JRSaveContributor[] { new JRPdfSaveContributor(Locale.getDefault(), null) });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文