2
respostas

Imprimir direto para impressora

Eu tenho um aplicativo em c# Core 6 que necessita fazer uma impressão simples, de uma pagina, direto para impressora. A impressora esta instalada no servidor do aplicativo.

Eu uso o PrinterSettings.InstalledPrinters para pegar o nome da impressora que esta instalada.

mas não estou conseguindo imprimir direto para ela.

A impressão deve ocorre no ato que o código de barras de um produto é lido pelo aplicativo. neste momento os dados do produto devem ser impressos, em segundo plano, direto para a impressora.

Alguém tem alguma ideia?

Eu estou usando o PrintDocument PrinterSettings PrintPageEventHandler

mas não tem suporte para o Core... assim eu uso uma parte do .net framework.

Então preciso fazer isso usando o Core 6 ou 7.

2 respostas

Oswaldo,

Já pesquisou sobre estes links?

===============================================================

Impressão direto na impressora com C#

ANDREALVESLIMA | .NET, RELATÓRIOS, SOFTWARE DEVELOPMENT, VISUAL STUDIO, WINDOWS FORMS

http://www.andrealveslima.com.br/blog/index.php/2015/09/30/impressao-direto-na-impressora-com-c/

===============================================================

C# - Imprimindo em uma aplicação Windows Forms

https://macoratti.net/09/09/c_prn1.htm

===============================================================

What's the best way to get the default printer in .NET

Asked 14 years, 4 months ago / Modified 3 years, 8 months ago

https://stackoverflow.com/questions/86138/whats-the-best-way-to-get-the-default-printer-in-net

===============================================================

PrinterSettings Class

public void Printing(string printer) {
  try {
    streamToPrint = new StreamReader (filePath);
    try {
      printFont = new Font("Arial", 10);
      PrintDocument pd = new PrintDocument(); 
      pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
      // Specify the printer to use.
      pd.PrinterSettings.PrinterName = printer;

      if (pd.PrinterSettings.IsValid) {
         pd.Print();
      } 
      else {    
         MessageBox.Show("Printer is invalid.");
      }
    } 
    finally {
      streamToPrint.Close();
    }
  } 
  catch(Exception ex) {
    MessageBox.Show(ex.Message);
  }
}

https://learn.microsoft.com/en-us/dotnet/api/system.drawing.printing.printersettings?view=windowsdesktop-7.0

===============================================================

[]'s,

Fabio I.

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;
        }    
    }
}