Usuário com melhor resposta
Impressão Codigo de Barras

Pergunta
-
Bom dia, no meu código abaixo tenho um select que faço referencia a uma lista que faz impressão das minhas etiquetas, e neste mesmo select eu tenho um campo chamado CB.CB0_CODETI. Este campo esta preenchido com um valor já, agora na minha lista de impressão preciso que este campo seja impresso em formato de codigo de barras, ean128, é possivel se for por favor como faço este tipo de impressão direto no código.
Desde já agradeço.
segue abaixo meu codigo.
namespace MenuRelatorios
{
public partial class frmEtiquetas : Form
{
int largura;
int altura;
List<string> ListaImpEtiqueta = new List<string>();
string sNomeImpressora = System.Configuration.ConfigurationSettings.AppSettings["ImpressoraPadrao"];
public frmEtiquetas()
{
InitializeComponent();
}
private void frmEtiquetas_Load(object sender, EventArgs e)
{
}
private void btnPesquisar_Click(object sender, EventArgs e)
{
vizualização.Document = EtiquetaProdPS;
vizualização.InvalidatePreview();
}
public string retornaCodBarras(string txtNGuiaFrac)
{
string ret = string.Empty;
string connectionString = this.DataTable1TableAdapter.Connection.ConnectionString;
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
string strQuery = @" SELECT
SC.C2_NUM,
SB.B1_DESC,
SC.C2_XNPAIS,
CONVERT(VARCHAR(10), CAST( SC.C2_XDTFAB AS DATE),103) AS DATAF,
CONVERT(VARCHAR(10), CAST( SC.C2_XDTVALI AS DATE),103) AS DATAV,
SC.C2_XLOTEF,
SC.C2_XLOTE,
SB.B1_XDCB,
SB.B1_XCAS,
CAST(SB.B1_PESO AS NUMERIC(15, 3)) AS PESO,
SB.B1_XSEGUM,
SC.C2_XNOMFA,
CB.CB0_CODETI,
SC.C2_QUANT
FROM SC2020 AS SC
INNER JOIN SB1020 AS SB WITH (NOLOCK) ON SB.B1_COD = SC.C2_PRODUTO
INNER JOIN CB0020 AS CB WITH (NOLOCK) ON CB.CB0_LOTE = SC.C2_XLOTE
WHERE C2_NUM = '" + txtNGuiaFrac + "'";
using (SqlCommand command = new SqlCommand(strQuery, con))
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
reader.GetString(12);
ret = reader[12].ToString();
ListaImpEtiqueta.Add("Produto: " + (reader[1].ToString()) + " " +"N° Guia: " + reader[0].ToString());
ListaImpEtiqueta.Add("Fabricação: " +(reader[3].ToString()) + " " + "Validade: " + reader[4].ToString() + " " + "Qtda. : " + reader[9].ToString() + reader[10].ToString());
ListaImpEtiqueta.Add("Lote Fabr.: " + (reader[5].ToString()) + " " + "Lote Inter.: " + reader[6].ToString());
ListaImpEtiqueta.Add("Fabricante : " + (reader[11].ToString()) + " " + "País Orig.: " + reader[2].ToString());
ListaImpEtiqueta.Add("DCB: " + (reader[7].ToString()) + " " + reader[12].ToString());
break;
}
}
con.Close();
}
return ret;
}
private void txtNGuiaFrac_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Tab)
{
txtCodBarras.Text = retornaCodBarras(txtNGuiaFrac.Text);
txtQuant.Text = retornaQunat(txtNGuiaFrac.Text);
txtNGuiaFrac.Focus();
}
}
private void btnFechar_Click(object sender, EventArgs e)
{
Close();
}
private void btnImprimir_Click(object sender, EventArgs e)
{
EtiquetaProdPS.PrinterSettings.PrinterName = sNomeImpressora;
EtiquetaProdPS.Print();
}
private void EtiquetaProdPS_PrintPage(object sender, PrintPageEventArgs e)
{
Font letra = new Font("Aerial", 10, FontStyle.Regular, GraphicsUnit.Pixel);
SolidBrush cor = new SolidBrush(Color.Black);
Rectangle retangulo = new Rectangle(12, 36, largura, 30);
int y = 55;
foreach (string frase in ListaImpEtiqueta)
{
e.Graphics.DrawString(frase, letra, cor, new Point(15, y));
y += 15;
}
}
}
}
JUNIOR GUERREIRO T.I
Respostas
-
Você pode tentar isso
e.Graphics.DrawString(frase.Split(':')[1].ToString(), codBarras, cor, new Point(220, y));
Se ajudei Vote como Útil, se resolvi seu problema clique em Marcar como Resposta.
Daniel Ribeiro Arrais
Consultor Sênior
Site: www.danielarrais.com.br
Linkedin: http://www.linkedin.com/in/danielarrais
E-mail: arraishapkido@gmail.com
Skype: dani.arrais
- Marcado como Resposta Junior Guerreiro terça-feira, 31 de janeiro de 2017 10:54
-
Remove esta linha
e.Graphics.DrawString("Cod.: ", letra, cor, new Point(180, y));
Se ajudei Vote como Útil, se resolvi seu problema clique em Marcar como Resposta.
Daniel Ribeiro Arrais
Consultor Sênior
Site: www.danielarrais.com.br
Linkedin: http://www.linkedin.com/in/danielarrais
E-mail: arraishapkido@gmail.com
Skype: dani.arrais
- Marcado como Resposta Junior Guerreiro terça-feira, 31 de janeiro de 2017 10:55
-
Ah! ok.
Tem duas opções:
1- foreach (string frase in ListaImpEtiqueta)
{
e.Graphics.DrawString(frase, letra, cor, new Point(15, y));
y += 15;
}Neste código vc pode por um if e perguntar se a frase contem o texto cdb, se for verdadeiro você muda o valor da variável "letra" para a fonte EAN apenas para esse valor. Algo assim:
private void EtiquetaProdPS_PrintPage(object sender, PrintPageEventArgs e) { Font letra = new Font("Aerial", 10, FontStyle.Regular, GraphicsUnit.Pixel); Font fonteCodigoBarras = new Font("FonteEAN", 10, FontStyle.Regular, GraphicsUnit.Pixel); SolidBrush cor = new SolidBrush(Color.Black); Rectangle retangulo = new Rectangle(12, 36, largura, 30); int y = 55; foreach (string frase in ListaImpEtiqueta) { if (frase.contains("DCB")){ e.Graphics.DrawString("DCB: ", letra, cor, new Point(15, y)); e.Graphics.DrawString(frase, fonteCodigoBarras, cor, new Point(20, y)); } else e.Graphics.DrawString(frase, letra, cor, new Point(15, y)); y += 15; } }
2- Outra opção é criar um report. No report você muda a fonte do label onde vai mostrar o código de barra para a fonte do ean.
- Marcado como Resposta Junior Guerreiro terça-feira, 31 de janeiro de 2017 10:55
-
Olá!
Cara, não sei se é porque voltei do almoço mas não entendi o que vc precisa nessa ultima resposta :-)
No mais eu vi que vc me mandou uma copia do seu código que tem um erro:
Errado:
int y = 55; foreach (string frase in ListaImpEtiqueta) { if (frase.contains("DCB")) { e.Graphics.DrawString("DCB: ", letra, cor, new Point(15, y)); e.Graphics.DrawString(frase, codBarras, cor, new Point(20, y)); } else { e.Graphics.DrawString(frase, letra, cor, new Point(15, y)); y += 15; } }
Certo:
int y = 55; foreach (string frase in ListaImpEtiqueta) { if (frase.contains("DCB")){ e.Graphics.DrawString("DCB: ", letra, cor, new Point(15, y)); e.Graphics.DrawString(frase, fonteCodigoBarras, cor, new Point(20, y)); } else e.Graphics.DrawString(frase, letra, cor, new Point(15, y)); y += 15; }
Notou? O "y += 15;" esta fora do if.
- Marcado como Resposta Junior Guerreiro terça-feira, 31 de janeiro de 2017 10:55
-
Então Pablo vc tem skype, podemos tc por lá ai tento te explicar melhor seria possivel, e que não quero que saia o nome do Campo na impressão
if (frase.contains("DCB")
JUNIOR GUERREIRO T.I
- Editado Junior Guerreiro segunda-feira, 30 de janeiro de 2017 17:00
- Marcado como Resposta Junior Guerreiro terça-feira, 31 de janeiro de 2017 10:55
-
Junior,
Então, não está lendo porque como falei antes ai, esta linha de código esta com um erro:
e.Graphics.DrawString(frase, codBarras, cor, new Point(220, y));
Se vc debugar vai ver que a variável "frase" vem carregado com algo assim:
"COD: 1123233445556669977"
Mas vc apenas deve passar o código sem o "COD: ". Entende? Você tem que tratar essa string e somente enviar o numero sem o "COD: ".
- Marcado como Resposta Junior Guerreiro terça-feira, 31 de janeiro de 2017 10:54
Todas as Respostas
-
-
Pablo blz eu tenho já o codigo instalado, só não sei como colocar isso no meu código, sou novato ainda, se vc tiver algum video ou um passo a passou de como faço isso, de como coloco no meu codigo pra sair a impressão.
JUNIOR GUERREIRO T.I
-
Junior,
Vou te explicar o que eu fiz para funcionar. Baixei a fonte TT do ean. Logo instalei a fonte no sistema, o que pode ser feito com um duplo click no arquivo dela. Feito isto, você abre o visual studio, coloca uma label num form ou algo assim, troca a fonte dela para a fonte ean (que agora deve aparecer na lista de fontes instaladas). Insere um código numérico na label para testar, você vai ver que vai mostrar o código de barras e não os números.
É isto mesmo?
-
Isso mesmo eu já fiz no meu campo, vou te mandar meu form, o problema e que não estou consehuindo colocar no meu codigo para sair na impressão, porque estou usando pra imprimir o printdocument.
segue meu form, este form e o código acima que coloquei na pergunta.
JUNIOR GUERREIRO T.I
- Editado Junior Guerreiro segunda-feira, 30 de janeiro de 2017 12:19
-
Olá Junior Guerreiro
Segue o link
Se ajudei Vote como Útil, se resolvi seu problema clique em Marcar como Resposta.
Daniel Ribeiro Arrais
Consultor Sênior
Site: www.danielarrais.com.br
Linkedin: http://www.linkedin.com/in/danielarrais
E-mail: arraishapkido@gmail.com
Skype: dani.arrais
-
Ah! ok.
Tem duas opções:
1- foreach (string frase in ListaImpEtiqueta)
{
e.Graphics.DrawString(frase, letra, cor, new Point(15, y));
y += 15;
}Neste código vc pode por um if e perguntar se a frase contem o texto cdb, se for verdadeiro você muda o valor da variável "letra" para a fonte EAN apenas para esse valor. Algo assim:
private void EtiquetaProdPS_PrintPage(object sender, PrintPageEventArgs e) { Font letra = new Font("Aerial", 10, FontStyle.Regular, GraphicsUnit.Pixel); Font fonteCodigoBarras = new Font("FonteEAN", 10, FontStyle.Regular, GraphicsUnit.Pixel); SolidBrush cor = new SolidBrush(Color.Black); Rectangle retangulo = new Rectangle(12, 36, largura, 30); int y = 55; foreach (string frase in ListaImpEtiqueta) { if (frase.contains("DCB")){ e.Graphics.DrawString("DCB: ", letra, cor, new Point(15, y)); e.Graphics.DrawString(frase, fonteCodigoBarras, cor, new Point(20, y)); } else e.Graphics.DrawString(frase, letra, cor, new Point(15, y)); y += 15; } }
2- Outra opção é criar um report. No report você muda a fonte do label onde vai mostrar o código de barra para a fonte do ean.
- Marcado como Resposta Junior Guerreiro terça-feira, 31 de janeiro de 2017 10:55
-
-
Você precisa passar o nome da Font que será impresso!
No exemplo isso é mostrado!
Se ajudei Vote como Útil, se resolvi seu problema clique em Marcar como Resposta.
Daniel Ribeiro Arrais
Consultor Sênior
Site: www.danielarrais.com.br
Linkedin: http://www.linkedin.com/in/danielarrais
E-mail: arraishapkido@gmail.com
Skype: dani.arrais
-
-
Pablo pode me ajudar com o erro abaixo, quando jogo seu codigo ele não acha o contains
int y = 55;
foreach (string frase in ListaImpEtiqueta)
{
if (frase.contains("DCB"))
{
e.Graphics.DrawString("DCB: ", letra, cor, new Point(15, y));
e.Graphics.DrawString(frase, codBarras, cor, new Point(20, y));
}
else
{
e.Graphics.DrawString(frase, letra, cor, new Point(15, y));
y += 15;
}
JUNIOR GUERREIRO T.I
- Editado Junior Guerreiro segunda-feira, 30 de janeiro de 2017 13:29
-
-
-
-
Sim add sim
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Drawing.Printing;
using System.Management;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Linq;JUNIOR GUERREIRO T.I
-
Bom, vc tem o using system.linq duas vezes. Tira um deles.
Se o erro persiste tem que ver o que pode estar acontecendo...
Abre um projeto de console novo e tenta fazer este exemplo:
-
Ja acertei aqui Pablo eu quem estava fazendo errado, novato e complicado, mas assim tem um detalhe que preciso te perguntar o campo que quero imprimir o codigo de barras não e o campo CAS e sim um campo que não estou colocando nome, o campo correto e este aqui " + reader[12].ToString());
eu não estou colocando nome nele na minha list, pra colocar este campo no codigo que vc me mandou no lugar do CAS.JUNIOR GUERREIRO T.I
-
Olá!
Cara, não sei se é porque voltei do almoço mas não entendi o que vc precisa nessa ultima resposta :-)
No mais eu vi que vc me mandou uma copia do seu código que tem um erro:
Errado:
int y = 55; foreach (string frase in ListaImpEtiqueta) { if (frase.contains("DCB")) { e.Graphics.DrawString("DCB: ", letra, cor, new Point(15, y)); e.Graphics.DrawString(frase, codBarras, cor, new Point(20, y)); } else { e.Graphics.DrawString(frase, letra, cor, new Point(15, y)); y += 15; } }
Certo:
int y = 55; foreach (string frase in ListaImpEtiqueta) { if (frase.contains("DCB")){ e.Graphics.DrawString("DCB: ", letra, cor, new Point(15, y)); e.Graphics.DrawString(frase, fonteCodigoBarras, cor, new Point(20, y)); } else e.Graphics.DrawString(frase, letra, cor, new Point(15, y)); y += 15; }
Notou? O "y += 15;" esta fora do if.
- Marcado como Resposta Junior Guerreiro terça-feira, 31 de janeiro de 2017 10:55
-
Então Pablo vc tem skype, podemos tc por lá ai tento te explicar melhor seria possivel, e que não quero que saia o nome do Campo na impressão
if (frase.contains("DCB")
JUNIOR GUERREIRO T.I
- Editado Junior Guerreiro segunda-feira, 30 de janeiro de 2017 17:00
- Marcado como Resposta Junior Guerreiro terça-feira, 31 de janeiro de 2017 10:55
-
Olá Junior Guerreiro
Manda o seu código como esta neste momento!
Se ajudei Vote como Útil, se resolvi seu problema clique em Marcar como Resposta.
Daniel Ribeiro Arrais
Consultor Sênior
Site: www.danielarrais.com.br
Linkedin: http://www.linkedin.com/in/danielarrais
E-mail: arraishapkido@gmail.com
Skype: dani.arrais
-
Daniel este e meu codigo. Daniel ate estou imprimindo o codigo de barras como nosso amigo Pablo me orientou, agora estou testando com o coletro e não esta lendo o codigo de barras.
namespace MenuRelatorios
{
public partial class frmEtiquetas : Form
{
int largura;
int altura;
List<string> ListaImpEtiqueta = new List<string>();
string sNomeImpressora = System.Configuration.ConfigurationSettings.AppSettings["ImpressoraPadrao"];
public frmEtiquetas()
{
InitializeComponent();
}
private void frmEtiquetas_Load(object sender, EventArgs e)
{
}
private void btnPesquisar_Click(object sender, EventArgs e)
{
vizualização.Document = EtiquetaProdPS;
vizualização.InvalidatePreview();
}
public string retornaCodBarras(string txtNGuiaFrac)
{
string ret = string.Empty;
string connectionString = this.DataTable1TableAdapter.Connection.ConnectionString;
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
string strQuery = @" SELECT
SC.C2_NUM,
SB.B1_DESC,
SC.C2_XNPAIS,
CONVERT(VARCHAR(10), CAST( SC.C2_XDTFAB AS DATE),103) AS DATAF,
CONVERT(VARCHAR(10), CAST( SC.C2_XDTVALI AS DATE),103) AS DATAV,
SC.C2_XLOTEF,
SC.C2_XLOTE,
SB.B1_XDCB,
SB.B1_XCAS,
CAST(SB.B1_PESO AS NUMERIC(15, 3)) AS PESO,
SB.B1_XSEGUM,
SC.C2_XNOMFA,
CB.CB0_CODETI,
SC.C2_QUANT
FROM SC2020 AS SC
INNER JOIN SB1020 AS SB WITH (NOLOCK) ON SB.B1_COD = SC.C2_PRODUTO
INNER JOIN CB0020 AS CB WITH (NOLOCK) ON CB.CB0_LOTE = SC.C2_XLOTE
WHERE C2_NUM = '" + txtNGuiaFrac + "'";
using (SqlCommand command = new SqlCommand(strQuery, con))
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
reader.GetString(12);
ret = reader[12].ToString();
ListaImpEtiqueta.Add("Produto: " + (reader[1].ToString()) + " " +"N° Guia: " + reader[0].ToString());
ListaImpEtiqueta.Add("Fabricação: " +(reader[3].ToString()) + " " + "Validade: " + reader[4].ToString() + " " + "Qtda. : " + reader[9].ToString() + reader[10].ToString());
ListaImpEtiqueta.Add("Lote Fabr.: " + (reader[5].ToString()) + " " + "Lote Inter.: " + reader[6].ToString());
ListaImpEtiqueta.Add("Fabricante : " + (reader[11].ToString()) + " " + "País Orig.: " + reader[2].ToString());
ListaImpEtiqueta.Add("CAS: " + (reader[8].ToString()));
ListaImpEtiqueta.Add("DCB: " + (reader[7].ToString()) + " " + reader[12].ToString());
ListaImpEtiqueta.Add("Cod.: " + (reader[12].ToString()));
break;
}
}
con.Close();
}
return ret;
}
public string retornaQunat(string txtNGuiaFrac)
{
string ret = string.Empty;
string connectionString = this.DataTable1TableAdapter.Connection.ConnectionString;
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
string strQuery = @" SELECT
SC.C2_NUM,
SB.B1_DESC,
SC.C2_XNPAIS,
CONVERT(VARCHAR(10), CAST( SC.C2_XDTFAB AS DATE),103) AS DATAF,
CONVERT(VARCHAR(10), CAST( SC.C2_XDTVALI AS DATE),103) AS DATAV,
SC.C2_XLOTEF,
SC.C2_XLOTE,
SB.B1_XDCB,
SB.B1_XCAS,
CAST(SB.B1_PESO AS NUMERIC(15, 3)) AS PESO,
SB.B1_XSEGUM,
SC.C2_XNOMFA,
CB.CB0_CODETI,
SC.C2_QUANT
FROM SC2020 AS SC
INNER JOIN SB1020 AS SB WITH (NOLOCK) ON SB.B1_COD = SC.C2_PRODUTO
INNER JOIN CB0020 AS CB WITH (NOLOCK) ON CB.CB0_LOTE = SC.C2_XLOTE
WHERE C2_NUM = '" + txtNGuiaFrac + "'";
using (SqlCommand command = new SqlCommand(strQuery, con))
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
reader.GetDouble(13);
ret = reader[13].ToString();
break;
}
}
con.Close();
}
return ret;
}
private void txtNGuiaFrac_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Tab)
{
txtCodBarras.Text = retornaCodBarras(txtNGuiaFrac.Text);
txtQuant.Text = retornaQunat(txtNGuiaFrac.Text);
txtNGuiaFrac.Focus();
}
}
private void btnFechar_Click(object sender, EventArgs e)
{
Close();
}
private void btnImprimir_Click(object sender, EventArgs e)
{
EtiquetaProdPS.PrinterSettings.PrinterName = sNomeImpressora;
EtiquetaProdPS.Print();
}
private void EtiquetaProdPS_PrintPage(object sender, PrintPageEventArgs e)
{
Font codBarras = new Font("Bar-Code 39", 12);
Font letra = new Font("Aerial", 9, FontStyle.Regular, GraphicsUnit.Pixel);
SolidBrush cor = new SolidBrush(Color.Black);
Rectangle retangulo = new Rectangle(12, 36, largura, 30);
int y = 55;
foreach (string frase in ListaImpEtiqueta)
{
if (frase.Contains("Cod"))
{
e.Graphics.DrawString("Cod.: ", letra, cor, new Point(180, y));
e.Graphics.DrawString(frase, codBarras, cor, new Point(220, y));
}
else
{
e.Graphics.DrawString(frase, letra, cor, new Point(15, y));
y += 14;
}
}
}
}
}
JUNIOR GUERREIRO T.I
- Editado Junior Guerreiro segunda-feira, 30 de janeiro de 2017 17:14
-
Junior,
Então, não está lendo porque como falei antes ai, esta linha de código esta com um erro:
e.Graphics.DrawString(frase, codBarras, cor, new Point(220, y));
Se vc debugar vai ver que a variável "frase" vem carregado com algo assim:
"COD: 1123233445556669977"
Mas vc apenas deve passar o código sem o "COD: ". Entende? Você tem que tratar essa string e somente enviar o numero sem o "COD: ".
- Marcado como Resposta Junior Guerreiro terça-feira, 31 de janeiro de 2017 10:54
-
Pablo então esta imprimindo sim o codigo de barras como vc explicou acima como mostro na imagem abaixo.
int y = 55;
foreach (string frase in ListaImpEtiqueta)
{
if (frase.Contains("Cod"))
{
e.Graphics.DrawString("Cod.: ", letra, cor, new Point(180, y));
e.Graphics.DrawString(frase, codBarras, cor, new Point(220, y));
}
else
{
e.Graphics.DrawString(frase, letra, cor, new Point(15, y));
y += 14;
}JUNIOR GUERREIRO T.I
-
Você pode tentar isso
e.Graphics.DrawString(frase.Split(':')[1].ToString(), codBarras, cor, new Point(220, y));
Se ajudei Vote como Útil, se resolvi seu problema clique em Marcar como Resposta.
Daniel Ribeiro Arrais
Consultor Sênior
Site: www.danielarrais.com.br
Linkedin: http://www.linkedin.com/in/danielarrais
E-mail: arraishapkido@gmail.com
Skype: dani.arrais
- Marcado como Resposta Junior Guerreiro terça-feira, 31 de janeiro de 2017 10:54
-
Remove esta linha
e.Graphics.DrawString("Cod.: ", letra, cor, new Point(180, y));
Se ajudei Vote como Útil, se resolvi seu problema clique em Marcar como Resposta.
Daniel Ribeiro Arrais
Consultor Sênior
Site: www.danielarrais.com.br
Linkedin: http://www.linkedin.com/in/danielarrais
E-mail: arraishapkido@gmail.com
Skype: dani.arrais
- Marcado como Resposta Junior Guerreiro terça-feira, 31 de janeiro de 2017 10:55
-