Beruflich Dokumente
Kultur Dokumente
30
09 2015 Impresso direto na impressora com C#
ANDREALVESLIMA | .NET, RELATRIOS, SOFTWARE DEVELOPMENT, VISUAL STUDIO,
WINDOWS FORMS | 32
Voc sabe muito bem que tempo dinheiro. Mas, Andr, o que isso tem a ver com o artigo de
hoje? Tem tudo a ver! Muitos usurios de sistemas no querem ficar perdendo tempo vendo o
preview da impresso se eles sabem exatamente o que vai ser impresso. Acontece com
usurios das aplicaes que eu desenvolvi e garanto que deve acontecer com os usurios da
sua aplicao. Tanto que um dos inscritos da minha newsletter sugeriu que eu abordasse a
impresso direto na impressora com C#. E eu pensei: por que no?
2010 - 2015
Email Address*
32
converted by Web2PDFConvert.com
Nome
Sobrenome
* = campo obrigatrio
CADASTRAR
powered by MailChimp!
Relatrios
Feito isso, vamos implementar o cdigo para fazer a impresso do texto direto na impressora,
sem o preview. A classe que temos que utilizar para implementar essa funcionalidade a Report Viewer
PrintDocument. Essa classe utiliza o evento PrintPage para gerenciar a impresso, ou seja, na
Reporting Services
implementao desse evento, voc precisa controlar o que deve ser impresso em cada uma
das pginas: Software Development
TFS
Viagens
Visual Studio
Windows Forms
converted by Web2PDFConvert.com
1 private void imprimirButton_Click(object sender, EventArgs e) WinRT
2 {
3 using (var printDocument = new System.Drawing.Printing.PrintDocument())
WPF
4 {
5 printDocument.PrintPage += printDocument_PrintPage; Xamarin
6 printDocument.PrinterSettings.PrinterName = impressoraComboBox.SelectedItem.ToString();
7 printDocument.Print();
8 }
9 }
10
11 void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
12 { Arquivos
13 var printDocument = sender as System.Drawing.Printing.PrintDocument;
14
15 if (printDocument != null)
16 { [+]
17 using (var font = new Font("Times New Roman", 14)) 2017
18 using (var brush = new SolidBrush(Color.Black))
19 {
20 e.Graphics.DrawString( [+]
21 impressaoTextBox.Text,
22 font, 2016
23 brush,
24 new RectangleF(0, 0, printDocument.DefaultPageSettings.PrintableArea.Width,
[] printDocument.Def
25 }
26 } 2015
27 }
dezembro
Para testar o cdigo, execute a aplicao, escolha uma impressora no ComboBox, digite um novembro
texto na caixa de texto e clique em Imprimir:
outubro
setembro
agosto
julho
junho
maio
abril
maro
fevereiro
janeiro
[+]
2014
[+]
2013
[+]
2012
[+]
2011
[+]
2010
[+]
2009
[+]
2008
[+]
2007
A propsito, voc sabia que o Word consegue gerar textos de exemplo (esse que comea em
converted by Web2PDFConvert.com
Lorem ipsum)? Aprenda como neste link. [+]
2006
E se no couber em uma pgina?
Se o contedo da caixa de texto no couber em uma pgina, somente a primeira pgina ser
impressa. E como conseguimos ajustar o cdigo para que ele se comporte corretamente
independentemente do nmero de pginas? Para isso, temos que alterar um pouco o cdigo
de forma que somente o texto que cabe em cada pgina seja impresso. Como fazer isso? Veja
o resultado:
1 private string _texto;
2
3 private void imprimirButton_Click(object sender, EventArgs e)
4 {
5 using (var printDocument = new System.Drawing.Printing.PrintDocument())
6 {
7 printDocument.PrintPage += printDocument_PrintPage;
8 printDocument.PrinterSettings.PrinterName = impressoraComboBox.SelectedItem.ToString();
9 _texto = impressaoTextBox.Text;
10 printDocument.Print();
11 }
12 }
13
14 void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
15 {
16 var printDocument = sender as System.Drawing.Printing.PrintDocument;
17
18 if (printDocument != null)
19 {
20 using (var fonte = new Font("Times New Roman", 14))
21 using (var brush = new SolidBrush(Color.Black))
22 {
23 int caracteresNaPagina = 0;
24 int linhasPorPagina = 0;
25
26 e.Graphics.MeasureString(
27 _texto, fonte, e.MarginBounds.Size, StringFormat.GenericTypographic,
28 out caracteresNaPagina, out linhasPorPagina);
29
30 e.Graphics.DrawString(
31 _texto.Substring(0, caracteresNaPagina),
32 fonte,
33 brush,
34 e.MarginBounds);
35
36 _texto = _texto.Substring(caracteresNaPagina);
37
38 e.HasMorePages = _texto.Length > 0;
39 }
40 }
41 }
Como voc pode ver, agora temos uma varivel no nvel do formulrio chamada _texto.
Essa varivel guardar sempre o texto que est faltando imprimir. Portanto, quando clicamos
no boto Imprimir, ns guardamos o texto completo da caixa de texto nessa varivel.
Depois, conforme formos imprimindo o texto de cada pgina, iremos ajustando o valor dessa
varivel para que ela guarde somente o texto que est faltando.
E como que medimos a quantidade de texto que cabe em uma pgina? Fcil! s
utilizarmos o mtodo MeasureString da classe Graphics. Esse mtodo recebe o texto, a fonte e
as dimenses da rea disponvel para impresso, retornando a quantidade de caracteres e
linhas que conseguimos imprimir nessa rea:
1 int caracteresNaPagina = 0;
2 int linhasPorPagina = 0;
3
4 e.Graphics.MeasureString(
5 _texto, fonte, e.MarginBounds.Size, StringFormat.GenericTypographic,
6 out caracteresNaPagina, out linhasPorPagina);
Por fim, a outra alterao importante na implementao do evento PrintPage foi feita na
ltima linha, onde indicamos se ainda temos outra pgina para imprimir ou no (propriedade
HasMorePages). Devemos configurar essa propriedade como true caso ainda tenhamos texto
para ser impresso (Length maior que zero).
converted by Web2PDFConvert.com
Imprimindo imagens e formas geomtricas
Da mesma forma que conseguimos imprimir texto utilizando a classe PrintDocument, ns
conseguimos imprimir imagens e formas geomtricas tambm. Para isso, ao invs de
utilizarmos o mtodo DrawString, temos que utilizar os mtodos DrawImage ou Draw*** (onde
*** o nome da figura geomtrica que voc quer desenhar).
Por exemplo, para imprimirmos uma imagem do arquivo logo.png (localizada no mesmo
diretrio da aplicao), poderamos utilizar o seguinte cdigo:
1 void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
2 {
3 var printDocument = sender as System.Drawing.Printing.PrintDocument;
4
5 if (printDocument != null)
6 {
7 e.Graphics.DrawImage(Image.FromFile("logo.png"), new Point(5, 5));
8 }
9 }
converted by Web2PDFConvert.com
1 e.Graphics.DrawPolygon(
2 new Pen(Color.Red),
3 new[]
4 {
5 new Point(30, 30),
6 new Point(80, 150),
7 new Point(20, 70),
8 new Point(100, 100),
9 new Point(30, 30)
10 });
How to print the content of a RichTextBox control by using Visual C# .NET or Visual C# 2005
Impresso matricial
Algumas pessoas j me perguntaram como fazer para imprimir diretamente na porta LPT1, a
fim de imprimir texto puro em impressoras matriciais. Sempre que algum me pergunta isso,
eu encaminho o link para o componente que o Carlos dos Santos desenvolveu, que
implementa justamente essa funcionalidade:
Concluindo
Normalmente, quando queremos imprimir informaes a partir dos nossos sistemas,
utilizamos alguma ferramenta de gerao de relatrios (como Report Viewer ou Crystal
Reports). Porm, em algumas situaes precisamos ter o controle total do contedo que ser
impresso, principalmente as posies onde as informaes sero impressas e se queremos ou
no exibir um preview antes de imprimir. Nesse artigo voc aprendeu a imprimir textos,
imagens e figuras geomtricas diretamente na impressora. Dessa forma, nas situaes em que
voc precisar desse tipo de controle total da sua impresso, voc saber como proceder.
E voc, j teve que fazer algo parecido? Como voc acabou resolvendo essa situao? Da
mesma forma que eu resolvi ou de alguma outra maneira? Conte nos comentrios como foram
as suas experincias com a impresso de informaes em aplicativos desenvolvidos com o
.NET Framework.
Antes de me despedir, convido voc a inscrever-se na minha newsletter. Ao fazer isso, voc
receber um e-mail toda semana sobre o artigo publicado, ficar sabendo em primeira mo
sobre o artigo da prxima semana e receber tambm dicas bnus que eu s compartilho
por e-mail. Alm disso, voc j deve ter percebido que eu recebo muitas sugestes de temas e
eu costumo dar prioridade s sugestes vindas de inscritos da minha newsletter. Inscreva-se
aqui ou utilizando o formulrio logo abaixo.
At a prxima!
converted by Web2PDFConvert.com
Andr Lima
*
Nome
Sobrenome
Powered by MailChimp
INSCREVA-SE!
Related Posts
PERISCOPE REPLAY: 3 IMPORTANTES LIES QUE EU APRENDI COM O LIVRO DO THE WORK (STEVEN
PRESSFIELD)
PERISCOPE REPLAY: PROGRAMADORES(AS), 3 DICAS RPIDAS PARA DEIXAR O SEU CDIGO MAIS LIMPO
converted by Web2PDFConvert.com
ajuda a todos ns.
andrealveslima disse:
10 de dezembro de 2015 s 6:20
Extending RichTextBox
Telerik RadRichTextEditor
Abrao!
Andr Lima
RESPONDER
Estou tentando fazer impressao direta mais em relatorios com report view.
Voce tem alguma dica quem saber criar um novo artigo sobre..
andrealveslima disse:
18 de maio de 2016 s 5:59
Como assim impresso direta pelo Report Viewer? Voc quer imprimir o relatrio
direto sem mostrar o preview? Caso seja isso, talvez este artigo te ajude:
Um outro artigo que pode te ajudar este aqui que eu publiquei umas
semanas atrs:
Nele eu mostro como exportar o relatrio para PDF sem o preview.. Talvez seja
til para voc tambm..
converted by Web2PDFConvert.com
Enfim, d uma olhada nesses links e depois me avisa se te ajudou ou no..
Abrao!
Andr Lima
RESPONDER
andrealveslima disse:
19 de maio de 2016 s 5:46
Beleza Francisco!
Abrao!
Andr Lima
RESPONDER
andrealveslima disse:
23 de maio de 2016 s 14:35
Ol Francisco!
converted by Web2PDFConvert.com
Abrao!
Andr Lima
andrealveslima disse:
24 de maio de 2016 s 13:55
Ol Francisco,
Abrao!
Andr Lima
Leonardo disse:
2 de junho de 2016 s 16:06
andrealveslima disse:
3 de junho de 2016 s 14:04
converted by Web2PDFConvert.com
Se isso no te ajudar, sugiro que voc poste essa sua pergunta nos fruns da
MSDN, categoria desenvolvimento web:
Abrao!
Andr Lima
RESPONDER
Leonardo disse:
3 de junho de 2016 s 14:09
andrealveslima disse:
3 de junho de 2016 s 14:33
Valeu Leonardo!
Abrao!
Andr Lima
RESPONDER
Ol Andr, excelente post. Estou procurando como listar impressoras de rede, mesmo
as que no esto instaladas e exibir em uma lista. Voc sabe como faz?
andrealveslima disse:
23 de setembro de 2016 s 9:37
Nunca precisei fazer isso, mas, fui procurar aqui para ver se conseguia fazer..
Encontrei estes dois links com duas solues:
converted by Web2PDFConvert.com
Consegui compilar os dois, mas, o primeiro retorna uma lista com todos os
recursos da rede (impressoras ou no), s que no consegui encontrar um meio
de s separar as impressoras.. J o segundo, d um erro quando tento executar
(The specified domain either does not exist or could not be contacted)..
Mas, por que voc est querendo listar mesmo as impressoras no instaladas?
Que eu saiba, o Windows no vai deixar voc imprimir em uma impressora que
no esteja instalada no seu computador..
Abrao!
Andr Lima
RESPONDER
andrealveslima disse:
30 de setembro de 2016 s 8:45
Ol Danilo!
Abrao!
Andr Lima
RESPONDER
Giovana disse:
10 de novembro de 2016 s 12:42
andrealveslima disse:
11 de novembro de 2016 s 8:56
converted by Web2PDFConvert.com
How can I send a file document to the printer and have it print?
Abrao!
Andr Lima
RESPONDER
[] dias atrs eu recebi um comentrio no meu artigo sobre impresso direta com C#
perguntando se seria possvel imprimirmos um formulrio no Windows Forms. Eu sabia
que isso era []
RESPONDER
Ol Andr boa tarde, voc saberia me dizer como eu envio um report.rdcl montado
para a impressora direto sem o preview?
RESPONDER
andrealveslima disse:
23 de janeiro de 2017 s 15:59
Ol Diego!
Abrao!
Andr Lima
RESPONDER
andrealveslima disse:
26 de janeiro de 2017 s 6:25
converted by Web2PDFConvert.com
Ol novamente, Diego! Obrigado pelo retorno! Fico feliz que
tenha funcionado.. :)
Abrao!
Andr Lima
RESPONDER
andrealveslima disse:
20 de abril de 2017 s 21:28
Cara, impresso direta um jogo de pacincia.. A nica coisa que podemos fazer
posicionar a impresso na coordenada correta na pgina.. No caso do
formulrio contnuo, apesar das pginas estarem grudadas eu acredito que
para o PrintDocument voc teria que considerar pginas separadas, ajustando a
coordenada da impresso adequadamente..
Voc j tentou implementar esse tipo de impresso e no deu certo? Qual que
foi o problema exatamente?
Abrao!
Andr Lima
RESPONDER
Ol.
No meu caso a primeira impresso casa perfeitamente no formulrio,
porm as impresses seguintes comeam a sair do posicionamento,
chegando a determinado momento estar totalmente fora da rea correta
do formulrio.
andrealveslima disse:
21 de abril de 2017 s 13:20
Ol Fabio!
converted by Web2PDFConvert.com
How to find the actual printable area? (PrintDocument)
Abrao!
Andr Lima
RESPONDER
andrealveslima disse:
3 de maio de 2017 s 10:41
Ol Fabio!
Abrao!
Andr Lima
RESPONDER
andrealveslima disse:
15 de maio de 2017 s 8:41
Abrao!
Andr Lima
converted by Web2PDFConvert.com
O seu endereo de e-mail no ser publicado. Campos obrigatrios so marcados com
*
Comentrio
Nome *
E-mail *
Site
PUBLICAR COMENTRIO
Notifique-me sobre
novos comentrios
por e-mail.
Notifique-me sobre
novas publicaes
por e-mail.
Subscribe
converted by Web2PDFConvert.com