SYSTEM DRAWING PRINTIG - DIFICULDADE NA IMPRESSAO
Bom dia,
Estou com dificuldade de imprimir mais que uma página utilizando o comando e.hasmorepages. Ou imprime somente em uma página ou gera várias páginas com o mesmo conteúdo só parando de imprimir quando cancelamos o relatório.
Abaixo o código que estou utilizando. (não estou preocupado ainda com a impressão do cabeçalho em todas as páginas)
Private Sub m_PrintDocument_PrintPage(sender As Object, e As PrintPageEventArgs) Handles m_PrintDocument.PrintPage
[ô]Variaveis das linhas
Dim LinhasPorPagina As Single = 0
Dim PosicaoDaLinha As Single = 0
Dim LinhaAtual As Single = 0
Dim PaginaAtual As Integer = 0
[ô]Variaveis das margens
Dim MargemEsquerda As Single = e.MarginBounds.Left
Dim MargemSuperior As Single = e.MarginBounds.Top + 100
Dim MargemDireita As Single = e.MarginBounds.Right
Dim MargemInferior As Single = e.MarginBounds.Bottom
Dim CanetaDaImpressora As Pen = New Pen(Color.Black, 1)
Dim j As Integer = 200
[ô]Variaveis das fontes
Dim FonteNegrito As Font
Dim FonteTitulo As Font
Dim FonteSubTitulo As Font
Dim FonteRodape As Font
Dim FonteNormal As Font
[ô]define efeitos em fontes
FonteNegrito = New Font([Ô]Arial[Ô], 9, FontStyle.Bold)
FonteTitulo = New Font([Ô]Arial[Ô], 15, FontStyle.Bold)
FonteSubTitulo = New Font([Ô]Arial[Ô], 12, FontStyle.Bold)
FonteRodape = New Font([Ô]Arial[Ô], 8)
FonteNormal = New Font([Ô]Arial[Ô], 9)
[ô]define valores para linha atual e para linha da impressao
LinhaAtual = 0
Dim L As Integer = 0
[ô]Cabecalho
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, 60, MargemDireita, 60)
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, 160, MargemDireita, 160)
[ô]nome da empresa
e.Graphics.DrawString([Ô]Teste[Ô], FonteTitulo, Brushes.Blue, MargemEsquerda + 250, 80, New StringFormat())
[ô]Imagem
e.Graphics.DrawImage(Image.FromFile([Ô]C:\Temp\[Ô] & [Ô]xxxx.jpg[Ô]), 100, 68)
e.Graphics.DrawString(RelatorioTitulo & System.DateTime.Today, FonteSubTitulo, Brushes.Black, MargemEsquerda + 250, 120, New StringFormat())
LinhasPorPagina = CInt(e.MarginBounds.Height / FonteNormal.GetHeight(e.Graphics) - 9)
PaginaAtual = 1
ComandoSql = [Ô]select * from processo[Ô]
If preencheTabela(ComandoSql, [Ô]processo[Ô]) Then
For i As Integer = 0 To tabela.DefaultView.Count - 1
j += 30
e.Graphics.DrawString(tabela.Rows(i)(10).ToString(), New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 160, j)
e.Graphics.DrawString(tabela.Rows(i)(12).ToString(), New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 350, j)
LinhaAtual += 1
[ô]verifica se continua imprimindo
If (LinhaAtual > LinhasPorPagina) Then
e.HasMorePages() = True
i = 999
[ô]Rodape
[ô]e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, MargemInferior, MargemDireita, MargemInferior)
e.Graphics.DrawString(System.DateTime.Now.ToString(), FonteRodape, Brushes.Black, MargemEsquerda, MargemInferior, New StringFormat())
LinhaAtual += CInt(FonteNormal.GetHeight(e.Graphics))
LinhaAtual += 1
e.Graphics.DrawString([Ô]P gina : [Ô] & PaginaAtual, FonteRodape, Brushes.Black, MargemDireita - 50, MargemInferior, New StringFormat())
PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics))
[ô]Incrementa o n£mero da pagina
PaginaAtual += 1
LinhaAtual = 1
Else
e.HasMorePages = False
End If
Next
End If
End Sub
Estou com dificuldade de imprimir mais que uma página utilizando o comando e.hasmorepages. Ou imprime somente em uma página ou gera várias páginas com o mesmo conteúdo só parando de imprimir quando cancelamos o relatório.
Abaixo o código que estou utilizando. (não estou preocupado ainda com a impressão do cabeçalho em todas as páginas)
Private Sub m_PrintDocument_PrintPage(sender As Object, e As PrintPageEventArgs) Handles m_PrintDocument.PrintPage
[ô]Variaveis das linhas
Dim LinhasPorPagina As Single = 0
Dim PosicaoDaLinha As Single = 0
Dim LinhaAtual As Single = 0
Dim PaginaAtual As Integer = 0
[ô]Variaveis das margens
Dim MargemEsquerda As Single = e.MarginBounds.Left
Dim MargemSuperior As Single = e.MarginBounds.Top + 100
Dim MargemDireita As Single = e.MarginBounds.Right
Dim MargemInferior As Single = e.MarginBounds.Bottom
Dim CanetaDaImpressora As Pen = New Pen(Color.Black, 1)
Dim j As Integer = 200
[ô]Variaveis das fontes
Dim FonteNegrito As Font
Dim FonteTitulo As Font
Dim FonteSubTitulo As Font
Dim FonteRodape As Font
Dim FonteNormal As Font
[ô]define efeitos em fontes
FonteNegrito = New Font([Ô]Arial[Ô], 9, FontStyle.Bold)
FonteTitulo = New Font([Ô]Arial[Ô], 15, FontStyle.Bold)
FonteSubTitulo = New Font([Ô]Arial[Ô], 12, FontStyle.Bold)
FonteRodape = New Font([Ô]Arial[Ô], 8)
FonteNormal = New Font([Ô]Arial[Ô], 9)
[ô]define valores para linha atual e para linha da impressao
LinhaAtual = 0
Dim L As Integer = 0
[ô]Cabecalho
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, 60, MargemDireita, 60)
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, 160, MargemDireita, 160)
[ô]nome da empresa
e.Graphics.DrawString([Ô]Teste[Ô], FonteTitulo, Brushes.Blue, MargemEsquerda + 250, 80, New StringFormat())
[ô]Imagem
e.Graphics.DrawImage(Image.FromFile([Ô]C:\Temp\[Ô] & [Ô]xxxx.jpg[Ô]), 100, 68)
e.Graphics.DrawString(RelatorioTitulo & System.DateTime.Today, FonteSubTitulo, Brushes.Black, MargemEsquerda + 250, 120, New StringFormat())
LinhasPorPagina = CInt(e.MarginBounds.Height / FonteNormal.GetHeight(e.Graphics) - 9)
PaginaAtual = 1
ComandoSql = [Ô]select * from processo[Ô]
If preencheTabela(ComandoSql, [Ô]processo[Ô]) Then
For i As Integer = 0 To tabela.DefaultView.Count - 1
j += 30
e.Graphics.DrawString(tabela.Rows(i)(10).ToString(), New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 160, j)
e.Graphics.DrawString(tabela.Rows(i)(12).ToString(), New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 350, j)
LinhaAtual += 1
[ô]verifica se continua imprimindo
If (LinhaAtual > LinhasPorPagina) Then
e.HasMorePages() = True
i = 999
[ô]Rodape
[ô]e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, MargemInferior, MargemDireita, MargemInferior)
e.Graphics.DrawString(System.DateTime.Now.ToString(), FonteRodape, Brushes.Black, MargemEsquerda, MargemInferior, New StringFormat())
LinhaAtual += CInt(FonteNormal.GetHeight(e.Graphics))
LinhaAtual += 1
e.Graphics.DrawString([Ô]P gina : [Ô] & PaginaAtual, FonteRodape, Brushes.Black, MargemDireita - 50, MargemInferior, New StringFormat())
PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics))
[ô]Incrementa o n£mero da pagina
PaginaAtual += 1
LinhaAtual = 1
Else
e.HasMorePages = False
End If
Next
End If
End Sub
Coloque e.HasMorePages = False antes do End Sub e pronto.
Bom dia Fabiano,
Sim, parou de repetir as p]aginas, já havia feiro este teste, mas não consigo continuar imprimindo o restante do conteúdo na próxima página. No anexo a imagem do relatório.
Sim, parou de repetir as p]aginas, já havia feiro este teste, mas não consigo continuar imprimindo o restante do conteúdo na próxima página. No anexo a imagem do relatório.
Há muito tempo, já respondi isso aqui no Fórum e até dei um exemplo.
Estou passando esse exemplo que eu fiz bem simples, para você entender como funciona
Qualquer coisa, se não der certo, posta aÃ.
Estou passando esse exemplo que eu fiz bem simples, para você entender como funciona
Qualquer coisa, se não der certo, posta aÃ.
Perfeito o exemplo do PERCIFILHO, mas complementando:
caso ocorra de sair uma página em branco no final do relatório, substitua o final:
caso ocorra de sair uma página em branco no final do relatório, substitua o final:
If (LinhaAtual > LinhasporPagina AndAlso registro < dgvRegistros.Rows.Count) Then
[ô] quando abrir uma página nova, tem que zerar a LlinhaAtual
e.HasMorePages = True
LinhaAtual = 0
Else
e.HasMorePages = False
End If
ah! ia me esuqecendo, caso dê erro, comente a variável LinhaAtual:
If (LinhaAtual > LinhasporPagina AndAlso registro < dgvRegistros.Rows.Count) Then
[ô] quando abrir uma página nova, tem que zerar a LlinhaAtual
e.HasMorePages = True
[ô]LinhaAtual = 0
Else
e.HasMorePages = False
End If
dando uma olhada nos meus foruns vi esse de dois meses atras sem encerrar, BIGLYON, POR FAVOR encerre e pontue ou diga onde sua dúvida não foi esclarecida
Citação::
Há muito tempo, já respondi isso aqui no Fórum e até dei um exemplo.
Estou passando esse exemplo que eu fiz bem simples, para você entender como funciona
Qualquer coisa, se não der certo, posta aÃ.
Top showw de bola... estou usando aqui no meu projeto esse exemplo :D
Parabens :D
Estou alterando o teu código para não dar o erro que vc citou
[txt-color=#0000f0]Private Lin as integer = 0[/txt-color] [ô]Esse é a chave do sucesso
Private Sub m_PrintDocument_PrintPage(sender As Object, e As PrintPageEventArgs) Handles m_PrintDocument.PrintPage
[ô]Variaveis das linhas
Dim LinhasPorPagina As Single = 0
Dim PosicaoDaLinha As Single = 0
Dim LinhaAtual As Single = 0
Dim PaginaAtual As Integer = 0
[ô]Variaveis das margens
Dim MargemEsquerda As Single = e.MarginBounds.Left
Dim MargemSuperior As Single = e.MarginBounds.Top + 100
Dim MargemDireita As Single = e.MarginBounds.Right
Dim MargemInferior As Single = e.MarginBounds.Bottom
Dim CanetaDaImpressora As Pen = New Pen(Color.Black, 1)
Dim j As Integer = 200
[ô]Variaveis das fontes
Dim FonteNegrito As Font
Dim FonteTitulo As Font
Dim FonteSubTitulo As Font
Dim FonteRodape As Font
Dim FonteNormal As Font
[ô]define efeitos em fontes
FonteNegrito = New Font([Ô]Arial[Ô], 9, FontStyle.Bold)
FonteTitulo = New Font([Ô]Arial[Ô], 15, FontStyle.Bold)
FonteSubTitulo = New Font([Ô]Arial[Ô], 12, FontStyle.Bold)
FonteRodape = New Font([Ô]Arial[Ô], 8)
FonteNormal = New Font([Ô]Arial[Ô], 9)
[ô]define valores para linha atual e para linha da impressao
LinhaAtual = 0
Dim L As Integer = 0
[ô]Cabecalho
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, 60, MargemDireita, 60)
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, 160, MargemDireita, 160)
[ô]nome da empresa
e.Graphics.DrawString([Ô]Teste[Ô], FonteTitulo, Brushes.Blue, MargemEsquerda + 250, 80, New StringFormat())
[ô]Imagem
e.Graphics.DrawImage(Image.FromFile([Ô]C:\Temp\[Ô] & [Ô]xxxx.jpg[Ô]), 100, 68)
e.Graphics.DrawString(RelatorioTitulo & System.DateTime.Today, FonteSubTitulo, Brushes.Black, MargemEsquerda + 250, 120, New StringFormat())
LinhasPorPagina = CInt(e.MarginBounds.Height / FonteNormal.GetHeight(e.Graphics) - 9)
PaginaAtual = 1
ComandoSql = [Ô]select * from processo[Ô]
If preencheTabela(ComandoSql, [Ô]processo[Ô]) Then
For i As Integer = [txt-color=#0000f0]Lin [/txt-color]To tabela.DefaultView.Count - 1
[txt-color=#0000f0]Lin = I[/txt-color]
j += 30
e.Graphics.DrawString(tabela.Rows(i)(10).ToString(), New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 160, j)
e.Graphics.DrawString(tabela.Rows(i)(12).ToString(), New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 350, j)
LinhaAtual += 1
[ô]verifica se continua imprimindo
If (LinhaAtual > LinhasPorPagina) Then
i = 999
[ô]Rodape
[ô]e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, MargemInferior, MargemDireita, MargemInferior)
e.Graphics.DrawString(System.DateTime.Now.ToString(), FonteRodape, Brushes.Black, MargemEsquerda, MargemInferior, New StringFormat())
LinhaAtual += CInt(FonteNormal.GetHeight(e.Graphics))
LinhaAtual += 1
e.Graphics.DrawString([Ô]P gina : [Ô] & PaginaAtual, FonteRodape, Brushes.Black, MargemDireita - 50, MargemInferior, New StringFormat())
PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics))
[ô]Incrementa o n£mero da pagina
PaginaAtual += 1
LinhaAtual = 1
[txt-color=#0000f0] e.HasMorePages() = True
exit Sub[/txt-color]
Else
e.HasMorePages = False
End If
Next
End If
End Sub
[txt-color=#0000f0]Private Lin as integer = 0[/txt-color] [ô]Esse é a chave do sucesso
Private Sub m_PrintDocument_PrintPage(sender As Object, e As PrintPageEventArgs) Handles m_PrintDocument.PrintPage
[ô]Variaveis das linhas
Dim LinhasPorPagina As Single = 0
Dim PosicaoDaLinha As Single = 0
Dim LinhaAtual As Single = 0
Dim PaginaAtual As Integer = 0
[ô]Variaveis das margens
Dim MargemEsquerda As Single = e.MarginBounds.Left
Dim MargemSuperior As Single = e.MarginBounds.Top + 100
Dim MargemDireita As Single = e.MarginBounds.Right
Dim MargemInferior As Single = e.MarginBounds.Bottom
Dim CanetaDaImpressora As Pen = New Pen(Color.Black, 1)
Dim j As Integer = 200
[ô]Variaveis das fontes
Dim FonteNegrito As Font
Dim FonteTitulo As Font
Dim FonteSubTitulo As Font
Dim FonteRodape As Font
Dim FonteNormal As Font
[ô]define efeitos em fontes
FonteNegrito = New Font([Ô]Arial[Ô], 9, FontStyle.Bold)
FonteTitulo = New Font([Ô]Arial[Ô], 15, FontStyle.Bold)
FonteSubTitulo = New Font([Ô]Arial[Ô], 12, FontStyle.Bold)
FonteRodape = New Font([Ô]Arial[Ô], 8)
FonteNormal = New Font([Ô]Arial[Ô], 9)
[ô]define valores para linha atual e para linha da impressao
LinhaAtual = 0
Dim L As Integer = 0
[ô]Cabecalho
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, 60, MargemDireita, 60)
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, 160, MargemDireita, 160)
[ô]nome da empresa
e.Graphics.DrawString([Ô]Teste[Ô], FonteTitulo, Brushes.Blue, MargemEsquerda + 250, 80, New StringFormat())
[ô]Imagem
e.Graphics.DrawImage(Image.FromFile([Ô]C:\Temp\[Ô] & [Ô]xxxx.jpg[Ô]), 100, 68)
e.Graphics.DrawString(RelatorioTitulo & System.DateTime.Today, FonteSubTitulo, Brushes.Black, MargemEsquerda + 250, 120, New StringFormat())
LinhasPorPagina = CInt(e.MarginBounds.Height / FonteNormal.GetHeight(e.Graphics) - 9)
PaginaAtual = 1
ComandoSql = [Ô]select * from processo[Ô]
If preencheTabela(ComandoSql, [Ô]processo[Ô]) Then
For i As Integer = [txt-color=#0000f0]Lin [/txt-color]To tabela.DefaultView.Count - 1
[txt-color=#0000f0]Lin = I[/txt-color]
j += 30
e.Graphics.DrawString(tabela.Rows(i)(10).ToString(), New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 160, j)
e.Graphics.DrawString(tabela.Rows(i)(12).ToString(), New Font([Ô]arial[Ô], 15, FontStyle.Regular), Brushes.Black, 350, j)
LinhaAtual += 1
[ô]verifica se continua imprimindo
If (LinhaAtual > LinhasPorPagina) Then
i = 999
[ô]Rodape
[ô]e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, MargemInferior, MargemDireita, MargemInferior)
e.Graphics.DrawString(System.DateTime.Now.ToString(), FonteRodape, Brushes.Black, MargemEsquerda, MargemInferior, New StringFormat())
LinhaAtual += CInt(FonteNormal.GetHeight(e.Graphics))
LinhaAtual += 1
e.Graphics.DrawString([Ô]P gina : [Ô] & PaginaAtual, FonteRodape, Brushes.Black, MargemDireita - 50, MargemInferior, New StringFormat())
PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics))
[ô]Incrementa o n£mero da pagina
PaginaAtual += 1
LinhaAtual = 1
[txt-color=#0000f0] e.HasMorePages() = True
exit Sub[/txt-color]
Else
e.HasMorePages = False
End If
Next
End If
End Sub
Tópico encerrado , respostas não são mais permitidas