Relatório Jasper: Como personalizar o JasperViewer para que ele só pudesse exportar em um formato?

StackOverflow https://stackoverflow.com/questions/2586579

  •  24-09-2019
  •  | 
  •  

Pergunta

Nosso cliente está amando o espectador Jasper, mas temos um problema. Ele exporta dados para vários formatos diferentes (PDF, Excel, CSV, HTML, etc.), mas nosso cliente só deseja exportar para o PDF.

Como podemos personalizar o visualizador Jasper para que o único formato que nossos usuários possam optar por exportar dados é PDF?

Foi útil?

Solução

Encontrei uma solução que, na minha opinião, é terrível, mas trabalhei no meu caso.

Bem: Lendo o código -fonte da classe JasperViewer, encontrei um campo protegido chamado Viewer nessa classe.

Então, tudo o que eu precisava fazer era escrever um código como este:

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

Não é uma solução bonita, mas pelo menos funcionou com a versão 3.7.1 do Jasper Reports. Ele não tem garantia que possa funcionar com outras versões do sistema, por isso desencorajo alguém a usar esta solução, apenas se esse for o seu último recurso.

Outras dicas

Por que não definir um produtor de SafeContributle que permite apenas PDFs? Por exemplo. O JRPDFSAVECONTRIBUTOR.

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

Open up viewReportsbean.xml de apache-tomcat-7.0.12 webApps jasserverver web-inf fluxos

Continue rolando para baixo até o final do documento, você verá as seguintes linhas

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

Basta adicionar uma etiqueta de comentário para desativá -los e pronto !! Codificação feliz ...

<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> 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top