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!