代码之家  ›  专栏  ›  技术社区  ›  Kico Lobo

JasperReport:如何自定义JasperViewer,以便它只能以一种格式导出?

  •  3
  • Kico Lobo  · 技术社区  · 16 年前

    我们的客户很喜欢看碧玉的人,但我们有问题。它将数据导出为几种不同的格式(pdf、excel、csv、html等),但我们的客户只希望导出为pdf。

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

    3 回复  |  直到 16 年前
        1
  •  5
  •   Kico Lobo    16 年前

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

    嗯:在阅读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();
                } 
    

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

        2
  •  3
  •   Torsten    13 年前

    为什么不设置一个只允许pdf的savecontributor?例如,JRPDFsaveContributor。

        JRViewer viewer = new JRViewer(jrPrint);
        viewer.setSaveContributors(new JRSaveContributor[] { new JRPdfSaveContributor(Locale.getDefault(), null) });
    
        3
  •  0
  •   Vinoth    15 年前

    从\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> 
    
    推荐文章