locked
Generar una etiqueta con Código de barras al presionar un botón RRS feed

  • Pregunta

  • Necesito ayuda como puedo imprimir automáticamente una etiqueta con código de barras al presionar un botón 
    es decir mi sistema manda a guardar datos a mi base y con una consulta regreso los mismos datos con la primary key que es la que usare como clave para el código de barras pero no tengo la menor mínima idea de como generar la etiqueta 
    viernes, 8 de noviembre de 2019 22:58

Respuestas

  • Sí, es complicado, por eso existen los profesionales programadores, y hasta cobran...je. Bueno de echo estuve un buen tiempo recreando tu escenario y te dejo un ejemplo, solo un ejemplo deberás adecuar las dimensiones ya que, por lo visto, son mucho más pequeñas que mi ejemplo, supongo que utilizarás rollo de impresión autoadhesiva. Ok si viste el ejemplo de la otra consulta ya sabrás como ejecutar PrintDocument.Print() entonces vamos a la creación de la impresión. Los datos vienen de una base de datos y alimentan un DataGridView mediante DataSource. Entonces comenzamos a imprimir los datos de cada columna iterando el DGV ej:

      int A = 0;
            private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
            {
                int Pos = 50;
                int Row = 10;
                for (int i = A; i < Dgv.Rows.Count - 1; i++)
                {
                    //................Código de barras.....................
                    label1.Text = Convert.ToString(Dgv[0, i].Value);
    
                    String PathTTF = @"C:\Users\Dirección\Documents\Codigode barras\fre3of9x.ttf";
                    PrivateFontCollection PFC = new PrivateFontCollection();
                    PFC.AddFontFile(PathTTF);
    
                    FontFamily NFont = PFC.Families[0];
                    Font Ft = new Font(NFont, 75);
                    label1.Font = Ft;
                    //................fin código de barras .................  
    
                    //-----------si el valór Row supera los 1130 (según tamaño de hoja) genera una nueva página-----------
                    if (Row >= 1130)
                    {
                        e.HasMorePages = true;
                        Row = 10;
                        A = i; //mantiene el valor de la fila DGV
                        break;
                      
                    }
                    //......................................................................................
    
                    //---------------------Impresión de los datos-------------------------------------------
                    DateTime dat = Convert.ToDateTime(Dgv[6, i].Value);
                    Rectangle rect = new Rectangle(Pos, Row, 600, 370);
                    Rectangle rect2 = new Rectangle(Pos + 4, Row + 4, 592, 362);
    
                    e.Graphics.DrawImage(pictureBox1.Image, Pos + 5, Row + 5, 60, 60);
                    e.Graphics.DrawRectangle(Pens.Black, rect);
                    e.Graphics.DrawRectangle(Pens.Black, rect2);
                    e.Graphics.DrawString("Fecha/Date: " + dat.ToShortDateString(), new Font("Verdana", 10, FontStyle.Bold), Brushes.Black, Pos + 70, Row + 70);
                    e.Graphics.DrawString("Hora/Time: " + dat.ToShortTimeString(), new Font("Verdana", 10, FontStyle.Bold), Brushes.Black, Pos + 400, Row + 70);
    
                    e.Graphics.DrawString("Código: " + Dgv[5, i].Value, new Font("Verdana", 10, FontStyle.Bold), Brushes.Black, Pos + 70, Row + 100);
                    e.Graphics.DrawString("Nº Pedido: " + Dgv[2, i].Value, new Font("Verdana", 10, FontStyle.Bold), Brushes.Black, Pos + 70, Row + 140);
                    e.Graphics.DrawString("Cliente: " + Dgv[1, i].Value, new Font("Verdana", 20, FontStyle.Regular), Brushes.Black, Pos + 10, Row + 180);
    
                    e.Graphics.DrawString("Máquina: " + Dgv[3, i].Value, new Font("Verdana", 10, FontStyle.Bold), Brushes.Black, Pos + 400, Row + 100);
                    e.Graphics.DrawString("Operador: " + Dgv[4, i].Value, new Font("Verdana", 12, FontStyle.Regular), Brushes.Black, Pos + 380, Row + 190);
    
                    e.Graphics.DrawString(label1.Text, Ft, Brushes.Black, Pos + 170, Row + 240);
                    e.Graphics.DrawString( Convert.ToString(Dgv[0, i].Value), new Font("Verdana", 11, FontStyle.Bold), Brushes.Black, Pos + 260, Row + 330);
                    //............................................................................
    
                    //.................volvemos a recorrer DGV--------------------------  
                    Row += 375;
    
                }
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                System.Drawing.Printing.PaperSize Hoja;
    
                Hoja = new System.Drawing.Printing.PaperSize("Oficio", 850, 1400);
            //PrintDocument1.DefaultPageSettings.PaperSize = Hoja
            printDocument1.Print();
            }
        

    Bien el resultado es


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗




    miércoles, 13 de noviembre de 2019 21:20

Todas las respuestas

  • Hola Kevin, fijate si esta consulta te ayuda

    generar e imprimir codigos QR

    Saludos


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗

    viernes, 8 de noviembre de 2019 23:19
  • hola es similar a lo que quisiera hacer
    bueno solo que en este caso 
    necesito poner mas datos en mi etiqueta 

    necesito hacer algo como la imagen de abajo, los datos me los traigo desde SQLServer pero no tengo idea de como ponerlos para que me genere algo similar 
    Necesito realizar algo como esto
    martes, 12 de noviembre de 2019 20:00
  • hola

    existen fuentes de texto para generar los codigo

    Free Barcode Font

    alli puedes decargar el Code39 o el 128

    pero dependiendo que codigo necesites busca la fuente de texto

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 12 de noviembre de 2019 21:21
  • bueno esque mi idea es que esos datos los consulto y en base a la primary key generar el codigo de barras ya que es único y con el lector de barras me voy a traer esos datos con una simple consulta

    pero el problema es que no tengo la menor mínima idea de como generar una etiqueta como la de la imagen ese es mi objetivo 
    como hacer una etiqueta sin usar un reporteador ya que solo sera una simple etiqueta, intente usar PrintDocument
    pero no encontré mucha información de como dar un diseño por ejemplo texto alineado a la izquierda, texto alineado a la derecha, el codigo de barras centrado etc. eso es a lo que quisiera llegar  

    martes, 12 de noviembre de 2019 21:37
  • Sí, es complicado, por eso existen los profesionales programadores, y hasta cobran...je. Bueno de echo estuve un buen tiempo recreando tu escenario y te dejo un ejemplo, solo un ejemplo deberás adecuar las dimensiones ya que, por lo visto, son mucho más pequeñas que mi ejemplo, supongo que utilizarás rollo de impresión autoadhesiva. Ok si viste el ejemplo de la otra consulta ya sabrás como ejecutar PrintDocument.Print() entonces vamos a la creación de la impresión. Los datos vienen de una base de datos y alimentan un DataGridView mediante DataSource. Entonces comenzamos a imprimir los datos de cada columna iterando el DGV ej:

      int A = 0;
            private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
            {
                int Pos = 50;
                int Row = 10;
                for (int i = A; i < Dgv.Rows.Count - 1; i++)
                {
                    //................Código de barras.....................
                    label1.Text = Convert.ToString(Dgv[0, i].Value);
    
                    String PathTTF = @"C:\Users\Dirección\Documents\Codigode barras\fre3of9x.ttf";
                    PrivateFontCollection PFC = new PrivateFontCollection();
                    PFC.AddFontFile(PathTTF);
    
                    FontFamily NFont = PFC.Families[0];
                    Font Ft = new Font(NFont, 75);
                    label1.Font = Ft;
                    //................fin código de barras .................  
    
                    //-----------si el valór Row supera los 1130 (según tamaño de hoja) genera una nueva página-----------
                    if (Row >= 1130)
                    {
                        e.HasMorePages = true;
                        Row = 10;
                        A = i; //mantiene el valor de la fila DGV
                        break;
                      
                    }
                    //......................................................................................
    
                    //---------------------Impresión de los datos-------------------------------------------
                    DateTime dat = Convert.ToDateTime(Dgv[6, i].Value);
                    Rectangle rect = new Rectangle(Pos, Row, 600, 370);
                    Rectangle rect2 = new Rectangle(Pos + 4, Row + 4, 592, 362);
    
                    e.Graphics.DrawImage(pictureBox1.Image, Pos + 5, Row + 5, 60, 60);
                    e.Graphics.DrawRectangle(Pens.Black, rect);
                    e.Graphics.DrawRectangle(Pens.Black, rect2);
                    e.Graphics.DrawString("Fecha/Date: " + dat.ToShortDateString(), new Font("Verdana", 10, FontStyle.Bold), Brushes.Black, Pos + 70, Row + 70);
                    e.Graphics.DrawString("Hora/Time: " + dat.ToShortTimeString(), new Font("Verdana", 10, FontStyle.Bold), Brushes.Black, Pos + 400, Row + 70);
    
                    e.Graphics.DrawString("Código: " + Dgv[5, i].Value, new Font("Verdana", 10, FontStyle.Bold), Brushes.Black, Pos + 70, Row + 100);
                    e.Graphics.DrawString("Nº Pedido: " + Dgv[2, i].Value, new Font("Verdana", 10, FontStyle.Bold), Brushes.Black, Pos + 70, Row + 140);
                    e.Graphics.DrawString("Cliente: " + Dgv[1, i].Value, new Font("Verdana", 20, FontStyle.Regular), Brushes.Black, Pos + 10, Row + 180);
    
                    e.Graphics.DrawString("Máquina: " + Dgv[3, i].Value, new Font("Verdana", 10, FontStyle.Bold), Brushes.Black, Pos + 400, Row + 100);
                    e.Graphics.DrawString("Operador: " + Dgv[4, i].Value, new Font("Verdana", 12, FontStyle.Regular), Brushes.Black, Pos + 380, Row + 190);
    
                    e.Graphics.DrawString(label1.Text, Ft, Brushes.Black, Pos + 170, Row + 240);
                    e.Graphics.DrawString( Convert.ToString(Dgv[0, i].Value), new Font("Verdana", 11, FontStyle.Bold), Brushes.Black, Pos + 260, Row + 330);
                    //............................................................................
    
                    //.................volvemos a recorrer DGV--------------------------  
                    Row += 375;
    
                }
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                System.Drawing.Printing.PaperSize Hoja;
    
                Hoja = new System.Drawing.Printing.PaperSize("Oficio", 850, 1400);
            //PrintDocument1.DefaultPageSettings.PaperSize = Hoja
            printDocument1.Print();
            }
        

    Bien el resultado es


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗




    miércoles, 13 de noviembre de 2019 21:20
  • Muchas gracias era exactamente lo que buscaba solo que sin el DataGridView,  pero es lo de menos 
    voy a probar, Gracias amigo :D
    jueves, 14 de noviembre de 2019 14:46