Alinhamento de campos de Arquivos Tipo CSV

4 respostas
robson.java

Olá Pessoal,

Tenho um jrxml que pode ser exportado através do jsp em três tipos: PDF, XLS e CSV.

Está exportando perfeitamente os arquivos tipo PDF e XLS, porem quando tento exportar o arquivo tipo CSV o arquivo sai com os campos todos desalinhados, visto que é o mesmo jrxml, na minha opnião deveria sair com a mesma formatação dos outros arquivos (PDF e XLS), alguem sabe como posso resolver esse problema?

Obrigado.

Fontes:

/**
     * Exporta para CSV.
     */
    public static void csv(JasperReport jr, Map params, JRDataSource dataSource,
            HttpServletResponse response) throws JRException, IOException {


    	JasperPrint print = JasperFillManager.fillReport(jr, params, dataSource);
		response.setContentType("application/x-download");
		response.setHeader( "Content-Disposition", "attachment; filename=report.txt");

        OutputStream oStream = null;
        try {

            oStream = response.getOutputStream();

            JRCsvExporter csvExporter = new JRCsvExporter();
            csvExporter.setParameter(JRCsvExporterParameter.JASPER_PRINT, print);
            csvExporter.setParameter(JRCsvExporterParameter.OUTPUT_STREAM, oStream);


           	csvExporter.exportReport();

        } finally {
            if (oStream != null) {
                oStream.close();
            }
        }
    }
/**
     * Exporta para XLS.
     */
    public static void xls(JasperReport jr, Map params, JRDataSource dataSource,
            HttpServletResponse response) throws JRException, IOException {

        JasperPrint print = JasperFillManager.fillReport(jr, params, dataSource);
		response.setContentType(ExportTool.EXCEL1_MIME);
		response.setHeader( "Content-disposition", "attachment; filename=report.xls");

	    OutputStream oStream = null;
	    try {
			oStream = response.getOutputStream();

			JRXlsExporter exporterXLS = new JRXlsExporter();
			exporterXLS.setParameter(JRExporterParameter.JASPER_PRINT, print);
			exporterXLS.setParameter(JRExporterParameter.OUTPUT_STREAM, oStream);
			exporterXLS.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
			exporterXLS.setParameter(JRXlsExporterParameter.IS_AUTO_DETECT_CELL_TYPE, Boolean.FALSE);
			exporterXLS.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.TRUE);
			exporterXLS.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.FALSE);
			exporterXLS.exportReport();

	     } finally {
	         if (oStream != null) {
	             oStream.close();
	         }
	     }
    }
/**
     * Exporta para PDF.
     */
    public static void pdf(JasperReport jr, Map params, JRDataSource dataSource,
            HttpServletResponse response) throws JRException, IOException {

        JasperPrint print = JasperFillManager.fillReport(jr, params, dataSource);
	    byte[] buffer = JasperExportManager.exportReportToPdf(print);

        response.setContentType(ExportTool.PDF1_MIME);
        response.setContentLength(buffer.length);
        response.setHeader("Content-disposition", "attachment; filename=report.pdf");

        OutputStream oStream = null;
        try {
            oStream = response.getOutputStream();
            oStream.write(buffer, 0, buffer.length);
            oStream.flush();
        } finally {
            if (oStream != null) {
                oStream.close();
            }
        }
    }

4 Respostas

AugustoCSS

robson,
interessante, eu não conhecia essa opção de exportar pra xls, precisando já saberei como fazer.

mas sobre o csv, o q vc chama de alinhamento? é o posicionamento dos campos quando vc abre o arquivo com o bloco de notas por exemplo? acho que esse “desalinhamento” é o padrão do csv, visto que o que importa é a separação dos campos por ponto-e-vírgula. quando vc abre esse arquivo desalinhado com o excel ou com o openoffice, estará tudo em seu lugar.

robson.java

Exatamente Augusto, é o posicionamento dos campos quando vc abre o arquivo com o bloco de notas por exemplo.

Gostaria de saber se tem uma forma do mesmo ser exportado no formato CSV ou txt e ser aberto com algum programa de edição(WordPad, Notpad, EditPlus e etc) com os seus respectivos campos alinhados, da mesma forma do XLS ou PDF.

Obrigado.

cassio

Mas para csv ele teria que considerar o tamanho dos campos como largura fixa e, para os campos menores, preencher com espaços em branco… quando o csv fosse novamente lido pra, por exemplo, popular tabelas de um BD, vc teria que fazer um trim() em cada campo… Até onde eu sei isso foge um pouco da idéia do csv… Sem contar quando um campo de um registro está vazio, ai que vc não vai alinhar mesmo…

AugustoCSS

é, dá pra linhar como o amigo falou definindo um tamanho fixo pra cada campo, mas aí seria um arquivo tabulado, não um csv.
mas se é isso q vc precisa, cada caso é um caso…rs

Criado 17 de dezembro de 2006
Ultima resposta 17 de dez. de 2006
Respostas 4
Participantes 3