SYSTEM DRAWING PRINTIG - DIFICULDADE NA IMPRESSAO

 Tópico anterior Próximo tópico Novo tópico

SYSTEM DRAWING PRINTIG - DIFICULDADE NA IMPRESSAO

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#467004 - 16/09/2016 08:29:08

BIGLYON
BENTO GONCALVES - RS
Cadast. em:Setembro/2016


Bom dia,

Estou com dificuldade de imprimir mais que uma pgina utilizando o comando e.hasmorepages. Ou imprime somente em uma pgina ou gera vrias pginas com o mesmo contedo s parando de imprimir quando cancelamos o relatrio.
Abaixo o cdigo que estou utilizando. (no estou preocupado ainda com a impresso do cabealho em todas as pginas)

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 nmero da pagina

                    PaginaAtual += 1
                    LinhaAtual = 1
                Else
                    e.HasMorePages = False
                End If

            Next

        End If
    End Sub

Lyon C Kunz Jr

#467005 - 16/09/2016 09:16:41

FFCOUTO
COM LEVY GASPARIAN
Cadast. em:Março/2005


Coloque e.HasMorePages = False antes do End Sub e pronto.

Cursos de Excel e VB6:
cursoexcelvba.com.br


#467007 - 16/09/2016 09:24:19

BIGLYON
BENTO GONCALVES - RS
Cadast. em:Setembro/2016


 Anexos estao visíveis somente para usuários registrados

Bom dia Fabiano,

Sim, parou de repetir as p]aginas, j havia feiro este teste, mas no consigo continuar imprimindo o restante do contedo na prxima pgina. No anexo a imagem do relatrio.

Lyon C Kunz Jr

#467019 - 16/09/2016 15:33:04

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


 Anexos estao visíveis somente para usuários registrados

H muito tempo, j respondi isso aqui no Frum e at dei um exemplo.
Estou passando esse exemplo que eu fiz bem simples, para voc entender como funciona
Qualquer coisa, se no der certo, posta a.

____________________________________________________
No h nessa vida algo que no se possa alcanar, voc s precisa ir buscar.

#467021 - 16/09/2016 16:33:51

DAMASCENO.CESAR
ADAMANTINA
Cadast. em:Fevereiro/2009


Perfeito o exemplo do PERCIFILHO, mas complementando:
caso ocorra de sair uma pgina em branco no final do relatrio, substitua o final:
   If (LinhaAtual > LinhasporPagina AndAlso registro < dgvRegistros.Rows.Count) Then
            [] quando abrir uma pgina nova, tem que zerar a LlinhaAtual
            e.HasMorePages = True
            LinhaAtual = 0
        Else
            e.HasMorePages = False
        End If


O conhecimento como o dinheiro: quanto mais temos, mais queremos ter (Josh Billings)  


Resposta escolhida #467022 - 16/09/2016 16:37:09

DAMASCENO.CESAR
ADAMANTINA
Cadast. em:Fevereiro/2009


ah! ia me esuqecendo, caso d erro, comente a varivel LinhaAtual:

  If (LinhaAtual > LinhasporPagina AndAlso registro < dgvRegistros.Rows.Count) Then
            [] quando abrir uma pgina nova, tem que zerar a LlinhaAtual
            e.HasMorePages = True
            []LinhaAtual = 0
        Else
            e.HasMorePages = False
        End If


O conhecimento como o dinheiro: quanto mais temos, mais queremos ter (Josh Billings)  


#468758 - 06/11/2016 00:14:16

DAMASCENO.CESAR
ADAMANTINA
Cadast. em:Fevereiro/2009


dando uma olhada nos meus foruns vi esse de dois meses atras sem encerrar, BIGLYON, POR FAVOR encerre e pontue ou diga onde sua dvida no foi esclarecida

O conhecimento como o dinheiro: quanto mais temos, mais queremos ter (Josh Billings)  


#468769 - 06/11/2016 15:58:26

JANDSONSISTENS
PAULINIA
Cadast. em:Junho/2016


Citação:
:
H muito tempo, j respondi isso aqui no Frum e at dei um exemplo.
Estou passando esse exemplo que eu fiz bem simples, para voc entender como funciona
Qualquer coisa, se no der certo, posta a.


Top  showw de bola... estou usando aqui no meu projeto esse exemplo :D

Parabens :D




#468817 - 08/11/2016 20:03:05

PLUGSOFTSM
SANTA MARIA
Cadast. em:Julho/2015


Estou alterando o teu cdigo para no dar o erro que vc citou

Private Lin as integer = 0 []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 = Lin To tabela.DefaultView.Count - 1
                Lin = I
                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 nmero da pagina

                    PaginaAtual += 1
                    LinhaAtual = 1
                   e.HasMorePages() = True
                    exit Sub

                Else
                    e.HasMorePages = False
                End If

            Next

        End If
    End Sub



 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por BIGLYON em 06/02/2017 14:40:02