GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Imgem escura gerada no PDF


#1

Estou desenvolvendo uma aplicacao e quando eu gero o relatorio, a imagem criada apartir do JFreechart esta saindo escura no PDF. No visualizador do jasper ela sai perfeita, mas quando eu crio o pdf ela sai toda escura. Alguem sabe o que pode ser isso?




#2

Teria o codigo para ver como vc manda a imagem para o Jasper?

N está sendo setada nenhuma cor de fundo no Ireport para a imagem?

Sua versao do Adobe Pdf é recente?


#3

Esse é o código que eu uso para gerar o pdf. A imagem no visualizador fica perfeita. O erro so ocorre no pdf gerado.

	public void geraRelatorio(Map<String, RespostaQuestaoBean> resp, String caminhoArquivoPDF){
		try {
			Map<String, Object> params = new HashMap<String, Object>();
			JRBeanCollectionDataSource listaDataSources = null;
			String reportSource = "";
			params.put("enderecoSubRelatorio1", "Relatorios/GruposRelatorio.jasper");
			Double percentagens[] = new Double[2];
			Integer totais[] = new Integer[2];
			Integer quantidadeRespostas[] = new Integer[3];
			try{
					List<InformacoesRelatorio> listAll = hashMapRespostasToListRelatorios(resp, percentagens);
					BufferedImage imagem = gerarGraficoBarraVertical("Avaliação da Visualização da Informação em EIS", "Grupo de Questões", "Quantidade", listAll);
					params.put("imagem", imagem);
					obtemValoresDePercentagemETotais(percentagens, totais, quantidadeRespostas, listAll);
					listaDataSources = new JRBeanCollectionDataSource(listAll);
					params.put("resultados", listaDataSources);
					params.put("percentualConformeAplicavel", percentagens[0]);
					params.put("percentualNaoConformesAplicavel", percentagens[1]);
					params.put("totalQuestoesAnalisadas", totais[0]);
					params.put("totalQuestoesAplicaveis", totais[1]);
					params.put("totalQuestoesConformes", quantidadeRespostas[0]);
					params.put("totalQuestoesNaoConforme", quantidadeRespostas[1]);
					params.put("totalQuestoesNaoAplicaveis", quantidadeRespostas[2]);
					reportSource += "Avaliacao.jasper";
					JREmptyDataSource ED = new JREmptyDataSource();
					JasperPrint jasperPrint = JasperFillManager.fillReport("Relatorios/" +reportSource, params, ED);
					JasperViewer.viewReport(jasperPrint);
					JasperExportManager.exportReportToPdfFile(jasperPrint, caminhoArquivoPDF);	
			}catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} catch (Exception e) {
			System.out.println("Erro ao gerar o Relatorio. Verifique se existe relatorio ja aberto.");
			e.printStackTrace();
		}  
	}

Esse é o código que gera o grafico. Eu retorno um BuffereImage e envio esse buf para o relatorio

	/**
     * Gera um gráfico de barras Vertical
     */
    public static BufferedImage gerarGraficoBarraVertical(String tituloGrafico, String
                tituloEixoX, String tituloEixoY, List<InformacoesRelatorio> arrayValores)throws Exception {
        BufferedImage buf = null;
        try {
            DefaultCategoryDataset defaultCategoryDataset = new DefaultCategoryDataset();
            Iterator iterator = arrayValores.iterator();
            while (iterator.hasNext()) {
            	InformacoesRelatorio modelo = (InformacoesRelatorio) iterator.next();
                defaultCategoryDataset.addValue(modelo.getQuestoesConformes().intValue(),
                                    "Sim", modelo.getNomeGrupo());
                defaultCategoryDataset.addValue(modelo.getQuestoesNaoConforme().intValue(),
                        "Não", modelo.getNomeGrupo());
                defaultCategoryDataset.addValue(modelo.getQuestoesNaoAplicaveis().intValue(),
                        "Não Se Aplica", modelo.getNomeGrupo());
            }
            JFreeChart chart = ChartFactory.createBarChart(tituloGrafico, tituloEixoX,
        tituloEixoY, defaultCategoryDataset, PlotOrientation.VERTICAL, true, false, false);
            chart.setBorderVisible(true);
            chart.setBorderPaint(Color.black);
         // get a reference to the plot for further customisation...
            final CategoryPlot plot = chart.getCategoryPlot();
            final CategoryAxis domainAxis = plot.getDomainAxis();
            plot.setBackgroundPaint(Color.lightGray);
         // Seta a quantidade de linhas para quebra da label    
            plot.getDomainAxis().setMaximumCategoryLabelLines(5);
            //Seta a Fonte/tamanho das labels:  Tamanho 5, SansSerif  
            CategoryItemRenderer renderer = plot.getRenderer();  
            renderer.setBaseItemLabelFont(new Font("SansSerif", Font.PLAIN, 1)); 
            buf = chart.createBufferedImage(400, 250);
        } catch (Exception e) {
            throw new Exception(e);
        }
        return buf;
    }

Eu nao setei nenhuma cor de fundo explicitamente para a imagem no IReport. A minha versao do Adobe é a Adobe Reader 9. Mas esse problema ocorre tambem no foxit reader.

Obrigado pela atenção


#4

Eu nunca mexi especificamente com JfreeChart.

Mas eu vi q vc seta uma borda como "black" e plot.setBackgroundPaint(Color.lightGray), tente alterar estes valores para branco e veja se resolve.

O problema muito provavel não está no Ireport e sim na maneira como voce esta gerando a Imagem, se tiver está duvida, gere a imagem em um diretorio e veja se ela aparece diferente do que aparece no Ireport.

Abraço


#5