Oi Fabio,
Eu hoje estou usando algo parecido.
O Problema é que não consigo imprimir na maioria das impressoras.
Note meu código:
public static string Imprimir(string conferente, int quantidade, int bonus, DateTime validade, int codigo, string produto, int placa, string nomeImpressora)
{
Conferente = conferente;
Quantidade = quantidade;
Bonus = bonus;
Validade = validade.ToString("dd/MM/yy");
Produto = produto;
Placa = placa;
Codigo = codigo;
NomeImpressora = nomeImpressora;
string Impressora = "";
foreach (var impressora in PrinterSettings.InstalledPrinters)
{
if (impressora.ToString().Contains(NomeImpressora))
Impressora = impressora.ToString();
}
if (Impressora.Length <= 0)
return "Erro. A impressoara: " + NomeImpressora + " não foi encontrada!";
try
{
PrintDocument pd = new PrintDocument();
//pd.OriginAtMargins = true;
//pd.DefaultPageSettings.PrinterSettings.PrintToFile = true;
pd.PrinterSettings.PrinterName = Impressora;
//pd.DefaultPageSettings.PaperSize = new PaperSize("PapelCustomizado", 394, 394);
Margins margins = new Margins(0, 1, 50, 1);
pd.DefaultPageSettings.Margins = margins;
pd.PrinterSettings.Copies = 1;
//pd.DefaultPageSettings.PrinterSettings.PrintFileName = caminho;
// pd.PrintController = new StandardPrintController();
pd.PrintPage += new PrintPageEventHandler(printPage);
if (pd.PrinterSettings.IsValid)
{
pd.Print();
}
}
catch (Exception e)
{
return "Impresssora: " + NomeImpressora + " / " + Impressora + " Erro: " + e.Message.ToString();
}
return Impressora;
}
private static void printPage(object o, PrintPageEventArgs ev)
{
float linesPerPage = 0;
int count = 0;
float leftMargin = ev.MarginBounds.Left;
float topMargin = ev.MarginBounds.Top;
float printAreaHeight = ev.MarginBounds.Height;
float printAreaWidth = ev.MarginBounds.Width;
string line = null;
float yPos = topMargin;
int charactersFitted = 0;
int linesFilled = 0;
SizeF theSize = new SizeF();
Font printFont = new Font("Arial", 30, FontStyle.Bold);
StringFormat sf = new StringFormat();
sf.LineAlignment = StringAlignment.Center;
sf.Alignment = StringAlignment.Center;
SizeF layoutSize = new SizeF(printAreaWidth, printAreaHeight);
// Calculate the number of lines per page.
linesPerPage = printAreaHeight / printFont.GetHeight(ev.Graphics);
// Print each line of the array.
line = "Conf.: " + Conferente + " / Bônus: " + Bonus; ;
// Obtém o tamanho da string "line: "
theSize = ev.Graphics.MeasureString(line, printFont, layoutSize, sf, out charactersFitted, out linesFilled);
// Desenha o texto Conferente.
ev.Graphics.DrawString(line, printFont, Brushes.Black, new RectangleF(0.0F, yPos, theSize.Width, theSize.Height), sf);
//incrementa a posicao vertical
yPos += (0 + linesFilled) * printFont.GetHeight(ev.Graphics);
line = " " + Quantidade;
theSize = ev.Graphics.MeasureString(line, printFont4, layoutSize, new StringFormat(), out charactersFitted, out linesFilled);
ev.Graphics.DrawString(line, printFont4, Brushes.Black, new RectangleF(1.0F, yPos, theSize.Width, theSize.Height), sf);
yPos += (1 + linesFilled) * printFont.GetHeight(ev.Graphics);
count += linesFilled + 1;
line = " Qtd. (CX) ";
theSize = ev.Graphics.MeasureString(line, printFont, layoutSize, new StringFormat(), out charactersFitted, out linesFilled);
ev.Graphics.DrawString(line, printFont, Brushes.Black, new RectangleF(1.0F, yPos, theSize.Width, theSize.Height), sf);
yPos += (1 + linesFilled) * printFont.GetHeight(ev.Graphics);
count += linesFilled + 1;
// If more lines exist, print another page.
if (count > linesPerPage)
ev.HasMorePages = true;
else
ev.HasMorePages = false;
}
}
}