iReport imprime totalmente diferente do que está na tela (imprime tudo como se fosse com zoom)

0 respostas
M

Pessoal, boa tarde.

Eu não sei o que fazer mais. Isso está acontecendo em alguns modelos de impressoras apenas.
Na tela, o relatório é normal, foi montado num A4 no Ireport, perfeito.
Porém quando se clica em Imprimir tanto na visualização do relatório como imprimindo direto, alguns modelos de impressoras imprimem como se o relatório estivesse com zoom, ou seja, tudo absurdamente enorme.
Já foi reinstalado o driver da máquina do cliente, inclusive formatado. E nada de resolver. Não faço ideia do que pode ser…
Alguém já passou por isso?

Segue o método que invoca o relatório, clicando num dos botões: Visualizar, Exportar para PDF, Exportar para HTML ou Imprimir (Direto)

private void imprimirRelatorio(String acao) {
        try {
            InputStream inputStream = null;
            conexao = ConexaoMysql.recuperarConexao();
            HashMap parametros = new HashMap();

            inputStream = getClass().getClassLoader().getResourceAsStream("automacao/fonterelatorio/ListagemCategoria.jasper");
            
            parametros.put("CODIGO_EMPRESA", MenuPrincipal.retornarEmpresaAtiva().getCodigo());
            parametros.put("NOME_RELATORIO", "LISTAGEM DE CATEGORIA");
            parametros.put("RODAPE_PROPAGANDA", "SSF SISTEMAS");
            parametros.put("NOME_CATEGORIA", "%" + txtPesquisa.getText() + "%");
            parametros.put("SUBREPORT_DIR", "automacao/fonterelatorio/");
            
            GerenciadorRelatorio gerenciadorRelatorio = new GerenciadorRelatorio();
            gerenciadorRelatorio.montarRelatorio(inputStream, parametros, conexao);
            
            SimpleDateFormat formatadorData = new SimpleDateFormat("dd/MM/yyyy");
            SimpleDateFormat formatadorHora = new SimpleDateFormat("hh:mm:ss");
            
            Date dataHoje = new Date();
            
            String nomeArquivo = "RelatorioCategoria" + formatadorData.format(dataHoje).replace("/", "") + formatadorHora.format(dataHoje).replace(":", "");
            
            switch(acao){
                case "Visualizar":
                    gerenciadorRelatorio.abrirRelatorioFrame("RELATÓRIO DE CATEGORIA");
                    break;
                case "Exportar para PDF":
                    gerenciadorRelatorio.exportaRelatorioParaPdf(Util.selecionarCaminhoSalvarImpressao()+ "/" + nomeArquivo + ".pdf");
                    Alerta.mensagemSucessoExportarRelatorio(this);
                    break;
                case "Exportar para HTML":
                    gerenciadorRelatorio.exportaRelatorioParaHTML(Util.selecionarCaminhoSalvarImpressao()+ "/" + nomeArquivo + ".html");
                    Alerta.mensagemSucessoExportarRelatorio(this);
                    break;
                case "Imprimir":
                    gerenciadorRelatorio.impressaoDireta();
                    break;
            }
            
        } catch (JRException ex) {
            Alerta.mensagemErroSistema(this, "Erro ao processar relatório \n" + ex.getMessage());
        } finally {
            try {
                ConexaoMysql.fecharConexao(conexao);
            } catch (Exception ex) {
            }
        }
    }

E como base eu encontrei uma classe aqui no GUJ, que eu montei com o nome de GerenciadorRelatorio.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package automacao.util;

import java.awt.BorderLayout;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Map;
import javax.swing.JFrame;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperPrintManager;
import net.sf.jasperreports.view.JRViewer;

/**
 *
 * @author Marcos
 */
public class GerenciadorRelatorio {

    
    private JasperPrint print;
    
    /**
     * Abre um relatório usando uma conexão como datasource.
     *
     * @param titulo Título usado na janela do relatório.
     * @param inputStream InputStream que contém o relatório.
     * @param parametros Parâmetros utilizados pelo relatório.
     * @param conexao Conexão utilizada para a execução da query.
     * @throws JRException Caso ocorra algum problema na execução do relatório
     */
    public void montarRelatorio(
            InputStream inputStream,
            Map parametros,
            Connection conexao) throws JRException {

        /*
         * Cria um JasperPrint, que é a versão preenchida do relatório,
         * usando uma conexão.
         */
        print = JasperFillManager.fillReport(
                inputStream, parametros, conexao);
    }

    /**
     * Cria um JFrame para exibir o relatório representado pelo JasperPrint.
     *
     * @param titulo Título do JFrame.
     * @param print JasperPrint do relatório.
     */
    public void abrirRelatorioFrame(String titulo) {

        /*
         * Cria um JRViewer para exibir o relatório.
         * Um JRViewer é uma JPanel.
         */
        JRViewer viewer = new JRViewer(print);

        // cria o JFrame
        JFrame frameRelatorio = new JFrame(titulo);

        // adiciona o JRViewer no JFrame
        frameRelatorio.add(viewer, BorderLayout.CENTER);

        // configura o tamanho padrão do JFrame
        frameRelatorio.setSize(500, 500);

        // maximiza o JFrame para ocupar a tela toda.
        frameRelatorio.setExtendedState(JFrame.MAXIMIZED_BOTH);

        // configura a operação padrão quando o JFrame for fechado.
        frameRelatorio.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        // exibe o JFrame
        frameRelatorio.setVisible(true);

    }
    
    public void exportaRelatorioParaPdf(String caminhoDestino) throws JRException {
        JasperExportManager.exportReportToPdfFile(print, caminhoDestino);
    }
    
    public void exportaRelatorioParaHTML(String caminhoDestino) throws JRException {
        JasperExportManager.exportReportToHtmlFile(print, caminhoDestino);
    }
    
    public void impressaoDireta() throws JRException {
        JasperPrintManager.printReport(print, true);
    }
    
}

Se alguém conseguir me ajudar, ficarei muito feliz.
Muito obrigado!

Criado 21 de janeiro de 2013
Respostas 0
Participantes 1