Erro usando o System.Drawing.Printing
Segui os exemplos postados pra gerar relatorio usando o System.Drawing.Printing, e consegui gerar o meu Orçamento legal, so que no Preview sai certinho os totais no final do Orçamento, mas quando imprime, sai tipo com valores dobrados, na tela fica ok, mas na impressao dobra os totais ...
Anexo o codigo:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Impressão do orçamento
RelatorioTitulo = "Relatório de Produtos "
Dim pd As Printing.PrintDocument = New Printing.PrintDocument()
AddHandler pd.PrintPage, New Printing.PrintPageEventHandler(AddressOf Me.pdRelatorios_PrintPage)
AddHandler pd.BeginPrint, New Printing.PrintEventHandler(AddressOf Me.Begin_Print)
AddHandler pd.EndPrint, New Printing.PrintEventHandler(AddressOf Me.End_Print)
Dim objPrintPreview As New PrintPreviewDialog
Try
With objPrintPreview
.Document = pd
.WindowState = FormWindowState.Maximized
.PrintPreviewControl.Zoom = 1
.Text = "Catálogo de Produtos"
.ShowDialog()
End With
Catch ex As Exception
MessageBox.Show(ex.ToString())
End Try
End Sub
Private Sub Begin_Print(ByVal sender As Object, ByVal e As Printing.PrintEventArgs)
Dim conn As New SqlClient.SqlConnection
Dim comando As New SqlClient.SqlCommand
Dim cad As String = "N"
Dim dr_cab As SqlClient.SqlDataReader
conn.ConnectionString = My.Settings.SisvenConnectionString
Try
conn.Open()
comando.Connection = conn
comando.Parameters.AddWithValue("@pedven", TextBox1.Text)
comando.CommandText = "Select Vendas_cab.pedven,Vendas_cab.matcli,Vendas_cab.matreg,Cadcli.nomcli,Cadcli.endcli,Cadcli.baicli,Cadcli.cidade,Cadcli.estado,Cadcli.telcli,Cadcli.cgccpf,Cadcli.ie_nrg,Cadven.nomven,Cadcli.nomfan,Cadcli.faxcli,Vendas_cab.datven,Vendas_cab.perdes,Vendas_cab.desfin,Vendas_cab.despro FROM (Vendas_cab INNER JOIN Cadcli ON Vendas_cab.matcli=Cadcli.matcli) INNER JOIN Cadven ON Vendas_cab.Matreg=Cadven.Matreg Where pedven=@pedven"
dr_cab = comando.ExecuteReader
If (dr_cab.HasRows) Then
While dr_cab.Read
'Atualizar os valores dos campos do cabeçalho
numped = dr_cab.GetInt32(0)
codcli = dr_cab.GetInt32(1)
codven = dr_cab.GetInt32(2)
cliente = dr_cab.GetString(3)
endereco = dr_cab.GetString(4)
bairro = dr_cab.GetString(5)
cidade = dr_cab.GetString(6)
uf = dr_cab.GetString(7)
telefone = dr_cab.GetString(8)
numcgc = dr_cab.GetString(9)
ins_nrg = dr_cab.GetString(10)
vendedor = dr_cab.GetString(11)
fantasia = dr_cab.GetString(12)
numfax = dr_cab.GetString(13)
datavda = dr_cab.GetDateTime(14)
perdesc = 0 & dr_cab.GetValue(15)
valdesf = 0 & dr_cab.GetValue(16)
valdesp = 0 & dr_cab.GetValue(17)
valdes = valdesf + valdesp
If Len(Trim(numcgc)) = 11 Then
numcnpj = Mid(numcgc, 1, 3) & "." & Mid(numcgc, 4, 3) & "." & Mid(numcgc, 7, 3) & "-" & Mid(numcgc, 10, 2)
End If
If Len(Trim(numcgc)) = 14 Then
numcnpj = Mid(numcgc, 1, 2) & "." & Mid(numcgc, 3, 3) & "." & Mid(numcgc, 6, 3) & "/" & Mid(numcgc, 9, 4) & "-" & Mid(numcgc, 13, 2)
End If
End While
End If
dr_cab.Close()
comando.CommandText = "Select Vendas_det.codigo,Vendas_det.qdeped,Cadmer.desmer,Cadmer.marca,Vendas_det.valven,Cadmer.pespro FROM Vendas_det INNER JOIN Cadmer ON Vendas_det.codigo=Cadmer.codigo Where pedven=@pedven"
leitor = comando.ExecuteReader
PaginaAtual = 1
Catch ex As Exception
MessageBox.Show("Erro ao efetuar a conexão com a base de dados :" + ex.Message)
Finally
'conn.Close()
'conn.Dispose()
End Try
End Sub
Private Sub pdRelatorios_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
'Variáveis das linhas
Dim LinhasPorPagina As Single = 0
Dim PosicaoDaLinha As Single = 0
Dim LinhaAtual As Integer = 0
'Variáveis das margens
' Dim MargemEsquerda As Single = e.MarginBounds.Left
Dim MargemEsquerda As Single = 25
Dim MargemSuperior As Single = e.MarginBounds.Top + 50
' Dim MargemDireita As Single = e.MarginBounds.Right
Dim MargemDireita As Single = 25
Dim MargemInferior As Single = e.MarginBounds.Bottom
Dim CanetaDaImpressora As Pen = New Pen(Color.Black, 1)
Dim codigoProduto As String
Dim nomeProduto As String
Dim marcaProduto As String
Dim qtdeProduto As Single
Dim valorProduto As Single
Dim subtProduto As Single
'Variáveis das fontes
Dim FonteNegrito As Font
Dim FonteTitulo As Font
Dim FonteSubTitulo As Font
Dim FonteRodape As Font
Dim FonteNormal As Font
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)
LinhaAtual = 0
'Cabeçalho
e.Graphics.DrawString("ORCAMENTO DE VENDAS", FonteTitulo, Brushes.Blue, MargemEsquerda + 150, 40, New StringFormat())
'Imagem
e.Graphics.DrawImage(Image.FromFile("C:\MagroparWeb\imagens\" & "LogoBio.jpg"), 11, 60)
e.Graphics.DrawString("Nº.:" & numped.ToString(), FonteSubTitulo, Brushes.Black, MargemEsquerda + 154, 65, New StringFormat())
e.Graphics.DrawString("DE :" & datavda, FonteSubTitulo, Brushes.Black, MargemEsquerda + 290, 65, New StringFormat())
'e.Graphics.DrawString("DE :" & System.DateTime.Today, FonteSubTitulo, Brushes.Black, MargemEsquerda + 290, 65, New StringFormat())
e.Graphics.DrawLine(CanetaDaImpressora, 180, 90, 815, 90)
'Dados do Cabeçalho do Orçamento
e.Graphics.DrawString("Cliente ........: " & codcli & "-" & cliente, FonteRodape, Brushes.Black, MargemEsquerda + 154, 100, New StringFormat())
e.Graphics.DrawString("Nome Fantasia: " & fantasia, FonteRodape, Brushes.Black, MargemEsquerda + 550, 100, New StringFormat())
e.Graphics.DrawString("Endereço .....: " & endereco & "-" & bairro, FonteRodape, Brushes.Black, MargemEsquerda + 154, 115, New StringFormat())
e.Graphics.DrawString("Vendedor .....: " & codven & "-" & vendedor, FonteRodape, Brushes.Black, MargemEsquerda + 550, 115, New StringFormat())
e.Graphics.DrawString("Cidade/UF ..: " & cidade & "-" & uf, FonteRodape, Brushes.Black, MargemEsquerda + 154, 130, New StringFormat())
e.Graphics.DrawString("Numero Cep ..: " & codven & "-" & vendedor, FonteRodape, Brushes.Black, MargemEsquerda + 550, 130, New StringFormat())
e.Graphics.DrawString("Numero CNPJ .: " & numcnpj, FonteRodape, Brushes.Black, MargemEsquerda + 154, 145, New StringFormat())
e.Graphics.DrawString("Inscricao/RG ..: " & ins_nrg, FonteRodape, Brushes.Black, MargemEsquerda + 550, 145, New StringFormat())
e.Graphics.DrawString("Telefone ......: " & telefone, FonteRodape, Brushes.Black, MargemEsquerda + 154, 160, New StringFormat())
e.Graphics.DrawString("Numero FAX...: " & numfax, FonteRodape, Brushes.Black, MargemEsquerda + 550, 160, New StringFormat())
' e.Graphics.DrawLine(CanetaDaImpressora, 180, 30, 180, 190) - linha vertical
e.Graphics.DrawLine(CanetaDaImpressora, 10, 180, 815, 180)
e.Graphics.DrawString("Código", FonteNegrito, Brushes.Black, MargemEsquerda, 190, New StringFormat())
e.Graphics.DrawString("Produto", FonteNegrito, Brushes.Black, MargemEsquerda + 100, 190, New StringFormat())
e.Graphics.DrawString("Marca", FonteNegrito, Brushes.Black, MargemEsquerda + 400, 190, New StringFormat())
e.Graphics.DrawString("Qtde.", FonteNegrito, Brushes.Black, MargemEsquerda + 500, 190, New StringFormat())
e.Graphics.DrawString("Valor", FonteNegrito, Brushes.Black, MargemEsquerda + 600, 190, New StringFormat())
e.Graphics.DrawString("Subtotal", FonteNegrito, Brushes.Black, MargemEsquerda + 700, 190, New StringFormat())
LinhasPorPagina = e.MarginBounds.Height / FonteNormal.GetHeight(e.Graphics) - 9
LinhaAtual += 5
'Aqui são lidos os dados
While (LinhaAtual < LinhasPorPagina AndAlso leitor.Read())
codigoProduto = leitor.GetString(0)
qtdeProduto = leitor.GetValue(1)
nomeProduto = leitor.GetString(2)
marcaProduto = leitor.GetString(3)
valorProduto = leitor.GetValue(4)
pesmer = 0 & leitor.GetValue(5)
subtProduto = valorProduto * qtdeProduto
PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics))
e.Graphics.DrawString(codigoProduto.ToString(), FonteNormal, Brushes.Black, MargemEsquerda, PosicaoDaLinha, New StringFormat())
e.Graphics.DrawString(nomeProduto, FonteNormal, Brushes.Black, MargemEsquerda + 100, PosicaoDaLinha, New StringFormat())
e.Graphics.DrawString(marcaProduto.ToString(), FonteNormal, Brushes.Black, MargemEsquerda + 400, PosicaoDaLinha, New StringFormat())
e.Graphics.DrawString(qtdeProduto.ToString(), FonteNormal, Brushes.Black, MargemEsquerda + 500, PosicaoDaLinha, New StringFormat())
e.Graphics.DrawString(FormatCurrency(valorProduto).ToString(), FonteNormal, Brushes.Black, MargemEsquerda + 600, PosicaoDaLinha, New StringFormat())
e.Graphics.DrawString(FormatCurrency(subtProduto).ToString(), FonteNormal, Brushes.Black, MargemEsquerda + 700, PosicaoDaLinha, New StringFormat())
LinhaAtual += 1
totmer = totmer + (valorProduto * qtdeProduto)
qdevol = qdevol + qtdeProduto
pestot = pestot + pesmer
End While
If PosicaoDaLinha < 500 Then
PosicaoDaLinha = 500
End If
e.Graphics.DrawLine(CanetaDaImpressora, 10, PosicaoDaLinha, 815, PosicaoDaLinha)
e.Graphics.DrawString(System.DateTime.Today, FonteRodape, Brushes.Black, MargemEsquerda, PosicaoDaLinha + 1, New StringFormat())
e.Graphics.DrawString("Total Volumes : " & qdevol, FonteRodape, Brushes.Black, MargemEsquerda + 400, PosicaoDaLinha + 1, New StringFormat())
e.Graphics.DrawString("Total Mercadoria : ", FonteRodape, Brushes.Black, MargemEsquerda + 550, PosicaoDaLinha + 1, New StringFormat())
e.Graphics.DrawString(FormatCurrency(totmer), FonteRodape, Brushes.Black, MargemEsquerda + 700, PosicaoDaLinha + 1, New StringFormat())
'2ª linha fechamento orçamento
e.Graphics.DrawString(TextBox4.Text, FonteRodape, Brushes.Black, MargemEsquerda, PosicaoDaLinha + 18, New StringFormat())
e.Graphics.DrawString("Peso Mercad. .: " & pestot, FonteRodape, Brushes.Black, MargemEsquerda + 400, PosicaoDaLinha + 18, New StringFormat())
e.Graphics.DrawString("Desconto Financ. " & perdesc & "% :", FonteRodape, Brushes.Black, MargemEsquerda + 550, PosicaoDaLinha + 18, New StringFormat())
e.Graphics.DrawString(FormatCurrency(valdesf), FonteRodape, Brushes.Black, MargemEsquerda + 700, PosicaoDaLinha + 18, New StringFormat())
'3ª linha fechamento orçamento
e.Graphics.DrawString("Transportadora : " & TextBox5.Text, FonteRodape, Brushes.Black, MargemEsquerda, PosicaoDaLinha + 38, New StringFormat())
e.Graphics.DrawString("Desconto Promoc. : ", FonteRodape, Brushes.Black, MargemEsquerda + 550, PosicaoDaLinha + 38, New StringFormat())
e.Graphics.DrawString(FormatCurrency(valdesp), FonteRodape, Brushes.Black, MargemEsquerda + 700, PosicaoDaLinha + 38, New StringFormat())
totped = totmer - (valdesf + valdesp)
e.Graphics.DrawString("Valor Final Pedido : ", FonteRodape, Brushes.Black, MargemEsquerda + 550, PosicaoDaLinha + 58, New StringFormat())
e.Graphics.DrawString(FormatCurrency(totped), FonteRodape, Brushes.Black, MargemEsquerda + 700, PosicaoDaLinha + 58, New StringFormat())
'Rodapé
e.Graphics.DrawLine(CanetaDaImpressora, 10, MargemInferior, 815, MargemInferior)
' e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, MargemInferior, MargemDireita, MargemInferior)
e.Graphics.DrawString(System.DateTime.Now.ToString() & "-" & Usuario, FonteRodape, Brushes.Black, MargemEsquerda + 600, MargemInferior, New StringFormat())
e.Graphics.DrawString("Página : " & PaginaAtual, FonteRodape, Brushes.Black, MargemDireita, MargemInferior, New StringFormat())
'Incrementa o número da página
PaginaAtual += 1
If (LinhaAtual > LinhasPorPagina) Then
e.HasMorePages = True
Else
e.HasMorePages = False
End If
End Sub
Tô com a corda no pescoço por conta de prazo estourado, quem puder, ajude aê ... valeu !!!
Discussão (1)
Carregando comentários...