SYSTEM DRAWING PRINTIG - DIFICULDADE NA IMPRESSAO

BIGLYON 16/09/2016 08:29:08
#467004
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
FFCOUTO 16/09/2016 09:16:41
#467005
Coloque e.HasMorePages = False antes do End Sub e pronto.
BIGLYON 16/09/2016 09:24:19
#467007
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.
PERCIFILHO 16/09/2016 15:33:04
#467019
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í.
DAMASCENO.CESAR 16/09/2016 16:33:51
#467021
Perfeito o exemplo do PERCIFILHO, mas complementando:
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
DAMASCENO.CESAR 16/09/2016 16:37:09
#467022
Resposta escolhida
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
DAMASCENO.CESAR 06/11/2016 00:14:16
#468758
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
JANDSONSISTENS 06/11/2016 15:58:26
#468769
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
PLUGSOFTSM 08/11/2016 20:03:05
#468817
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
Tópico encerrado , respostas não são mais permitidas