Imprimir archivos en java

Aquí nuevamente te comento que ya arregle mi netbeans, desintalaciòn completa (así es a veces), luego instalación del jdk1.6, seteo de las siguientes variables de entorno:
JAVA_HOME
C:\Archivos de programa\Java\jdk1.6.0_20
JRE_HOME
C:\Archivos de programa\Java\jdk1.6.0_20
Path
C:\Archivos de programa\Java\jdk1.6.0_20\bin
CLASSPATH
C:\Archivos de programa\Java\jdk1.6.0_20\src.zip;C:\Archivos de programa\Java\jdk1.6.0_20\lib\tools.jar;C:\Archivos de programa\Java\jdk1.6.0_20\jre\lib\rt.jar;.
Y luego reinstalación del netbeans, ya pude probar el código y con un java aplication perfecto funciona de mil maravillas pero en una aplicación web nada que ver me da el siguiente error
Received 'java.awt.HeadlessException' when invoking action listener '#{AccesoAutorizadoBean.buttonsiPanel_processAction}' for component 'modalPnlOkButton'
java. ¿Awt. HeadlessException
tienes alguna idea de a que se deba esto?

1 Respuesta

Respuesta
1
No entiendo. Si estás haciendo una aplicación web, ¿cómo el error te puede dar en algo relacionado con un botón? Tendrías que haber eliminado de tu código todo lo referente a componentes gráficos, y usar el java. Awt. Desktop sin más. Nada de listeners. Si quieres, pásame el código y lo veo, pero como te decía, borra todo lo referente a componentes gráficos y listeners. No hacen falta. Estás programando un servlet o un Action de Struts o algo parecido, ¿no?
Estimado Experto te envío mi código la programación la estoy haciendo con JSF Managed Bean la parte del negocio y la parte de la presentación con xhtml con icefaces.
Aquí el código fuente del Bean hace algunas cosas más pero el botón que me importa a hora es el buttonImprimir_processAction
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ec.mil.ejercito.proceso.baking;
import com.icesoft.faces.component.ext.RowSelectorEvent;
import com.icesoft.faces.component.panelpopup.PanelPopup;
import com.icesoft.faces.context.effects.JavascriptContext;
import ec.mil.ejercito.comun.baking.BusquedaDocumentoBean;
import ec.mil.ejercito.siada.entity.RegistroAutorizacion;
import ec.mil.ejercito.siada.session.ConsultasFacadeRemote;
import ec.mil.ejercito.siada.session.ControlAccesoDocFacadeRemote;
import ec.mil.ejercito.siada.session.RegistroAutorizacionFacadeRemote;
import ec.mil.ejercito.siada.util.Funciones;
import java.awt.Desktop;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.ejb.EJB;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import java.io.*;
import javax.servlet.http.HttpServletRequest;
/**
 *
 * @author Joho
 */
public class AccesoAutorizadoBean  {
//    private Documento documento = new Documento();
//    private PeticionAutorizacion peticionautorizacion = new PeticionAutorizacion();
//    private List<Documento> ldocumento = new ArrayList<Documento>();
//    @EJB
//    private DocumentoFacadeRemote documentoFacade;
    private Integer contador = 0;
    @EJB
    private ConsultasFacadeRemote consultasFacade;
    private String cedula = null;
    private Funciones obmfun = new Funciones();
    private String mensajeg = "";
    private String mensaje = "";
    private String laccion = "";
    private RegistroAutorizacion registroautorizacion = new RegistroAutorizacion();
    private List<RegistroAutorizacion> lregistroautorizacion = new ArrayList<RegistroAutorizacion>();
    @EJB
    private RegistroAutorizacionFacadeRemote registroautorizacionFacade;
//    private List<PeticionAutorizacion> lpeticionautorizacion = new ArrayList<PeticionAutorizacion>();
//    @EJB
//    private PeticionAutorizacionFacadeRemote peticionautFacade;
    private boolean control = true;
    @EJB
    private ControlAccesoDocFacadeRemote controlaccesoFacade;
    private EnvioMail compenviomail = new EnvioMail();
    private boolean contenviomail = true;
    private String lpatharchivo = "";
    private String lmailenvio = "";
    Desktop impresion;
//<editor-fold defaultstate="collapsed" desc="GETTER Y SETTER">
    public String getLmailenvio() {
        return lmailenvio;
    }
    public void setLmailenvio(String lmailenvio) {
        this.lmailenvio = lmailenvio;
    }
    public String getLaccion() {
        return laccion;
    }
    public void setLaccion(String laccion) {
        this.laccion = laccion;
    }
    public String getMensaje() {
        return mensaje;
    }
    public void setMensaje(String mensaje) {
        this.mensaje = mensaje;
    }
    public String getMensajeg() {
        return mensajeg;
    }
    public void setMensajeg(String mensajeg) {
        this.mensajeg = mensajeg;
    }
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="DESPLIEGUE TABLA DOCUMENTO AUTORIZADO">
    public List<RegistroAutorizacion> getLregistroautorizacion() {
        if (control) {
            recuperaLista();
            control = false;
        }
        return lregistroautorizacion;
    }
    public void setLregistroautorizacion(List<RegistroAutorizacion> lregistroautorizacion) {
        this.lregistroautorizacion = lregistroautorizacion;
    }
    public RegistroAutorizacion getRegistroautorizacion() {
        return registroautorizacion;
    }
    public void setRegistroautorizacion(RegistroAutorizacion registroautorizacion) {
        this.registroautorizacion = registroautorizacion;
    }
    public void recuperaLista() {
        String sql = "";
        Date fecha = new Date();
        fecha = new java.sql.Date(fecha.getTime());
        sql = " o.rauAutorizado = 'S' and o.memAutorizado.memCedula = '" + cedula + "'and o.rauFechaCaducidad >=  ( '" + fecha + "') and ";
        lregistroautorizacion.clear();
        lregistroautorizacion = registroautorizacionFacade.findBySql(sql);
        sql = "";
    }
    public void rowSelector1_processAction(RowSelectorEvent rse) {
        try {
            int selectedRowIndex = rse.getRow();
            // documento = ldocumento.get(selectedRowIndex);
            registroautorizacion = lregistroautorizacion.get(selectedRowIndex);
            this.deshabilitarCancelar = false;
            if (registroautorizacion.getPauCodigo().getPauDescarga().toString().equals("S")) {
                this.deshabilitarDescarga = false;
            } else {
                this.deshabilitarDescarga = true;
            }
            if (registroautorizacion.getPauCodigo().getPauLectura().toString().equals("S")) {
                this.deshabilitarCopia = false;
            } else {
                this.deshabilitarCopia = true;
            }
            if (registroautorizacion.getPauCodigo().getPauVisualizacion().toString().equals("S")) {
                this.deshabilitarVisualizar = false;
            } else {
                this.deshabilitarVisualizar = true;
            }
            contador = 0;
        } catch (Exception e) {
        }
    }
    private boolean filasel = false;
    public boolean isFilasel() {
        RegistroAutorizacion registrolocal = new RegistroAutorizacion();
        try {
            registrolocal = lregistroautorizacion.get(contador);
            mensajeg = "";
        } catch (Exception e) {
        }
        contador++;
        return registroautorizacion.equals(registrolocal);
    }
    public void setFilasel(boolean filasel) {
        this.filasel = filasel;
    }
    //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="DESPLIEGUE DEL PANEL POPUP">
    private PanelPopup panelPopup1 = new PanelPopup();
    public PanelPopup getPanelPopup1() {
        return panelPopup1;
    }
    public void setPanelPopup1(PanelPopup pb) {
        this.panelPopup1 = pb;
    }
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="DECLARACIONE DE BOTONES">
    private boolean deshabilitarDescarga = true;
    private boolean deshabilitarCancelar = true;
    private boolean deshabilitarCopia = true;
    private boolean deshabilitarTexto = true;
    private boolean deshabilitarVisualizar = true;
    public boolean isDeshabilitarVisualizar() {
        return deshabilitarVisualizar;
    }
    public void setDeshabilitarVisualizar(boolean deshabilitarVisualizar) {
        this.deshabilitarVisualizar = deshabilitarVisualizar;
    }
    public boolean isDeshabilitarDescarga() {
        return deshabilitarDescarga;
    }
    public void setDeshabilitarDescarga(boolean deshabilitarDescarga) {
        this.deshabilitarDescarga = deshabilitarDescarga;
    }
    public boolean isDeshabilitarTexto() {
        return deshabilitarTexto;
    }
    public void setDeshabilitarTexto(boolean deshabilitarTexto) {
        this.deshabilitarTexto = deshabilitarTexto;
    }
    public boolean isDeshabilitarCancelar() {
        return deshabilitarCancelar;
    }
    public void setDeshabilitarCancelar(boolean deshabilitarCancelar) {
        this.deshabilitarCancelar = deshabilitarCancelar;
    }
    public boolean isDeshabilitarCopia() {
        return deshabilitarCopia;
    }
    public void setDeshabilitarCopia(boolean deshabilitarCopia) {
        this.deshabilitarCopia = deshabilitarCopia;
    }
    //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="OPCIONES DEL PANEL POPUP">
    public void buttonModal_processAction(ActionEvent ae) {
        abrirPanel(!panelPopup1.isRendered());
    }
    public void abrirPanel(boolean evento) {
        panelPopup1.setRendered(evento);
    }
    public void setVisualizar(ActionEvent ae) {
        setMensaje("Visualizar el archivo");
        this.setLaccion("v");
        abrirPanel(!panelPopup1.isRendered());
    }
    public void setDescargar(ActionEvent ae) {
        setMensaje("Descargar el archivo");
        this.setLaccion("d");
        abrirPanel(!panelPopup1.isRendered());
    }
    public void setCopiar(ActionEvent ae) {
        setMensaje("Copiar el archivo");
        this.setLaccion("c");
        abrirPanel(!panelPopup1.isRendered());
    }
    public void setImprimir(ActionEvent ae) {
        setMensaje("Imprimir el archivo");
        this.setLaccion("i");
        abrirPanel(!panelPopup1.isRendered());
    }
    public void buttonsiPanel_processAction(ActionEvent ae) throws IOException {
        abrirPanel(!panelPopup1.isRendered());
        if (laccion.equals("d")) {
            this.buttondescargaArchivo_processAction(ae);
        }
        if (laccion.equals("c")) {
            buttonEnviaMail_processAction(ae);
        }
        if (laccion.equals("v")) {
            buttonVisualizar_processAction(ae);
        }
        if (laccion.equals("i")) {
            buttonImprimir_processAction(ae);
        }
    }
    //</editor-fold>
    /** Creates a new instance of AccesoAutorizadoBean */
    public AccesoAutorizadoBean() {
        abrirPanel(!panelPopup1.isRendered());
        HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        try {
            if (request.getParameter("cedula") != null && !request.getParameter("cedula").equalsIgnoreCase("")) {
                cedula = this.obmfun.desencriptar(request.getParameter("cedula"));
            } else {
                cedula = null;
            }
        } catch (SQLException ex) {
            Logger.getLogger(AccesoAutorizadoBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
//<editor-fold defaultstate="collapsed" desc="BOTON DE  DESCARGA DEL ARCHIVO">
    public void buttondescargaArchivo_processAction(ActionEvent ae) throws IOException {
        System.out.println("Entro a la descarga");
        try {
            String locpatharchivo = "c:\\Descarga\\";
            File directorio2 = new File(locpatharchivo);
            if (!directorio2.exists()) {
                directorio2.mkdirs();
            }
            BusquedaDocumentoBean busdoc = new BusquedaDocumentoBean();
            busdoc.descargaArchivo(registroautorizacion.getDocCodigo().getDocCodigo().toString(), locpatharchivo);
            locpatharchivo = busdoc.getPath();
            mensajeg = "El Documento ha sido Descargado en " + locpatharchivo;
            this.deshabilitarCancelar = true;
            this.deshabilitarDescarga = true;
//Guardo la pista en el contro de acceso para descarga
            controlaccesoFacade.insertControl(cedula, "N", "S", "N", "N", registroautorizacion.getDocCodigo());
        } catch (FileNotFoundException ex) {
            Logger.getLogger(RegistroCopiaBean.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(RegistroCopiaBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="BOTON CANCELAR">
    public void buttonCancelar_processAction(ActionEvent ae) {
        try {
            registroautorizacion = new RegistroAutorizacion();
            deshabilitarDescarga = true;
            this.deshabilitarCopia = true;
            this.deshabilitarCancelar = true;
        } catch (Exception e) {
            System.out.println("" + e.getLocalizedMessage());
        }
    }
    //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="ENVIAR MAIL">
    public void descargaArchivo() {
        String lpath = null;
        try {
            BusquedaDocumentoBean busdoc = new BusquedaDocumentoBean();
            busdoc.descargaArchivo(registroautorizacion.getDocCodigo().getDocCodigo().toString(), lpath);
            lpatharchivo = busdoc.getPath();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(RegistroCopiaBean.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(RegistroCopiaBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    public void enviarMail() {
        try {
            String lcontraseña = "jorozco";
            String mailRemitente = "[email protected]";
            if (mailRemitente != null && mailRemitente.toString().length() > 0) {
                String subject = "Copia de archivo"; //textFieldTitulo.getText().toString();   // the subject line
                String message = "Se le informa que se le ha enviado la copia del documento" + this.registroautorizacion.getDocCodigo().getDocCodigoDoc(); // the body of the message
                String mailhost = "190.95.203.5";//"mail.ejercito.mil.ec";
                //Verifico que sea un mail
                Pattern p = Pattern.compile("@");
                Matcher m = p.matcher(mailRemitente);
                if (!m.find()) {
                    this.mensajeg = "Por favor revisa la direccion e-mail del remitente";
                    System.out.println("La cadena no tiene arroba");
                } else {
                    String user = mailRemitente.toString().substring(0, m.start()); // user ID
                    compenviomail.configMail(mailhost, user, lcontraseña);
                    compenviomail.setFrom(mailRemitente.toString());
                    compenviomail.setSubject(subject);
                    compenviomail.setTo(lmailenvio.toString());
                    if (registroautorizacion.getDocCodigo().getDocNombreDoc() != null && registroautorizacion.getDocCodigo().getDocNombreDoc().length() > 0) {
                        compenviomail.addAttach(lpatharchivo + registroautorizacion.getDocCodigo().getNombreDesencriptado());
                    }
                    compenviomail.addContent(message);
                    compenviomail.sendMultipart();
                    compenviomail.eliminaAttach();
                    this.mensajeg = " Mail enviado ";
                    System.out.println("[ Mail enviado ]");
                    File dir = new File(lpatharchivo);
                    borrarDirectorio(dir);
                    dir.delete();
                    contenviomail = true;
                }
            } else {
                contenviomail = false;
                this.mensajeg = "Ingrese la dirección e-mail del remitente";
            }
        } catch (Exception ex) {
            contenviomail = false;
            Logger.getLogger(RegistroCopiaBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="BOTON ENVIAR MAIL">
    public void buttonEnviaMail_processAction(ActionEvent ae) {
        descargaArchivo();
        enviarMail();
        //Guardo la pista en el contro de acceso para copia
        controlaccesoFacade.insertControl(cedula, "N", "N", "N", "S", registroautorizacion.getDocCodigo());
        File dir = new File(lpatharchivo);
        borrarDirectorio(dir);
    }
    //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="BORRAR EL DIRECTORIO TEMPORAL">
    public void borrarDirectorio(File directorio) {
        File[] ficheros = directorio.listFiles();
        for (int i = 0; i < ficheros.length; i++) {
            if (ficheros.isDirectory()) {
                borrarDirectorio(ficheros);
            }
            ficheros.delete();
        }
        this.lpatharchivo = null;
    }
    //</editor-fold>
//<editor-fold defaultstate="collapsed" desc="BOTON VISUALIZAR">
    public void buttonVisualizar_processAction(ActionEvent ae) {
        String cadenaParametros = "";
        String url = "/SIADA-war/VerDocumento";
        String metodo = "post";
        String target = "_blank";
        String sql = "SELECT DOC_DIGITAL FROM ADOC_DOCUMENTO WHERE DOC_CODIGO  = ?";
        cadenaParametros += " {'extension' : '" + registroautorizacion.getDocCodigo().getDocExtension() + "','codigo' : '" + registroautorizacion.getDocCodigo().getDocCodigo() + "' , 'sql' : '" + sql + "' }";
        JavascriptContext.addJavascriptCall(FacesContext.getCurrentInstance(), "crea_form('" + url + "','" + metodo + "','detalle', " + cadenaParametros + ");");
        //Guardo la pista en el contro de acceso para visualizacion
        controlaccesoFacade.insertControl(cedula, "S", "N", "N", "N", registroautorizacion.getDocCodigo());
    }
    //</editor-fold>
    public void buttonImprimir_processAction(ActionEvent ae) {
        impresion = Desktop.getDesktop();
        File archivo = new File("C:/Descarga/AVANCE JULIO.doc");
        if (archivo.exists()) {
            try {
                impresion.print(archivo); //abre el archivo
            } catch (IOException ex) {
                Logger.getLogger(AccesoAutorizadoBean.class.getName()).log(Level.SEVERE, null, ex);
            }
            System.out.println("Se ha impreso el archivo");
        }
    }
}
He estado investigando. Parece que cuando ejecutas un servidor de aplicaciones, se activa el modo "headless", que viene a ser un "no tengo escritorio, soy un servidor". Parece que el java. Awt. Desktop necesita que el headless sea false, por lo que no vas a poder usar el Desktop en un servidor web.
Alternativa: dependiendo del SO en el que corra el servidor de aplicaciones, podrías hacer un apaño usando el Runtime. GetRuntime().exec() y ejecutar algún programita que te permita imprimir un fichero sin que salga la ventana de configuración de la impresora.
También podrías tener una app en modo headless=false (una app de escritorio como la que has usado en las pruebas), que se dedique a imprimir los archivos que se encuentren en una carpeta determinada. De este modo, el servidor de aplicaciones tan solo tendría que copiar el fichero en la carpeta, y la otra app se encargaría de imprimirlo.
Un poco rudimentario todo, lo se, pero como decía mi madre, "la vida es una caja de ñapas, nunca saber las que vas a tener que hacer hoy". Suerte:
Carlos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas