Jasper Report:如何定制JasperViewer以便它只能以一种格式导出?

Kic*_*obo 3 java viewer jasper-reports

我们的客户喜欢Jasper观众,但我们遇到了问题.它将数据导出为多种不同的格式(PDF,Excel,CSV,HTML等),但我们的客户只想导出为PDF.

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

Kic*_*obo 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();
            } 
Run Code Online (Sandbox Code Playgroud)

这不是一个漂亮的解决方案,但至少它适用于Jasper Reports的3.7.1版本.它没有任何担保可能适用于该系统的其他版本,因此我强烈建议任何人使用此解决方案,只有这是您的最后一个资源.