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

Problema al imprimir Ticket, no se pinta correctamente.

Estas en el tema de Problema al imprimir Ticket, no se pinta correctamente. en el foro de Java en Foros del Web. Hola tengo un problema al momento de imprimir tickes desde un jtable y tambien al momento de generar la vista previa el contenido no se ...
  #1 (permalink)  
Antiguo 18/11/2009, 00:59
 
Fecha de Ingreso: noviembre-2009
Mensajes: 3
Antigüedad: 14 años, 5 meses
Puntos: 0
Problema al imprimir Ticket, no se pinta correctamente.

Hola tengo un problema al momento de imprimir tickes desde un jtable y tambien al momento de generar la vista previa el contenido no se pinta bien, en la vista previa se ve correctamente pero al imprimir la primera pagina esta descolocado y no tiene el tamaño de papel correcto las otras restantes el tamaño esta bien pero el contenido tambien no esta del todo correcto espero entiendan mi consulta.


Código PHP:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.print.PrintService;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;


public class 
testPackagePrint  implements Printable {
        
JTable dataTable;
        protected 
int m_maxNumPage 1;
        protected 
JLabel strTitle;
        public 
testPackagePrint()
        {
            
String rows[][] = {
                              
                              {
"1",   "1"},
                              {
"2""ll"},
                              {
"3",   "ll"},
                              {
"4",   "ll"},
                              {
"5""mm"},
                              {
"6",   "nmm"},
                              {
"7",   "mmC"},
                              {
"8""mm"},
                              {
"9",   "mm"},
                              {
"10",   "mm"},
                              {
"11""mm"},
                              {
"12",   "mm"},
                              {
"13",   "mm"},
                              {
"14""mm"},
                              {
"15",   "mm"},
                              {
"16",   "mm"},
                              {
"17""mm"},
                              {
"18",   "mm"},
                              {
"19",   "ni - \u4E8C"},
                              {
"20""san - \u4E09"},
                              {
"30",   "ni - \u4E8C"},
                              {
"40""san - \u4E09"},
                              {
"50",   "ni - \u4E8C"},
                              {
"60",   "ni - \u4E8C"},
                              {
"61""san - \u4E09"},
                              {
"62",   "ni - \u4E8C"},
                              {
"63",   "ni - \u4E8C"},
                              {
"64""san - \u4E09"},
                              {
"65",   "ni - \u4E8C"},
                              {
"two",   "ni - \u4E8C"},
                              {
"three""san - \u4E09"},
                              {
"two",   "ni - \u4E8C"},
                              {
"two",   "ni - \u4E8C"},
                              {
"three""san - \u4E09"},
                              {
"two",   "ni - \u4E8C"},
                              {
"two",   "ni - \u4E8C"},
                              {
"three""san - \u4E09"},
                              {
"two",   "ni - \u4E8C"},
                              {
"two",   "ni - \u4E8C"},
                              {
"three""san - \u4E09"},
                              {
"two",   "ni - \u4E8C"},
                              {
"three""san - \u4E09"}
                              };
            
String headers[] = {"Producto""Cant"};
            
JFrame ventana = new JFrame("Impresion de factura");
            
strTitle= new JLabel();
            
ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
Container contenedor ventana.getContentPane();
            
            
            
strTitle.setText("Preview");
            
            
dataTable = new JTable(rowsheaders);
     
            
JScrollPane jsp = new JScrollPane(dataTable);
            
contenedor.add(jspBorderLayout.CENTER);
            
contenedor.add(strTitleBorderLayout.SOUTH);
            
           
            
ventana.pack();
            
ventana.setVisible(true);
            
            new 
PrintPreview(testPackagePrint.this" preview");
            
//             
            
            
        
}
        public static 
void main(String[] args)
        
        {
            
            
            new 
testPackagePrint();
            
            
        }
 public 
int print(Graphics graphicsPageFormat pageFormatint pageIndexthrows PrinterException
 
{
    if (
pageIndex >= m_maxNumPage)
    {
      return 
NO_SUCH_PAGE;
    }
PrinterJob printJob PrinterJob.getPrinterJob();
// Se asigna el tamaño del papel a A4.
Graphics2D g = (Graphics2Dgraphics;
pageFormat printJob.defaultPage();
Paper paper pageFormat.getPaper();
g.translate((int)pageFormat.getImageableX(), (int)pageFormat.getImageableY());
paper.setSize(306396);
paper.setImageableArea(1.01.0300390);
    
pageFormat.setPaper(paper);
pageFormat.setOrientation(PageFormat.PORTRAIT);
    
    
     
    
    
    
int wPage 0;
    
int hPage 0;
    
        if (
pageFormat.getOrientation() == pageFormat.PORTRAIT)
        {
          
wPage = (int)pageFormat.getImageableWidth()-5;
          
hPage = (int)pageFormat.getImageableHeight()-5;
        }
        else
        {
          
wPage = (int)pageFormat.getImageableWidth();
          
wPage += wPage/2;
          
hPage = (int)pageFormat.getImageableHeight();
          
g.setClip(0,0,wPage,hPage);
        }
    
        
         
            
Font fontTitle = new Font("Arial"Font.ITALIC8);
                
g.setFont(fontTitle);
            
            
    
int y 0;
    
g.setFont(strTitle.getFont());
    
g.setColor(Color.black);
    
Font fn g.getFont();
    
FontMetrics fm g.getFontMetrics();
    
+= fm.getAscent();
    
    
    
g.drawRect(55, (int)pageFormat.getImageableWidth()-10, (int)pageFormat.getImageableHeight()-10);
    
g.drawString(strTitle.getText(), 8y+10);//Titulo
    
g.drawString("JUEGUETERIA \" *** JOSE MANUEL *** \" "8y+20);
    
g.drawString("Dir: Ituzaingó 368"8y+30);
    
g.drawString("CP: 4400"8y+40);
    
g.drawString("Telf: 0387-4390362"8y+50);
    
g.drawString("Salta - Argentina"8y+60);
    
g.drawString("FACTURA"8y+70);
    
g.drawString("Total Facturado:"0+80/*centro*/hPage35/*desde abajo*/);
    
g.drawString("Página -  " + (pageIndex+1), 0+80/*centro*/hPage25/*desde abajo*/);
    
+= 75// space between title and table headers
    
Font headerFont dataTable.getFont().deriveFont(Font.BOLD);
    
g.setFont(headerFont);
    
fm g.getFontMetrics();
    
TableColumnModel colModel dataTable.getColumnModel();
    
int nColumns colModel.getColumnCount();
    
int x[] = new int[nColumns];
    
x[0] = (int)paper.getImageableX()+10//Escala X
    
int x1=x[0];
    
int h fm.getAscent();
    
+= h// add ascent of header font because of baseline
            // positioning (see figure 2.10)
    
int nRownCol;
    for (
nCol=0nCol<nColumnsnCol++) {
      
TableColumn tk colModel.getColumn(nCol);
      
int width;
      if (
nCol>0)
      {
          
width tk.getWidth()/3;//Ancho de las columnas
      
}
      else
      {
          
width 80;//Ancho de las columnas
      
}
      if (
x[nCol] + width wPage)
      {
        
nColumns nCol;
        break;
      }
      if (
nCol+1<nColumns)
        
x[nCol+1] = x[nCol] + width;
      
String title = (String)tk.getIdentifier();
      
g.drawString(titlex[nCol], y);
    }
    
g.setFont(dataTable.getFont());
    
fm g.getFontMetrics();
    
int header y;
    
fm.getHeight();
    
int rowH Math.max((int)(h*1.5), 10);
    
int rowPerPage = (hPage-header)/rowH;
    
m_maxNumPage Math.max((int)Math.ceil(dataTable.getRowCount()/
      (double)
rowPerPage), 1);
    
TableModel tblModel dataTable.getModel();
    
int iniRow pageIndex*rowPerPage;
    
int endRow Math.min(dataTable.getRowCount(),
      
iniRow+rowPerPage);
    for (
nRow=iniRownRow<endRownRow++)
    {
      
+= h;
      for (
nCol=0nCol<nColumnsnCol++) {
        
int col dataTable.getColumnModel().getColumn(nCol).getModelIndex();
        
Object obj dataTable.getValueAt(nRowcol);
        
String str obj.toString();
        if (
obj instanceof ColorData)
          
g.setColor(((ColorData)obj).m_color);
        else
          
g.setColor(Color.black);
          
g.drawString(strx[nCol], y);
      }
    }
    
System.gc();
    return 
PAGE_EXISTS;
  }


en el segundo post esta la clase donde se genera la vista previa por favor aumenten mas filas a los datos de la tabla para que genere mas paginas

gracias de antemano espero me puedan ayudar.

Última edición por hagsoft; 18/11/2009 a las 01:04 Razón: cambio de titulo
  #2 (permalink)  
Antiguo 18/11/2009, 01:00
 
Fecha de Ingreso: noviembre-2009
Mensajes: 3
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Imprimir Ticket imprime descolocado

Código PHP:

y este la ventana donde se genera la vista previa
.




import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.util.*;
import java.awt.print.*;
import javax.swing.*;
import javax.swing.JTable.PrintMode;
import javax.swing.border.*;
import javax.swing.event.*;
public class 
PrintPreview extends JFrame
{
  protected 
int anchoPage=306;
  protected 
int altoPage=396;
  protected 
Printable m_target;
  protected 
JComboBox m_cbScale;
 
  protected 
PreviewContainer m_preview;
  public 
PrintPreview(Printable target) {
    
this(target"Vista Previa de Impresion - Smarth Bussines System");
  }
  public 
PrintPreview(Printable targetString title) {
    
super(title);
    
setSize(700400);
    
m_target target;
    
JToolBar toolBar = new JToolBar();
    
JButton botonPrint = new JButton("Imprimir", new ImageIcon("print.gif"));
    
ActionListener lst = new ActionListener() {
      public 
void actionPerformed(ActionEvent e) {
        try
        {
          
// Use default printer, no dialog
          
PrinterJob prnJob PrinterJob.getPrinterJob();
          
prnJob.setPrintable(m_target);
          
setCursorCursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
          
prnJob.print();
          
setCursorCursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
          
dispose();
        }
        catch (
PrinterException ex)
        {
          
ex.printStackTrace();
          
System.err.println("Error al Imprimir: "+ex.toString());
        }
      }
    };
    
botonPrint.addActionListener(lst);
    
botonPrint.setAlignmentY(0.5f);
    
botonPrint.setMargin(new Insets(4,6,4,6));
    
toolBar.add(botonPrint);
    
botonPrint = new JButton("Cerrar Vista Previa");
    
lst = new ActionListener() {
      public 
void actionPerformed(ActionEvent e) {
        
dispose();
      }
    };
    
botonPrint.addActionListener(lst);
    
botonPrint.setAlignmentY(0.5f);
    
botonPrint.setMargin(new Insets(2,6,2,6));
    
toolBar.add(botonPrint);
    
String[] scales = { "10 %""25 %""50 %""100 %" };
    
m_cbScale = new JComboBox(scales);
    
lst = new ActionListener() {
      public 
void actionPerformed(ActionEvent e) {
        
Thread runner = new Thread() {
          public 
void run() {
            
String str m_cbScale.getSelectedItem().
              
toString();
            if (
str.endsWith("%"))
              
str str.substring(0str.length()-1);
            
str str.trim();
              
int scale 0;
            try { 
scale Integer.parseInt(str); }
            catch (
NumberFormatException ex) { return; }
            
int w = (int)(anchoPage*scale/100);
            
int h = (int)(altoPage*scale/100);
            
Component[] comps m_preview.getComponents();
            for (
int k=0k<comps.lengthk++) {
              if (!(
comps[k] instanceof PagePreview))
                continue;
              
PagePreview pp = (PagePreview)comps[k];
                
pp.setScaledSize(wh);
            }
            
m_preview.doLayout();
            
m_preview.getParent().getParent().validate();
          }
        };
        
runner.start();
      }
    };
    
m_cbScale.addActionListener(lst);
    
m_cbScale.setMaximumSize(m_cbScale.getPreferredSize());
    
m_cbScale.setEditable(true);
    
toolBar.addSeparator();
    
toolBar.add(m_cbScale);
    
getContentPane().add(toolBarBorderLayout.NORTH);
    
m_preview = new PreviewContainer();
    
PrinterJob prnJob PrinterJob.getPrinterJob();
    
PageFormat pageFormat prnJob.defaultPage();
    if (
pageFormat.getHeight()==|| pageFormat.getWidth()==0) {
      
System.err.println("Unable to determine default page size");
        return;
    }
    
anchoPage 306;
    
altoPage 396;
    
int scale 50;
    
int w = (int)(anchoPage*scale/100);
    
int h = (int)(altoPage*scale/100);
    
int pageIndex 0;
    try {
      while (
true) {
        
BufferedImage img = new BufferedImage(anchoPage,
          
altoPageBufferedImage.TYPE_INT_RGB);
        
Graphics g img.getGraphics();
        
g.setColor(Color.white);
        
g.fillRect(00anchoPagealtoPage);
        if (
target.print(gpageFormatpageIndex) !=
         
Printable.PAGE_EXISTS)
          break;
        
PagePreview pp = new PagePreview(whimg);
        
m_preview.add(pp);
        
pageIndex++;
      }
    }
    catch (
PrinterException e) {
      
e.printStackTrace();
      
System.err.println("Printing error: "+e.toString());
    }
    
JScrollPane ps = new JScrollPane(m_preview);
    
getContentPane().add(psBorderLayout.CENTER);
    
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    
setVisible(true);
  }
  class 
PreviewContainer extends JPanel
  
{
    protected 
int H_GAP 16;
    protected 
int V_GAP 10;
    public 
Dimension getPreferredSize() {
      
int n getComponentCount();
      if (
== 0)
        return new 
Dimension(H_GAPV_GAP);
      
Component comp getComponent(0);
      
Dimension dc comp.getPreferredSize();
      
int w dc.width;
      
int h dc.height;
      
Dimension dp getParent().getSize();
      
int nCol Math.max((dp.width-H_GAP)/(w+H_GAP), 1);
      
int nRow n/nCol;
      if (
nRow*nCol n)
        
nRow++;
      
int ww nCol*(w+H_GAP) + H_GAP;
      
int hh nRow*(h+V_GAP) + V_GAP;
      
Insets ins getInsets();
      return new 
Dimension(ww+ins.left+ins.right,
        
hh+ins.top+ins.bottom);
    }
    public 
Dimension getMaximumSize() {
      return 
getPreferredSize();
    }
    public 
Dimension getMinimumSize() {
      return 
getPreferredSize();
    }
    public 
void doLayout() {
      
Insets ins getInsets();
      
int x ins.left H_GAP;
      
int y ins.top V_GAP;
      
int n getComponentCount();
      if (
== 0)
        return;
      
Component comp getComponent(0);
      
Dimension dc comp.getPreferredSize();
      
int w dc.width;
      
int h dc.height;
      
Dimension dp getParent().getSize();
      
int nCol Math.max((dp.width-H_GAP)/(w+H_GAP), 1);
      
int nRow n/nCol;
      if (
nRow*nCol n)
        
nRow++;
      
int index 0;
      for (
int k 0k<nRowk++) {
        for (
int m 0m<nColm++) {
          if (
index >= n)
            return;
          
comp getComponent(index++);
          
comp.setBounds(xywh);
          
+= w+H_GAP;
        }
        
+= h+V_GAP;
        
ins.left H_GAP;
      }
    }
  }
  class 
PagePreview extends JPanel
  
{
    protected 
int m_w;
    protected 
int m_h;
    protected 
Image m_source;
    protected 
Image m_img;
    public 
PagePreview(int wint hImage source) {
      
m_w w;
      
m_h h;
      
m_sourcesource;
      
m_img m_source.getScaledInstance(m_wm_h,
        
Image.SCALE_SMOOTH);
      
m_img.flush();
      
setBackground(Color.white);
      
setBorder(new MatteBorder(1122Color.black));
    }
    public 
void setScaledSize(int wint h) {
      
m_w w;
      
m_h h;
      
m_img m_source.getScaledInstance(m_wm_h,
        
Image.SCALE_SMOOTH);
      
repaint();
    }
    public 
Dimension getPreferredSize() {
      
Insets ins getInsets();
      return new 
Dimension(m_w+ins.left+ins.right,
        
m_h+ins.top+ins.bottom);
    }
    public 
Dimension getMaximumSize() {
      return 
getPreferredSize();
    }
    public 
Dimension getMinimumSize() {
      return 
getPreferredSize();
    }
    public 
void paint(Graphics g) {
      
g.setColor(getBackground());
      
g.fillRect(00getWidth(), getHeight());
      
g.drawImage(m_img00this);
      
paintBorder(g);
    }
  }

  #3 (permalink)  
Antiguo 10/12/2009, 12:20
 
Fecha de Ingreso: diciembre-2009
Mensajes: 1
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Problema al imprimir Ticket, no se pinta correctamente.

Hola necesito saber si pueden ayudarme quiero mandar a imprimir un ticket en java en una impresora tmu 220pa el problema es que no se como modificar el tamaño de papel y tampoco hacer que corte la impresion al terminar de leer el codigo.Si alguien me puede ayudar se lo agradeceria mucho.

Gracias..
  #4 (permalink)  
Antiguo 10/03/2010, 14:15
 
Fecha de Ingreso: noviembre-2009
Mensajes: 3
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Problema al imprimir Ticket, no se pinta correctamente.

yo tengo el mismo problema alguien que pueda echarme una mano
hasta ahora no he podido solucionar la vista previa
y tambien personalizar el tamaño de papel para mandar la impresion desde java.
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 03:08.