AJUDA COM PÁGINA NO OBJETO PRINTDOCUMENT

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

AJUDA COM PÁGINA NO OBJETO PRINTDOCUMENT

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#458062 - 22/02/2016 23:16:25

CARINHENA
SOROCABA
Cadast. em:Junho/2004


Última edição em 22/02/2016 23:17:22 por CARINHENA

Pessoal, boa noite, tudo bem?
Eu tenho uma rotina que "distribui" informações em um listbox, e preciso imprimir via printer... eu consigo imprimir, mas, não consigo gerar páginas.
Poderiam me ajudar?

Criei um código resumido, que mostra o que estou fazendo e no que posso estar errando:
  
Dim FonteMensagem As New Font("arial", 9, System.Drawing.GraphicsUnit.Point) 'fonte
Dim ListB As New ListBox

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Imprimir()
    End Sub

    Private Sub Imprimir()
        ListB.Items.Add("Pagina 1")
        ListB.Items.Add("Pagina 2")
        PrintDialog.Document = PrintDocument1
        If PrintDialog.ShowDialog() = DialogResult.OK Then
            Me.PrintDocument1.Print()
        End If
    End Sub

    Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        e.Graphics.PageUnit = GraphicsUnit.Millimeter
        Dim i As Integer = 0
        Dim total As Integer = ListB.Items.Count

        For Each item In ListB.Items
            i += 1
            e.Graphics.DrawString(item.ToString(), FonteMensagem, Brushes.Gray, 160, 50)
            If i <> total Then
                e.HasMorePages = True
            Else
                e.HasMorePages = False
            End If
        Next
    End Sub


Essa Rotina mostra a impressão, aparecendo o item "página 2", sinal que ele não separou as páginas e imprimiu a última, li bastante mas, não consegui chegar a uma conclusão por não ter muita experiencia com a ferramenta.


Carinhena

A melhor forma de aprender e ensinando!


Resposta escolhida #458067 - 23/02/2016 07:57:58

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


 Anexos estao visíveis somente para usuários registrados

Bom dia, camarada.
É o seguinte: eu fiz um exemplo bem simplesinho para um colega aqui do Fórum, não faz muito tempo, com esse mesmo problema.
Ele está todo comentado. Vou te passar, você analisa, mas vai ter que adaptar para a sua necessidade. Espero que te ajude.
Qualquer coisa, se não conseguir, dá  um grito aí que se eu não puder te responder, tem muito mais gente boa aqui que vai te ajudar.
Abraços.

____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




#458074 - 23/02/2016 09:45:11

PLUGSOFTSM
SANTA MARIA
Cadast. em:Julho/2015


Cara... A impressão via print é uma das coisas que a Microsoft conseguiu piorar muito no .net
pra essa tua rotina tu tem que fazer o seguinte:

Dim FonteMensagem As New Font("arial", 9, System.Drawing.GraphicsUnit.Point) 'fonte
Dim ListB As New ListBox
dim Pag as integer = 0

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Imprimir()
    End Sub

    Private Sub Imprimir()
        ListB.Items.Add("Pagina 1")
        ListB.Items.Add("Pagina 2")
        PrintDialog.Document = PrintDocument1
        If PrintDialog.ShowDialog() = DialogResult.OK Then
            Me.PrintDocument1.Print()
        End If
    End Sub

    Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        e.Graphics.PageUnit = GraphicsUnit.Millimeter
        Dim i As Integer = 0
        Dim total As Integer = ListB.Items.Count

       ' For Each item In ListB.Items
         for K as integer = Pag to listb.items.count-1
          '  i += 1
            e.Graphics.DrawString(item.ToString(), FonteMensagem, Brushes.Gray, 160, 50)
            If K < listb.itens.count -1 Then
                pag = k + 1  'O segredo está em declarar essa variável global para que quando a rotina retornar depois do exit sub, e impressão não reinicie na primeira página novamente
              
                e.HasMorePages = True
                exit sub
            Else
                e.HasMorePages = False
            End If
        Next
    End Sub


Espero ter ajudado



#458171 - 24/02/2016 16:30:08

CARINHENA
SOROCABA
Cadast. em:Junho/2004


Última edição em 24/02/2016 16:30:29 por CARINHENA

Galera, agradeço pela atenção.
Eu consegui entender a lógica por cima do print (que eu acho bem ruim, diga-se de passagem).
Antes eu achava que o
e.HasMorePages = True
, dizia: "Seguinte, vai pra próxima folha e grava lá!".

Só que não é bem assim.
Quando você coloca esse código, ele simplesmente passa novamente pelo PrintDocument1_PrintPage, então, ele vai gravando por cima.

Na lógica deles, eu tive que criar um indice, então, toda vez o
e.HasMorePages = True
aparece eu gravo em qual linha do listbox ele gravou, para que na p´roxima passada, ele só imprima o que eu quero... ate chegar o fim.

Obrigado pela ajuda!


Carinhena

A melhor forma de aprender e ensinando!


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


Tópico encerrado, respostas não sao permitidas
Encerrado por CARINHENA em 24/02/2016 16:30:41