Pessoal, estou com um problema de arquitetura e gostaria de uma ajuda. É o seguinte:
Eu tenho uma classe que imprime direto na impressora padrão, funciona localmente blz, segue o código:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* Impressao.java
*
* Created on 07/03/2012, 14:54:13
*/
package applet;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.FontKey;
import net.sf.jasperreports.engine.export.JRPrintServiceExporter;
import net.sf.jasperreports.engine.export.JRPrintServiceExporterParameter;
import net.sf.jasperreports.engine.export.PdfFont;
/**
*
* @author user
*/
public class Impressao extends javax.swing.JApplet {
/** Initializes the applet Impressao */
public void init() {
try {
java.awt.EventQueue.invokeAndWait(new Runnable() {
public void run() {
initComponents();
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void mensagem(){
JOptionPane.showMessageDialog(this, "Eu sou um appletwewewe!","Título",JOptionPane.INFORMATION_MESSAGE);
}
/** This method is called from within the init() method to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jButton1 = new javax.swing.JButton();
jButton1.setText("click aqui!!");
jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
clickAqui(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(131, 131, 131)
.addComponent(jButton1)
.addContainerGap(186, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(119, 119, 119)
.addComponent(jButton1)
.addContainerGap(151, Short.MAX_VALUE))
);
}// </editor-fold>
//private String caminhoRelatorio = "C:\\Documents and Settings\\user\\Desktop\\build\\classes\\applet\\reciboEmprestimo.jasper";
private String caminhoRelatorio = "/home/user/NetBeansProjects/Applet/build/classes/applet/reciboEmprestimo.jasper";
public void gerarRelatorioEImprimir() {
List<ReciboEmprestimoBean> lista = new ArrayList<ReciboEmprestimoBean>();
ReciboEmprestimoBean recibo = new ReciboEmprestimoBean();
recibo.setAno("2001");
recibo.setBiblioteca("Biblioteca Central");
recibo.setClassificacao("769");
recibo.setCodigoBarras("22056");
recibo.setDataPrevistaDevolucao("23/03/2012");
recibo.setDataSaida("09/03/2012");
recibo.setEdicao("1");
recibo.setNomeUsuario("Deivid Landim");
recibo.setTitulo("Missão impossível");
recibo.setVolume("2");
JOptionPane.showMessageDialog(null, "Passou1");
lista.add(recibo);
HashMap parametros = new HashMap();
try {
//Lista todas impressoras até encontrar a enviada por parametro
//response.sen
JOptionPane.showMessageDialog(null, "Teste01");
InputStream inStream = new FileInputStream(caminhoRelatorio);
JOptionPane.showMessageDialog(null, inStream);
JRBeanCollectionDataSource jrDataSource = new JRBeanCollectionDataSource(lista);
if(lista.size() > 0){
JOptionPane.showMessageDialog(null, lista.get(0).getBiblioteca());
}
JOptionPane.showMessageDialog(null, jrDataSource);
JasperPrint print = JasperFillManager.fillReport(inStream, parametros, jrDataSource);
JOptionPane.showMessageDialog(null, "Teste4");
HashMap fontMap = new HashMap();
FontKey key = new FontKey("Courier", true, false);
PdfFont font = new PdfFont("COMICBD.TTF", "Cp1252", true);
fontMap.put(key, font);
JRExporter exporter = new JRPrintServiceExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
exporter.setParameter(JRExporterParameter.FONT_MAP, fontMap);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG, Boolean.FALSE);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, Boolean.TRUE);
exporter.exportReport();
} catch (JRException e) {
gerarExcessao(e);
} catch (Exception e) {
gerarExcessao(e);
}
}
public static void gerarExcessao(Exception e){
try {
JOptionPane.showMessageDialog(null, "ex01");
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
JOptionPane.showMessageDialog(null, "ex02");
JOptionPane.showMessageDialog(null, sw.toString());
sw.close();
pw.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
private void clickAqui(java.awt.event.MouseEvent evt) {
gerarRelatorioEImprimir();
// mensagem();
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
// End of variables declaration
}
Essa classe usa alguns jars que são eles:
jasperreports-3.0.0.jar
commons-logging-1.0.4.jar
commons-validator-1.3.1.jar
commons-beansutils-1.7.0.jar
commons-collections-3.2.jar
Esse projeto está sendo feito no netbeans.
O problema é o seguinte: Eu tenho que criar uma aplicação que imprime um comprovante
direto na impressora, mas tem que ser em um projeto web com tomcat e jsp, então a solução
que estou pensando é fazer com Applet, então como eu devo fazer para criar um jar e colocar em
uma página jsp para executar assim que acontecer a ação do botão.
Desde já agradeço.
Se alguém tiver outra solução que não seja com Applet, aceito sugestões.