C# - Imprimindo um arquivo texto


 Hoje vamos recordar como imprimir um arquivo texto usando a linguagem C#.

Este é um artigo para quem iniciou com a linguagem C# agora e precisa imprimir um arquivo em uma impressora selecionada.

No artigo veremos como selecionar uma impressora e um arquivo texto e então exibir uma prévia da impressão do arquivo.

Vamos usar os recursos da classe PrintDocument que define um objeto reutilizável que envia a saída para uma impressora ao imprimir usando um aplicativo do Windows Forms.

Para saber mais veja este artigo:  C# - Imprimindo com PrintDocument - Macoratti

Criando o projeto Windows Forms no VS 2017

Abra o VS 2017 Community e crie um projeto Windows Forms com o nome : CShpImpressao.

A seguir, a partir da ToolBox inclua os seguintes controles no formulário Form1.cs :

Disponha os controles conforme mostrado no leiaute abaixo:

Definindo o código do formulário

No início do formulário vamos declarar uma variável privada do tipo string para receber o conteúdo do arquivo selecionado para impressão:

private string conteudoArquivoSelecionado;

No evento Load do formulário vamos carregar o controle Combobox para exibir as impressoras instaladas e definir o arquivo para impressão como sendo o arquivo Form1.cs do projeto.

       private void Form1_Load(object sender, EventArgs e)
        {
            // Localiza e carrega as impressoras instaladas
            foreach (string printer in PrinterSettings.InstalledPrinters)
            {
                cboImpressoras.Items.Add(printer);
            }
            //define a impressora padrão
            try
            {
                PrinterSettings settings = new PrinterSettings();
                cboImpressoras.Text = settings.PrinterName;
            }
            catch
            {
                MessageBox.Show("Ocorreu um erro ao selecionar a impressora...");
            }
            // Seleciona o arquivo para impressão
            // Vamos selecionar o arquivo Form1.cs
            string file_path = Application.StartupPath;
            if (file_path.EndsWith(@"\bin\Debug"))
                file_path = file_path.Substring(0, file_path.Length - 10);
            if (file_path.EndsWith(@"\bin\Release"))
                file_path = file_path.Substring(0, file_path.Length - 12);
            if (file_path.EndsWith(@"\"))
                file_path = file_path.Substring(0, file_path.Length - 1);
            file_path += @"\Form1.cs";
            txtArquivo.Text = file_path;
        }

No evento Click do botão para selecionar o arquivo inclua o código abaixo:

    private void btnSelecionaArquivo_Click(object sender, EventArgs e)
    {
            ofdlg1.FileName = txtArquivo.Text;
            if (ofdlg1.ShowDialog() == DialogResult.OK)
            {
                txtArquivo.Text = ofdlg1.FileName;
            }
        }

Após selecionar um arquivo, ao clicar no botão Visualizar Impressão vamos obter o conteúdo do arquivo selecionado e chamar o diálogo para visualizar a impressão.

Assim, no evento Click do botão btnVisualizarImpressao inclua o código abaixo:

       private void btnVisualizarImpressao_Click(object sender, EventArgs e)
        {
            // le o conteúdo do arquivo
            try
            {
                conteudoArquivoSelecionado = File.ReadAllText(txtArquivo.Text).Trim();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro na leitura do arquivo :  " + txtArquivo.Text +
                    ".\n" + ex.Message);
                return;
            }
            // Exibe o díálogo de visualização da impressão
            ppvdlg1.ShowDialog();
        }

Para poder exibir a impressão temos que definir o código no evento PrintPage do controle PrintDocument conforme a seguir:

 private void pdc1_PrintPage(object sender, PrintPageEventArgs e)
        {
            // Define uma fonte para imprimir o arquivo
            using (Font font = new Font("Courier New", 10))
            {
                // Alinhando o texto no arquivo
                using (StringFormat string_format = new StringFormat())
                {
                    //Verifica quanto falta de texto para ajustar
                    SizeF leiaute_Area = new SizeF(e.MarginBounds.Width, e.MarginBounds.Height);
                    int chars_Ajustado, linhas_Ajustadas;
                    e.Graphics.MeasureString(conteudoArquivoSelecionado, font, leiaute_Area, string_format,out chars_Ajustado, out linhas_Ajustadas);
                    // Imprime o texto ajustado
                    e.Graphics.DrawString(conteudoArquivoSelecionado.Substring(0, chars_Ajustado),
                                          font, Brushes.Black, e.MarginBounds,string_format);
                    // Remove o texto impresso da string
                    conteudoArquivoSelecionado = conteudoArquivoSelecionado.Substring(chars_Ajustado).Trim();
                }
            }
            // verifica completou a impressao
            e.HasMorePages = conteudoArquivoSelecionado.Length > 0;
        }

Executando o projeto teremos o seguinte resultado:

1- O formulário inicialmente exibindo as impressoras e o arquivo Form1.cs para impressão:

Selecionando uma impressora e clicando no botão Visualizar Impressão temos a visualização da impressão conforme abaixo:

Pegue o projeto completo aqui: CShpImpressao.zip

"Porque o coração deste povo está endurecido,E ouviram de mau grado com seus ouvidos,E fecharam seus olhos;Para que não vejam com os olhos,E ouçam com os ouvidos,e compreendam com o coração,e se convertam,e eu os cure."
Mateus 13:15

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti