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: 16 años, 10 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(rows, headers);
     
            
JScrollPane jsp = new JScrollPane(dataTable);
            
contenedor.add(jsp, BorderLayout.CENTER);
            
contenedor.add(strTitle, BorderLayout.SOUTH);
            
           
            
ventana.pack();
            
ventana.setVisible(true);
            
            new 
PrintPreview(testPackagePrint.this, " preview");
            
//             
            
            
        
}
        public static 
void main(String[] args)
        
        {
            
            
            new 
testPackagePrint();
            
            
        }
 public 
int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException
 
{
    if (
pageIndex >= m_maxNumPage)
    {
      return 
NO_SUCH_PAGE;
    }
PrinterJob printJob = PrinterJob.getPrinterJob();
// Se asigna el tamaño del papel a A4.
Graphics2D g = (Graphics2D) graphics;
pageFormat = printJob.defaultPage();
Paper paper = pageFormat.getPaper();
g.translate((int)pageFormat.getImageableX(), (int)pageFormat.getImageableY());
paper.setSize(306, 396);
paper.setImageableArea(1.0, 1.0, 300, 390);
    
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.ITALIC, 8);
                
g.setFont(fontTitle);
            
            
    
int y = 0;
    
g.setFont(strTitle.getFont());
    
g.setColor(Color.black);
    
Font fn = g.getFont();
    
FontMetrics fm = g.getFontMetrics();
    
y += fm.getAscent();
    
    
    
g.drawRect(5, 5, (int)pageFormat.getImageableWidth()-10, (int)pageFormat.getImageableHeight()-10);
    
g.drawString(strTitle.getText(), 8, y+10);//Titulo
    
g.drawString("JUEGUETERIA \" *** JOSE MANUEL *** \" ", 8, y+20);
    
g.drawString("Dir: Ituzaingó 368", 8, y+30);
    
g.drawString("CP: 4400", 8, y+40);
    
g.drawString("Telf: 0387-4390362", 8, y+50);
    
g.drawString("Salta - Argentina", 8, y+60);
    
g.drawString("FACTURA", 8, y+70);
    
g.drawString("Total Facturado:", 0+80/*centro*/, y + hPage- 35/*desde abajo*/);
    
g.drawString("Página -  " + (pageIndex+1), 0+80/*centro*/, y + hPage- 25/*desde abajo*/);
    
y += 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();
    
y += h; // add ascent of header font because of baseline
            // positioning (see figure 2.10)
    
int nRow, nCol;
    for (
nCol=0; nCol<nColumns; nCol++) {
      
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(title, x[nCol], y);
    }
    
g.setFont(dataTable.getFont());
    
fm = g.getFontMetrics();
    
int header = y;
    
h = 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=iniRow; nRow<endRow; nRow++)
    {
      
y += h;
      for (
nCol=0; nCol<nColumns; nCol++) {
        
int col = dataTable.getColumnModel().getColumn(nCol).getModelIndex();
        
Object obj = dataTable.getValueAt(nRow, col);
        
String str = obj.toString();
        if (
obj instanceof ColorData)
          
g.setColor(((ColorData)obj).m_color);
        else
          
g.setColor(Color.black);
          
g.drawString(str, x[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: 16 años, 10 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 target, String title) {
    
super(title);
    
setSize(700, 400);
    
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);
          
setCursor( Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
          
prnJob.print();
          
setCursor( Cursor.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(0, str.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=0; k<comps.length; k++) {
              if (!(
comps[k] instanceof PagePreview))
                continue;
              
PagePreview pp = (PagePreview)comps[k];
                
pp.setScaledSize(w, h);
            }
            
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(toolBar, BorderLayout.NORTH);
    
m_preview = new PreviewContainer();
    
PrinterJob prnJob = PrinterJob.getPrinterJob();
    
PageFormat pageFormat = prnJob.defaultPage();
    if (
pageFormat.getHeight()==0 || 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,
          
altoPage, BufferedImage.TYPE_INT_RGB);
        
Graphics g = img.getGraphics();
        
g.setColor(Color.white);
        
g.fillRect(0, 0, anchoPage, altoPage);
        if (
target.print(g, pageFormat, pageIndex) !=
         
Printable.PAGE_EXISTS)
          break;
        
PagePreview pp = new PagePreview(w, h, img);
        
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(ps, BorderLayout.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 (
n == 0)
        return new 
Dimension(H_GAP, V_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 (
n == 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 = 0; k<nRow; k++) {
        for (
int m = 0; m<nCol; m++) {
          if (
index >= n)
            return;
          
comp = getComponent(index++);
          
comp.setBounds(x, y, w, h);
          
x += w+H_GAP;
        }
        
y += h+V_GAP;
        
x = 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 w, int h, Image source) {
      
m_w = w;
      
m_h = h;
      
m_source= source;
      
m_img = m_source.getScaledInstance(m_w, m_h,
        
Image.SCALE_SMOOTH);
      
m_img.flush();
      
setBackground(Color.white);
      
setBorder(new MatteBorder(1, 1, 2, 2, Color.black));
    }
    public 
void setScaledSize(int w, int h) {
      
m_w = w;
      
m_h = h;
      
m_img = m_source.getScaledInstance(m_w, m_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(0, 0, getWidth(), getHeight());
      
g.drawImage(m_img, 0, 0, this);
      
paintBorder(g);
    }
  }
} 
  #3 (permalink)  
Antiguo 10/12/2009, 12:20
 
Fecha de Ingreso: diciembre-2009
Mensajes: 1
Antigüedad: 16 años, 9 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: 16 años, 10 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:02.