Foros del Web » Programación para mayores de 30 ;) » Java »

Problema al imprimir desde java

Estas en el tema de Problema al imprimir desde java en el foro de Java en Foros del Web. hola, tengo un problema al intentar imprimir algo desde java, he probado un ejemplo sencillo y no hay forma de que funcione, bajé un codigo ...
  #1 (permalink)  
Antiguo 01/09/2010, 12:55
 
Fecha de Ingreso: febrero-2008
Ubicación: Rio Cuarto, Cordoba,Argentina
Mensajes: 6
Antigüedad: 16 años, 2 meses
Puntos: 0
Problema al imprimir desde java

hola, tengo un problema al intentar imprimir algo desde java, he probado un ejemplo sencillo y no hay forma de que funcione, bajé un codigo y probé de imprimir y lo hace el tema es que demora como 5 min en llegar a la impresora, estoy haciendo reportes con ireport y si genero el report y lo visualizo y ahi elijo de imprimir anda bien, rapido , pero si lo exporto al report usando un JRPrintServiceExporter demora lo mismo, que puede ser?? tengo windows xp y jvm 1.6. por favor necesito ayudaaa

este es el codigo del ejemplo que probé:
import java.awt.*;
import javax.swing.*;
import java.util.EventListener.*;
import java.*;
import java.awt.event.*;
public class Programa extends JFrame
{
String cadena;
JTextField campo;
JButton imprimir;
JLabel info;
Impresora imp;
JPanel principal = new JPanel(new BorderLayout());
JPanel etiq = new JPanel(new FlowLayout());
JPanel dos = new JPanel(new FlowLayout());

//CONSTRUCTOR DE LA CLASE
Programa()
{
super("Muestra Simple de Impresión en JAVA...");

info = new JLabel("ESCRIBA ALGO EN EL CAMPO Y HAGA CLIC EN IMPRIMIR...");
cadena = new String();
campo = new JTextField(30);
imprimir = new JButton("IMPRIMIR");

dos.add(campo);
dos.add(imprimir);
etiq.add(info);

campo.setToolTipText("ESCRIBA ALGO AQUÍ...");
imprimir.setToolTipText("CLIC AQUI PARA IMPRIMIR...");

principal.add(etiq, BorderLayout.NORTH);
principal.add(dos, BorderLayout.CENTER);

getContentPane().add(principal);

//AJUSTO EL TAMAÑO DE LA VENTANA AL MINIMO
pack();
//NO PERMITO QUE PUEDAN CAMBIAR EL TAMAÑO DE LA VENTANA
this.setResizable(false);

//AHORA LA CENTRARÉ EN LA PANTALLA
Dimension pantalla, cuadro;
pantalla = Toolkit.getDefaultToolkit().getScreenSize();
cuadro = this.getSize();

this.setLocation(((pantalla.width - cuadro.width)/2),
(pantalla.height - cuadro.height)/2);


//LE AGREGAMOS EL EVENTO AL BOTON "imprimir"

imprimir.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
cadena = "";
cadena = String.valueOf(campo.getText());
if (!cadena.equals(""))
{
imp = new Impresora();
imp.imprimir(cadena);
}
else System.out.println("NO SE IMPRIME NADA EN BLANCO...");

campo.requestFocus();
campo.select(0, cadena.length());
}
});



}//FIN DEL CONSTRUCTOR

public static void main(String jm[])
{
Programa p = new Programa();
p.show();

p.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent evt)
{
System.exit(0);
}
});
}//FIN DEL MAIN


}
  #2 (permalink)  
Antiguo 02/09/2010, 00:33
 
Fecha de Ingreso: julio-2010
Mensajes: 104
Antigüedad: 13 años, 10 meses
Puntos: 2
Respuesta: Problema al imprimir desde java

Buenos días,

¿El código de imprimir(cadena)?

Un saludo y buen día.
  #3 (permalink)  
Antiguo 02/09/2010, 07:54
 
Fecha de Ingreso: febrero-2008
Ubicación: Rio Cuarto, Cordoba,Argentina
Mensajes: 6
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problema al imprimir desde java

Perdon, ahi va el codigo que falta

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class Impresora
{
Font fuente = new Font("Dialog", Font.PLAIN, 10);
PrintJob pj;
Graphics pagina;

Impresora(){
pj = Toolkit.getDefaultToolkit().getPrintJob(new Frame(), "SCAT", null);
}


public void imprimir(String Cadena)
{
//LO COLOCO EN UN try/catch PORQUE PUEDEN CANCELAR LA IMPRESION
try
{
pagina = pj.getGraphics();
pagina.setFont(fuente);
pagina.setColor(Color.black);

pagina.drawString(Cadena, 60, 60);

pagina.dispose();
pj.end();
}catch(Exception e)
{
System.out.println("LA IMPRESION HA SIDO CANCELADA...");
}
}//FIN DEL PROCEDIMIENTO imprimir(String...)


}//
  #4 (permalink)  
Antiguo 02/09/2010, 09:36
 
Fecha de Ingreso: julio-2010
Mensajes: 104
Antigüedad: 13 años, 10 meses
Puntos: 2
Respuesta: Problema al imprimir desde java

Buenas tardes,

Pense que en el método imprimir() te crearías un jasperPrint, no un printJob, no puedo ayudarte ya que siempre imprimo mediante jasperReport. Tu Frame si no he leído y entendido mal sólo tiene un un label, un textfield y el botón imprimir, y lo que pretendes con la impresión es un hoja en la que en el centro figure el texto del textfield, con jasper esto es facilito.

Ireport:

1. Crea un report llamado "informe".

2. Crea un parameter o parametro llamado "texto".

3. Arrastrar el parametro a la seccion Detail, te debería aparecer un recuadro con "$P{texto}".

4. Compila el report.

Java:
Código java:
Ver original
  1. JasperPrint print = new JasperPrint();
  2.                 Map parameters = new HashMap();
  3.  
  4.                 File rutaCarpetaExpediente = new File(tuRutadelInforme);
  5.  
  6.                 if (!rutaCarpetaExpediente.exists()) {
  7.                     rutaCarpetaExpediente.mkdir();
  8.                 }
  9.  
  10.                 parameters.put("texto", cadena);
  11.  
  12.                 try {
  13.                            //Archivo de impresion
  14.                           print = JasperFillManager.fillReport(rutaCarpetaExpediente.getAbsolutePath() + File.separatorChar + "informe.jasper", parameters);
  15.                      } catch (JRException ex) {
  16.                               ex.printStackTrace();
  17.                      }
  18.  
  19.                 //Mostramos la pantalla de impresion
  20.                 JasperViewer view = new JasperViewer(print, false);
  21.  
  22.                 view.setVisible(true);

No lo he probado, pero si funciona no debería tardar nada...

Un saludo y buen día.
  #5 (permalink)  
Antiguo 02/09/2010, 12:51
 
Fecha de Ingreso: febrero-2008
Ubicación: Rio Cuarto, Cordoba,Argentina
Mensajes: 6
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problema al imprimir desde java

ioel10 yo tambien utilizo el ireport para imprimir como vos, pero yo lo que quiero hacer es que l reporte no muestre la pantalla de impresion, sino que directamente lo mande a la impresora, he probado el siguiente codigo y demora los 5 min que digo, pensando que era por reporte queria`probar el otro ejemplo pero tambien demora, por eso creo que es algo que tiene que ver con configuraciones o no se qué , ya no se que mas probar, mirá yo acá te paso el codigo que uso para enviar el reporte directamente a la impresora:
Código:
.......aca viene lo de los parametros, compilar reporte, que es como me lo pasaste

JasperPrint jasperprint= JasperFillManager.fillReport(reporte,parameters,data);

esto era lo que tenia antes pero quiero que se vea la pantalla, sino que se imprima directamente
 // JasperViewer visor=new JasperViewer(jasperprint,false);
	 //  visor.setTitle("Factura Cumelem");
	 //visor.viewReport(jasperprint);
                // visor.setVisible(true);

// metodo para exportar a impresora la impresion del report
PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
PrintService impressora = PrintServiceLookup.lookupDefaultPrintService();
printRequestAttributeSet.add(new Copies(1));
JRPrintServiceExporter exporter = new JRPrintServiceExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperprint);
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET, printRequestAttributeSet);
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET,impressora.getAttributes());
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG, Boolean.FALSE);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, Boolean.FALSE);

exporter.checkAvailablePrinters();
exporter.exportReport();
  #6 (permalink)  
Antiguo 03/09/2010, 00:34
 
Fecha de Ingreso: julio-2010
Mensajes: 104
Antigüedad: 13 años, 10 meses
Puntos: 2
Respuesta: Problema al imprimir desde java

Buenos días,

Yo utilizo el archivo compilado, .jasper NO .jrxml, por ahí puedes ganar algo de tiempo. He estado buscando y no he encontrado nada.

Un saludo y buen día.
  #7 (permalink)  
Antiguo 03/09/2010, 06:58
 
Fecha de Ingreso: febrero-2008
Ubicación: Rio Cuarto, Cordoba,Argentina
Mensajes: 6
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Problema al imprimir desde java

si yo tambien utilizo lo mismo, pero para mi el problema no es con reportes sino con java, porque he probado ejemplos comunes de imprimir desde java como el que te mostré antes y demora, es decir que hay algo que hace que demore la impresion. si tienes algun ejemplo de impresion por favor envíamelo asi lo pruebo. gracias
  #8 (permalink)  
Antiguo 06/09/2010, 00:30
 
Fecha de Ingreso: julio-2010
Mensajes: 104
Antigüedad: 13 años, 10 meses
Puntos: 2
Respuesta: Problema al imprimir desde java

Buenos días,

AL PULSAR EL BOTÓN IMPRIMIR

Código java:
Ver original
  1. private void imprimirButtonMouseClicked(java.awt.event.MouseEvent evt) {                                            
  2.         // IMPRIMIR TABLA
  3.         loginPanel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
  4.  
  5.         JasperPrint print = new JasperPrint();
  6.  
  7.         File rutaCarpetaExpediente = new File(ruta);
  8.  
  9.         if (!rutaCarpetaExpediente.exists()) {
  10.             rutaCarpetaExpediente.mkdir();
  11.         }
  12.  
  13.         print = determinaImpresion(print, rutaCarpetaExpediente);
  14.  
  15.         //Mostramos la pantalla de impresion
  16.         JasperViewer view = new JasperViewer(print, false);
  17.  
  18.         loginPanel.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  19.  
  20.         view.setVisible(true);
  21.  
  22.     }

DETERMINAIMPRESIÓN

Código java:
Ver original
  1. private JasperPrint determinaImpresion(JasperPrint print, File file) {
  2.  
  3.         String tit = tituloTablaLabel.getText();
  4.  
  5.         ResultSet rsObras = obtenerRsPrint();
  6.  
  7.         Map parameters = obtenerParameters(tit);
  8.  
  9.         JRResultSetDataSource jrs = new JRResultSetDataSource(rsObras);
  10.  
  11.         try {
  12.             //Archivo de impresion
  13.             print = JasperFillManager.fillReport(file.getAbsolutePath() + File.separatorChar + "Obras.jasper", parameters, jrs);
  14.         } catch (JRException ex) {
  15.             loginPanel.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
  16.             log.debug("ControlObrasView\n", ex);
  17.         }
  18.  
  19.         return print;
  20.  
  21.     }

OBTENERRSPRINT: Dependiendo del valor de carga, realizo determinada impresión.

Código java:
Ver original
  1. private ResultSet obtenerRsPrint() {
  2.  
  3.         ResultSet rsObras = null;
  4.  
  5.         if (carga == 0) {
  6.  
  7.             //Todas las obras
  8.             rsObras = indicadores_pre_produccion.daos.daoAlertas.cargarDatosObrasInicialPrint(conexionPG.conexion, listaIndicadores, listaDepartamentos, id, order);
  9.  
  10.         } else if (carga == 1) {
  11.  
  12.             if ((obraTextField.getText().trim() == null ? "" != null : !obraTextField.getText().trim().equals("")) || (clienteTextField.getText().trim() == null ? "" != null : !clienteTextField.getText().trim().equals("")) || (presupuestoTextField.getText().trim() == null ? "" != null : !presupuestoTextField.getText().trim().equals(""))) {
  13.  
  14.                 //Cliente y Obra
  15.                 rsObras = indicadores_pre_produccion.daos.daoAlertas.cargarDatosObrasClienteObraPrint(conexionPG.conexion, paramCliente, paramObra, paramPresupuesto, listaIndicadores, listaDepartamentos, id, order);
  16.  
  17.             } else {
  18.  
  19.                 //Parametros
  20.                 if (paramBalance == 4) {
  21.                     //TODAS
  22.                     rsObras = indicadores_pre_produccion.daos.daoAlertas.cargarDatosObrasParamTodasPrint(conexionPG.conexion, paramIndicador, paramEstado, fechaIni, fechaFin, listaDepartamentos, id, order);
  23.                 } else {
  24.                     rsObras = indicadores_pre_produccion.daos.daoAlertas.cargarDatosObrasParamPrint(conexionPG.conexion, paramIndicador, paramEstado, paramBalance, fechaIni, fechaFin, listaDepartamentos, id, order);
  25.                 }
  26.  
  27.             }
  28.  
  29.         } else if (carga == 2) {
  30.             //Alertas
  31.             rsObras = indicadores_pre_produccion.daos.daoAlertas.cargarDatosObrasAlertasPorcentajePrint(conexionPG.conexion, indicador, balance, listaDepartamentos, id, order);
  32.  
  33.         } else {
  34.             JOptionPane.showMessageDialog(modificarParametroPanel, "No se ha podido actualizar la tabla.", "Error", JOptionPane.ERROR_MESSAGE);
  35.         }
  36.  
  37.         return rsObras;
  38.     }


OBTENERRSPRINT: Dependiendo del valor de carga, obtengo el título
Código java:
Ver original
  1. private Map obtenerParameters(String tit) {
  2.  
  3.         Map parameters = new HashMap();
  4.  
  5.         if (carga == 0) {
  6.  
  7.             //Todas las obras
  8.             Integer inicioTit = tit.indexOf("T");
  9.             Integer finTit = tit.indexOf(".");
  10.  
  11.             parameters.put("tit", tit.substring(inicioTit, finTit));
  12.  
  13.         } else if (carga == 1) {
  14.  
  15.             Integer inicioTit = tit.indexOf("O");
  16.             Integer finTit = tit.indexOf(".");
  17.  
  18.             parameters.put("tit", tit.substring(inicioTit, finTit));
  19.  
  20.         } else if (carga == 2) {
  21.             //Alertas
  22.  
  23.             Integer inicioTit = tit.indexOf("R");
  24.             Integer finTit = tit.indexOf(")");
  25.  
  26.             parameters.put("tit", tit.substring(inicioTit, finTit + 1));
  27.  
  28.  
  29.         } else {
  30.             JOptionPane.showMessageDialog(modificarParametroPanel, "No se ha podido actualizar la tabla.", "Error", JOptionPane.ERROR_MESSAGE);
  31.         }
  32.  
  33.         return parameters;
  34.     }

Un saludo y buen día.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:24.