Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

Dificuldades com Print Preview

Recommended Posts

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("preco"), 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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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("preco"), 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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basicamente or que esta tudo pronto. só falta paginar

Bom, talves isso possa ajudar entender melhor o quadro:

 

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())

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom pessoal.

 

 

 

Alguem 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, resolovi fazer como no macoratti em:http://www.macoratti.net/vbn_prn2.htm

Mas deu alguns problemas:

1) o Código faz a leitura, exibe o numero de registros por pagina certinho mas, as paginas que passam do numero de paginas necessarias paa exibir todos os registros, continuam sendo exibidas em branco.

Coloquei 8 registros por pagina. da certinho.

Primeiro pagina os 8 primeiros e na segunda os outros 5 ultimos registros. Mas, se clikar no botão vai para a terceira, quarta, n paginas em branco.

 

isso com

If (leitor("produtoID") <> Nothing) Then
				e.HasMorePages = True
			Else
				e.HasMorePages = False
			End If

Por que se eu fizer assim,

If (leitor("produtoID") =Nothing) Then
				e.HasMorePages = True
			Else
				e.HasMorePages = False
			End If
ele exibe a primeira pagina certo com os seus 8 registros e diz não ter mais paginas. só que se eu fechar o PrintDocument, ele abre ele de novo e mostra a segunda pagina com os outros 5 registros e, se eu insistir e fechar de novo ai ele fechja e não exibe pagina alguma.

Como resolve isso?

 

2) Aqui neste cdódigo, estou fazendo o botão IMPRIMIR e o código do PrintDocumento todo na mesmo form, o form de pedidos.

Mas eu queria era fazer o codigo do Print Docdument num form separado.

Como fazer?

 

Segue o código:

Private Sub Impimir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Impimir.Click
		Dim ccodigo As String = codigoped.Text
		Dim objPrintPreview As PrintPreviewDialog

		Dim strConnString As String = "server=localhost;userid=root;password=;database=Vendas"
		Dim conexao As New MySqlConnection(strConnString)
		conexao.Open()

		'pegando o numero total de linhas
		Dim PrintStringdetalhespedidoscount As String = "Select Count(*) from detalhespedidos where pedidoID= " & ccodigo & " order by produtoID"
		Dim cmdcount As New MySqlCommand(PrintStringdetalhespedidoscount, conexao)
		totalLinhas = CInt(cmdcount.ExecuteScalar())


		Dim PrintStringdetalhespedidos As String = "Select * from detalhespedidos where pedidoID= " & ccodigo & " order by produtoID"
		Dim cmd As New MySqlCommand(PrintStringdetalhespedidos, conexao)
		leitor = cmd.ExecuteReader()



		'Inicia o Loop através do DataReader para passar as informações para a rotina de impressão
		While leitor.Read()
			'criamos um novo Documento de Impressão
			Dim pd As PrintDocument = New PrintDocument()
			'estabelecemos a relação entre o novo objeto PrintDocument e o procedimento rptClientesAtivos
			AddHandler pd.PrintPage, AddressOf Me.rptItensPedidos
			'****************************************************************************
********************'
			'SE VOCÊ DESEJA ENVIAR O RELATÓRIO DIRETAMENTE PARA A IMPRESSORA BASTA REMOVER AS LINHAS ABAIXO  '
			'E INVOCAR O MÉTODO PRINT DO OBJETO PRINTDOCUMENT DESTA FORMA: pd.Print()						'								   '
			'****************************************************************************
********************'
			'criamos uma nova instância do objeto PrintPreviewDialog										 
			objPrintPreview = New PrintPreviewDialog()
			'atribuimos valores para algumas das propriedades do objeto									  
			With objPrintPreview
				.Document = pd 'informamos qual é o documento a ser visualizado							  
				.WindowState = FormWindowState.Maximized 'inicia com a janela maximizada					 
				.PrintPreviewControl.Zoom = 1 'inicia com o Zoom em 100%									  
				.Text = "Impressão do pedido" 'muda o título da janela de visualização  
				.ShowDialog() 'exibe a janela para o usuário
			End With
			'****************************************************************************
********************'
			'PARA ENVIAR DIRETAMENTE PARA A IMPRESSORA: REMOVER ATÉ AQUI E INCLUIR pd.Print()				'
			'****************************************************************************
********************'
		End While

		'fecha o DataReader
		leitor.Close()
		'fecha a conexão
		conexao.Close()
		'restaura o cursor
		Cursor.Current = System.Windows.Forms.Cursors.Default

	End Sub

Private Sub rptItensPedidos(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
		Dim ccodigo As Integer = codigoped.Text

		Dim produtoID As Integer
		Dim unidade As String
		Dim descricao As String
		Dim preço As Integer
		Dim quantidade As Integer
		Dim subtotal As Integer

		'variáveis para definição das configurações da impressora (margens, número de linhas, espessura da caneta) 
		Dim LinhasPorPagina As Single = 0
		Dim PosicaoDaLinha As Single = 0
		Dim LinhaAtual As Integer = 0

		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)

		'variáveis para armazenar as fontes que serão utilizadas durante a impressão
		Dim FonteNegrito As Font
		Dim FonteTitulo As Font
		Dim FonteSubTitulo As Font
		Dim FonteRodape As Font
		Dim FonteNormal As Font

		'definição das fontes (tamanho e estilo)
		FonteNegrito = New Font("Arial", 9, FontStyle.Bold)
		FonteTitulo = New Font("Arial", 20, FontStyle.Bold)
		FonteSubTitulo = New Font("Arial", 12, FontStyle.Bold)
		FonteRodape = New Font("Arial", 8)
		FonteNormal = New Font("Arial", 9)

		'********************************
		'inicio imprime o cabeçalho do relatório
		'********************************
		e.Graphics.DrawLine(Pens.Black, MargemEsquerda, 60, MargemDireita, 60)

		e.Graphics.DrawImage(Image.FromFile("imagens\" & "maco10.gif"), 100, 68)
		e.Graphics.DrawString("PEDIDO", New Font("arial", 15, FontStyle.Regular), Brushes.Black, MargemEsquerda + 260, 80)
		e.Graphics.DrawString("Dados da empresa", New Font("arial", 15, FontStyle.Regular), Brushes.Black, MargemEsquerda + 400, 80)

		e.Graphics.DrawString("Pedido	 : ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda, 160)
		e.Graphics.DrawString(ccodigo, New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 140, 160)
		Dim pgto As String
		Dim PrintStringpedidos As String = "select p.pedidoID, p.clienteID, p.ativo, p.data, p.cobranca, p.entrega, p.frete, p.pgto, p.CondPgto, c.nome as nome, c.tipo as pessoa, c.cpf_cnpj as dcto from  pedidos p inner join clientes c ON  p.clienteID = c.clienteID  where pedidoID= " & ccodigo
		Dim DRP As DataSet = accDb.ExecuteDS(PrintStringpedidos, TabelaPedidos)
		For Each linha As DataRow In DRP.Tables(0).Rows
			e.Graphics.DrawString("Data	 : ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 200, 160)
			e.Graphics.DrawString(linha.Item("data"), New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 250, 160)

			e.Graphics.DrawString("Frete	 : ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 400, 160)
			e.Graphics.DrawString(linha.Item("frete"), New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 450, 160)

			If linha.Item("PGTO") = "V" Then
				pgto = "À Vista"
				e.Graphics.DrawString("PAGAMENTO:", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 300, 180)
				e.Graphics.DrawString(pgto, New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 450, 180)
			End If

			If linha.Item("PGTO") = "P" Then
				pgto = "À PRAZO"
				e.Graphics.DrawString("PAGAMENTO:", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 300, 180)
				e.Graphics.DrawString(pgto, New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 400, 180)
				e.Graphics.DrawString("Forma: ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 500, 180)
				e.Graphics.DrawString(linha.Item("CondPgto").ToString.Replace(" ", ",") + " Dias", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 570, 180)
			End If
			Dim documento As String = ""
			Dim TIPO As String = ""
			If linha.Item("dcto").ToString.Length = 11 Then
				' mascara de cpf
				documento = String.Format("999,999,999-99", linha.Item("dcto").ToString)
				TIPO = "CPF"
			End If

			If linha.Item("dcto").ToString.Length = 14 Then
				' mascara de cnpj
				documento = String.Format("99,999,999-9999-99", linha.Item("dcto").ToString)
				TIPO = "CNPJ"
			End If

			e.Graphics.DrawString(TIPO & "		   : ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda, 180)
			e.Graphics.DrawString(documento, New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 140, 180)
			e.Graphics.DrawString("Nome		 : ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda, 200)
			e.Graphics.DrawString(linha.Item("nome"), New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 140, 200)
			e.Graphics.DrawString("Cobrança	: ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda, 220)
			e.Graphics.DrawString(linha.Item("cobranca"), New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 140, 220)
			e.Graphics.DrawString("Endereço	: ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda, 240)
			e.Graphics.DrawString(linha.Item("entrega"), New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 140, 240)
		Next linha
		'********************************
		'fim imprime o cabeçalho do relatório
		'********************************
		'*******************************************
		'imprime os títulos das colunas do relatório
		'*******************************************
		e.Graphics.DrawLine(Pens.Black, MargemEsquerda, 260, MargemDireita, 260)
		e.Graphics.DrawString("Cód.", FonteNormal, Brushes.Red, MargemEsquerda, 260, New StringFormat())
		e.Graphics.DrawString("Unid.", FonteNormal, Brushes.Red, MargemEsquerda + 50, 260, New StringFormat())
		e.Graphics.DrawString("Descrição", FonteNormal, Brushes.Red, MargemEsquerda + 100, 260, New StringFormat())
		e.Graphics.DrawString("Preço", FonteNormal, Brushes.Red, MargemEsquerda + 350, 260, New StringFormat())
		e.Graphics.DrawString("Qtde", FonteNormal, Brushes.Red, MargemEsquerda + 450, 260, New StringFormat())
		e.Graphics.DrawString("Total", FonteNormal, Brushes.Red, MargemEsquerda + 550, 260, New StringFormat())
		e.Graphics.DrawLine(Pens.Black, MargemEsquerda, 280, MargemDireita, 280)
		
		'define o número de linhas por página de acordo com a área de impressão e o tamanho da fonte
		'subtraimos o valor 10 do resultado para acomodar o rodapé do relatório
		'LinhasPorPagina = e.MarginBounds.Height / FonteNormal.GetHeight(e.Graphics) - 10
		LinhasPorPagina = 8
		'ativamos o tratamento de erro
		Try
			'alimentamos as variáveis com as informações do primeiro registro 
			'extraído do banco de dados através do objeto MySqlDataReader
			produtoID = leitor.GetInt32("produtoID").ToString
			unidade = leitor.GetString("unidade").ToString
			descricao = leitor.GetString("descricao").ToString
			preço = leitor.GetInt32("preço").ToString
			quantidade = leitor.GetInt32("quantidade").ToString
			subtotal = leitor.GetInt32("subtotal").ToString

			'iniciamos o loop através dos registros do DataReader 
			'respeitando o número de linhas por página
			While (LinhaAtual < LinhasPorPagina AndAlso leitor.Read())
				PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics)) + 100
				e.Graphics.DrawString(produtoID, FonteNormal, Brushes.Black, MargemEsquerda, PosicaoDaLinha, New StringFormat())
				e.Graphics.DrawString(unidade, FonteNormal, Brushes.Black, MargemEsquerda + 50, PosicaoDaLinha, New StringFormat())
				e.Graphics.DrawString(descricao, FonteNormal, Brushes.Black, MargemEsquerda + 100, PosicaoDaLinha, New StringFormat())
				e.Graphics.DrawString(preço, FonteNormal, Brushes.Black, MargemEsquerda + 350, PosicaoDaLinha, New StringFormat())
				e.Graphics.DrawString(quantidade, FonteNormal, Brushes.Black, MargemEsquerda + 450, PosicaoDaLinha, New StringFormat())
				e.Graphics.DrawString(subtotal, FonteNormal, Brushes.Black, MargemEsquerda + 550, PosicaoDaLinha, New StringFormat())

				LinhaAtual += 1
				'verifica o número da linha atual para não ultrapassar o número de linhas por página
				If (LinhaAtual < LinhasPorPagina) Then
					produtoID = leitor.GetInt32("produtoID").ToString
					unidade = leitor.GetString("unidade").ToString
					descricao = leitor.GetString("descricao").ToString
					preço = leitor.GetInt32("preço").ToString
					quantidade = leitor.GetInt32("quantidade").ToString
					subtotal = leitor.GetInt32("subtotal").ToString
				End If
				TotalNota += leitor("subtotal")
			End While
			'incrementa o número da página
			PaginaAtual += 1

			If (leitor("produtoID") <> Nothing) Then
				e.HasMorePages = True
			Else
				e.HasMorePages = False
			End If

			'captura qualquer Exception gerada durante o processamento
		Catch exe As System.Exception
			'se desejar, inclua código para tratamento das exceptions neste ponto
		End Try
		'*****************************
		'imprime o rodapé do relatório
		'*****************************
		''linha transversal

		e.Graphics.DrawLine(Pens.Black, MargemEsquerda, MargemInferior - 20, MargemDireita, PosicaoDaLinha)

		e.Graphics.DrawLine(Pens.Black, MargemEsquerda, MargemInferior - 20, MargemDireita, MargemInferior - 20)
		e.Graphics.DrawString("Total da Nota", FonteNormal, Brushes.Red, MargemEsquerda + 350, MargemInferior - 20, New StringFormat())
		e.Graphics.DrawString(Format(TotalNota, "currency"), FonteNormal, Brushes.Red, MargemEsquerda + 500, MargemInferior - 20, New StringFormat())
		e.Graphics.DrawLine(Pens.Black, MargemEsquerda, MargemInferior, MargemDireita, MargemInferior)
		e.Graphics.DrawString(System.DateTime.Now, FonteRodape, Brushes.Black, MargemEsquerda, MargemInferior, New StringFormat())
		TotalPaginas = Ceiling(totalLinhas / LinhasPorPagina)
		e.Graphics.DrawString(TotalPaginas & " Paginas", FonteRodape, Brushes.Black, MargemDireita - 300, MargemInferior, New StringFormat())


	End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas.. E a resposta?

Porque não veio?

 

Mas. não. não é o mesmo problema!

 

La estava fazendo deum jeito e aqui mudei o jeito de fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você mudou o jeito de fazer mas o assunto é o mesmo. Não fica criando tópicos pra chamar a atenção. Se não teve respostas é por que ninguém achou uma solução ainda. Do jeito que esta tentando fazer é inviável, acredito que ninguém ou quase ninguém trabalhe desta forma, por isso esta sem respostas.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.