Ir para conteúdo
Fórum Script Brasil
  • 0

Dificuldades com Print Preview


Carlos Rocha

Pergunta

Ola pessoal.

Estou usando printpreview para imprimir um relatório de Pedido

Estou traçando duas linhas horizontais paralelas para colocação do cabeçalho de pedido, depois,

Estou traçando duas linhas horizontais paralelas para colocação do cabeçalho dos ítens do pedido tipo Produto, descriçao valor

Para listar os ítens, fiz um loop para indicar a altura que cada um dos ítens do pedido, que é de 20 em 20 pixeus e depois que eu peguei a altura da última linha entreguei o seu valor para a altura da linha após a listagem dos ítens

Ficou assim:

e.Graphics.DrawLine(Pens.Black, margemEsq, 260, margemDir, 260)
        e.Graphics.DrawString("Cód.", fonteColuna, Brushes.Red, margemEsq, 260, New StringFormat())
        e.Graphics.DrawString("Unid.", fonteColuna, Brushes.Red, margemEsq + 50, 260, New StringFormat())
        e.Graphics.DrawString("Descrição", fonteColuna, Brushes.Red, margemEsq + 100, 260, New StringFormat())
        e.Graphics.DrawString("Preço", fonteColuna, Brushes.Red, margemEsq + 350, 260, New StringFormat())
        e.Graphics.DrawString("Qtde", fonteColuna, Brushes.Red, margemEsq + 450, 260, New StringFormat())
        e.Graphics.DrawString("Total", fonteColuna, Brushes.Red, margemEsq + 550, 260, New StringFormat())
        e.Graphics.DrawLine(Pens.Black, margemEsq, 280, margemDir, 280)

        Dim u As Integer = 290
        For Each linha As DataRow In DRDP.Tables(0).Rows
            e.Graphics.DrawString(linha.Item("produtoID"), fonteColuna, Brushes.Black, margemEsq, u, New StringFormat())
            e.Graphics.DrawString(linha.Item("unidade"), fonteColuna, Brushes.Black, margemEsq + 50, u, New StringFormat())
            e.Graphics.DrawString(linha.Item("descricao"), fonteColuna, Brushes.Black, margemEsq + 100, u, New StringFormat())
            e.Graphics.DrawString(linha.Item("preço"), fonteColuna, Brushes.Black, margemEsq + 350, u, New StringFormat())
            e.Graphics.DrawString(linha.Item("quantidade"), fonteColuna, Brushes.Black, margemEsq + 450, u, New StringFormat())
            e.Graphics.DrawString(linha.Item("subtotal"), fonteColuna, Brushes.Black, margemEsq + 550, u, New StringFormat())
            TotalNota += linha.Item("subtotal")
            u += 20
        Next linha

        e.Graphics.DrawLine(Pens.Black, margemEsq, u + 10, margemDir, u + 10)
        e.Graphics.DrawString("Total da Nota", fonteColuna, Brushes.Red, margemEsq + 350, u + 20, New StringFormat())
        e.Graphics.DrawString(Format(TotalNota, "currency"), fonteColuna, Brushes.Red, margemEsq + 500, u + 20, New StringFormat())
        e.Graphics.DrawLine(Pens.Black, margemEsq, u + 40, margemDir, u + 40)
... e agora vem os problemas: 1) Bom, agora como fazer uma paginação nestes ítens para não colocar o rodapé da primeira pagina la na pagina seguinte? 2) No código abaixo, eu coloco uma figura no printpreview mas estou indicando o caminho completo da figura no windows. Eu não quero indicar o caminho completo e sim só a pasta onde esta a figura:
e.Graphics.DrawImage(Image.FromFile("D:\Trabalhos Novos\Visual Studio 2008\Projects\vendas\imagens\" & "maco10.gif"), 100, 68)
eu queria assim: Image.FromFile("\imagens\" & "maco10.gif). Tem jeito? 3) Na hora de dar o total da nota, ele esta somando todos os ítenms certo mas esta arredondando o resultado veja:
Format(TotalNota, "currency")

Como resolver isso?

4) Tenho uma NumericUpDown para aumentar e diminuir o tamanho do preview e tenho dois buttons que a ideia seria clikar num para mover a NumericUpDown para baixo (Diminuir o zoom)e clikar noutro para mover a NumericUpDown para cima (aumentar o zoom)

Que código usa para isso nos botoes?

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Bom olhando uma paginma php que fiz para a internet, visualizando a logica, consdegui chegar à paginação no desktop.

Mas agora, preciso faazer via código dois botões e colocalos no PRITPREVIEW para navegaçao entre as paginas AVANÇAR E RETROCEDER OU então arranjar uma frorma de poder clikar nos numeros das paginas.

Eis como ficou:

inicio = pagina * lpp

PrintStringdetalhespedidos = "Select * from detalhespedidos where pedidoID= " & ccodigo

DRDP = accDb.ExecuteDS(PrintStringdetalhespedidos, TabelaDetalhesPedidos)

conta = DRDP.Tables(0).Rows.Count

lpp = 3

paginas = Round(conta / lpp)

pagina = 0

If IsDBNull(pagina) Then pagina = 1

If pagina > 0 Then

menos = pagina - 1

e.Graphics.DrawString("Pag. " & pagina.ToString, fonteRodape, Brushes.Black, margemDir - 50, margemInf, New StringFormat())

pagina += 1

' Anterior

End If

For i As Integer = 0 To paginas

i += i

e.Graphics.DrawString("Pag. " & i.ToString, fonteRodape, Brushes.Black, margemDir - 50, margemInf, New StringFormat())

Next

If pagina < (paginas - 1) Then

mais = pagina + 1

e.Graphics.DrawString("Pag. " & pagina.ToString, fonteRodape, Brushes.Black, margemDir - 50, margemInf, New StringFormat())

End If

inicio = pagina * lpp

PrintStringdetalhespedidos2 = "Select * from detalhespedidos where pedidoID= " & ccodigo & " LIMIT " & inicio & " , " & lpp

DRDP2 = accDb.ExecuteDS(PrintStringdetalhespedidos2, TabelaDetalhesPedidos)

If conta = 0 Then

e.Graphics.DrawString("Ainda no h devedores cadastrados para esta empresa", fonteColuna, Brushes.Black, margemEsq, 500, New StringFormat())

Else

e.Graphics.DrawLine(Pens.Black, margemEsq, 260, margemDir, 260)

e.Graphics.DrawString("Cd.", fonteColuna, Brushes.Red, margemEsq, 260, New StringFormat())

e.Graphics.DrawString("Unid.", fonteColuna, Brushes.Red, margemEsq + 50, 260, New StringFormat())

e.Graphics.DrawString("Descrio", fonteColuna, Brushes.Red, margemEsq + 100, 260, New StringFormat())

e.Graphics.DrawString("Preo", fonteColuna, Brushes.Red, margemEsq + 350, 260, New StringFormat())

e.Graphics.DrawString("Qtde", fonteColuna, Brushes.Red, margemEsq + 450, 260, New StringFormat())

e.Graphics.DrawString("Total", fonteColuna, Brushes.Red, margemEsq + 550, 260, New StringFormat())

e.Graphics.DrawLine(Pens.Black, margemEsq, 280, margemDir, 280)

Dim u As Integer = 290

For Each linha As DataRow In DRDP2.Tables(0).Rows

e.Graphics.DrawString(linha.Item("produtoID"), fonteColuna, Brushes.Black, margemEsq, u, New StringFormat())

e.Graphics.DrawString(linha.Item("unidade"), fonteColuna, Brushes.Black, margemEsq + 50, u, New StringFormat())

e.Graphics.DrawString(linha.Item("descricao"), fonteColuna, Brushes.Black, margemEsq + 100, u, New StringFormat())

e.Graphics.DrawString(linha.Item("preço"), fonteColuna, Brushes.Black, margemEsq + 350, u, New StringFormat())

e.Graphics.DrawString(linha.Item("quantidade"), fonteColuna, Brushes.Black, margemEsq + 450, u, New StringFormat())

e.Graphics.DrawString(linha.Item("subtotal"), fonteColuna, Brushes.Black, margemEsq + 550, u, New StringFormat())

TotalNota += linha.Item("subtotal")

u += 20

Next linha

End If

e.Graphics.DrawLine(Pens.Black, margemEsq, margemInf, margemDir, margemInf)

' aqui eu tento criar os botões:

Private WithEvents Avanca As New Button

Private WithEvents Volta As New Button

With Avanca

.Text = "Avana"

.Location = New Point(margemDir - 300, margemInf)

End With

With Volta

.Text = "Volta"

.Location = New Point(margemDir - 300, margemInf)

End With

With PrintDocument1

'.Controls.Add(Avana)

'.Controls.Add(Volta)

End With

'e.Graphics.draw()

e.Graphics.DrawString(System.DateTime.Now, fonteRodape, Brushes.Black, margemEsq, margemInf, New StringFormat())
Resolvi tambem a questão do diretório da imagem que ficou assim:(criar a pasta imagem no diretório da aplicação
e.Graphics.DrawImage(Image.FromFile("imagens\" & "maco10.gif"), 100, 68)

Agora só falta resolver o problema do Format(TotalNota, "currency") que Na hora de dar o total da nota, ele esta somando todos os ítenms certo mas esta arredondando o resultado e aq questão abaixo;

Tenho uma NumericUpDown para aumentar e diminuir o tamanho do preview e tenho dois buttons que a ideia seria clikar num para mover a NumericUpDown para baixo (Diminuir o zoom)e clikar noutro para mover a NumericUpDown para cima (aumentar o zoom)

Que código usa para isso nos botoes?

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, talves isso possa ajudar:

No meu form de Cadastro de pedidos, eu tenho um Botão IMPRIMIR que no seu evento clike tem:

Private Sub Impimir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Impimir.Click
        Dim visualForm As New VisualizarImprimir
        visualForm.ccodigo = codigoped.Text
        visualForm.ShowDialog()
    End Sub
Trata-se de impressão de pedido através do PrintDocument usando System.Drawing.Printing O Onclik do botão imprimir no Form de pedidos, envia oa PrintDocument o código do pedido para, chegando la, prencher o valor da variavel ccodigo. Dai em diante, todoas as consultas são feitas na hora de exibir o print document que não é uma caixa de dialogo mas sim um form criado o VB. Bom, chegando la no form do print document, coinsigo fazer todas as consultas. Consulto e retorno os dados do pedido tipo Cliente, endereços, etc.. Consulto e retorno os ítens do pedido tipo poduto, unidade, valor unitario, total. Tudo certinho. Mas, na gora de fazer a paginação desses ítens que as vezes pode chegar a mais de 40 por pagina, aí não consigo fazer. Isso é imprtante. Vou colocar até aonde condegui fazer seguindo o modelo(lógica) do php. Mas, na hora de passar da primeira agina para a segunda, vou clikar onde???????????????????? Num estu conseguindo
PrintStringdetalhespedidos = "Select * from detalhespedidos where pedidoID= " & ccodigo
        DRDP = accDb.ExecuteDS(PrintStringdetalhespedidos, TabelaDetalhesPedidos)

        conta = DRDP.Tables(0).Rows.Count
        lpp = 2
        paginas = Ceiling(conta / lpp)
        pagina = 0
        Dim posicao As Integer = margemDir - 100
        For i As Integer = 1 To paginas
            e.Graphics.DrawString("Pag. " & i.ToString, fonteRodape, Brushes.Black, posicao, margemInf, New StringFormat())
            posicao -= 50
        Next
        inicio = pagina * lpp

        PrintStringdetalhespedidos2 = "Select * from detalhespedidos where pedidoID= " & ccodigo & " LIMIT " & inicio & " , " & lpp
        DRDP2 = accDb.ExecuteDS(PrintStringdetalhespedidos2, TabelaDetalhesPedidos)
        If conta = 0 Then
            e.Graphics.DrawString("Ainda não há devedores cadastrados para esta empresa", fonteColuna, Brushes.Black, margemEsq, 500, New StringFormat())
        Else
            e.Graphics.DrawLine(Pens.Black, margemEsq, 260, margemDir, 260)
            e.Graphics.DrawString("Cód.", fonteColuna, Brushes.Red, margemEsq, 260, New StringFormat())
            e.Graphics.DrawString("Unid.", fonteColuna, Brushes.Red, margemEsq + 50, 260, New StringFormat())
            e.Graphics.DrawString("Descrição", fonteColuna, Brushes.Red, margemEsq + 100, 260, New StringFormat())
            e.Graphics.DrawString("Preço", fonteColuna, Brushes.Red, margemEsq + 350, 260, New StringFormat())
            e.Graphics.DrawString("Qtde", fonteColuna, Brushes.Red, margemEsq + 450, 260, New StringFormat())
            e.Graphics.DrawString("Total", fonteColuna, Brushes.Red, margemEsq + 550, 260, New StringFormat())
            e.Graphics.DrawLine(Pens.Black, margemEsq, 280, margemDir, 280)

            Dim u As Integer = 290
            For Each linha As DataRow In DRDP2.Tables(0).Rows
                e.Graphics.DrawString(linha.Item("produtoID"), fonteColuna, Brushes.Black, margemEsq, u, New StringFormat())
                e.Graphics.DrawString(linha.Item("unidade"), fonteColuna, Brushes.Black, margemEsq + 50, u, New StringFormat())
                e.Graphics.DrawString(linha.Item("descricao"), fonteColuna, Brushes.Black, margemEsq + 100, u, New StringFormat())
                e.Graphics.DrawString(linha.Item("preço"), fonteColuna, Brushes.Black, margemEsq + 350, u, New StringFormat())
                e.Graphics.DrawString(linha.Item("quantidade"), fonteColuna, Brushes.Black, margemEsq + 450, u, New StringFormat())
                e.Graphics.DrawString(linha.Item("subtotal"), fonteColuna, Brushes.Black, margemEsq + 550, u, New StringFormat())
                TotalNota += linha.Item("subtotal")
                u += 20
            Next linha
        End If
        e.Graphics.DrawLine(Pens.Black, margemEsq, margemInf - 30, margemDir, margemInf - 30)

        e.Graphics.DrawString("Total da Nota", fonteColuna, Brushes.Red, margemEsq + 350, margemInf - 20, New StringFormat())
        e.Graphics.DrawString(Format(TotalNota, "currency"), fonteColuna, Brushes.Red, margemEsq + 500, margemInf - 20, New StringFormat())

        e.Graphics.DrawLine(Pens.Black, margemEsq, margemInf, margemDir, margemInf)

        e.Graphics.DrawString(System.DateTime.Now, fonteRodape, Brushes.Black, margemEsq, margemInf, New StringFormat())
        e.Graphics.DrawString(paginas & " Paginas " , fonteRodape, Brushes.Black, margemDir - 300, margemInf, New StringFormat())

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

  • 0

Bom pessoal.

alguém conhece uma forma de fazer paginação de resultados com através do PrintDocument usando System.Drawing.Printing?

Mas não serve com datalist, datagrid, esses controles não!

Preciso é de paginar(pagina 01,02...) quando os registros são mostrados em um form

Link para o comentário
Compartilhar em outros sites

  • 0

Meu problema é o seguinte:

Vejam a figura abaixo:

Preciso arranjar uma forma de criar um botão na area branca ao lado(não na area que iaa para a impressora) que esse botão ao ser clikado, mostra o numero da pagina que se quer visualizar e este valor alimentar a variavel paginadavez que esta dentro da :

Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

Como fazer isso?

fg.jpg

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,2k
×
×
  • Criar Novo...