LIMITAR QTD DE CARACTERES POR LINHA NO RELATORIO
Estou precisando apenas saber como limitar a qtd de caracteres de uma linha para que possa ser impresso em outra linha caso seja muito grande e ultrapasse a margem. O Código está logo abaixo.
Imports MySql.Data.MySqlClient
Public Class RelatorioGeralObras
Dim cmd As MySqlCommand
Private paginaAtual As Integer = 1
Private MyConnection As MySqlConnection
Private Leitor As MySqlDataReader
Private RelatorioTitulo As String
Private ContarItens As Single
Dim c As New conexao
Sub Impressao()
[ô]obtem a string de conexao
MyConnection = New MySqlConnection(c.connString)
[ô]define o titulo do relatorio
RelatorioTitulo = [Ô]Relatório Geral de Obras[Ô]
[ô]define os objetos printdocument e os eventos associados
Dim pd As Printing.PrintDocument = New Printing.PrintDocument()
[ô]IMPORTANTE - definimos 3 eventos para tratar a impressão : PringPage, BeginPrint e EndPrint.
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)
[ô]define o objeto para visualizar a impressao
Dim objPrintPreview As New PrintPreviewDialog
Try
[ô]define o formulário como maximizado e com Zoom
With objPrintPreview
.Document = pd
.WindowState = FormWindowState.Maximized
.PrintPreviewControl.Zoom = 1
.Text = [Ô]Relação de Obras[Ô]
.ShowDialog()
End With
Catch ex As Exception
MessageBox.Show(ex.ToString())
End Try
End Sub
[ô]A conexÆo e o DataReader ‚ aberto aqui
Private Sub Begin_Print(ByVal sender As Object, ByVal e As Printing.PrintEventArgs)
Dim sql As String = [Ô]Select idObra,descricao,area,endereco,quadra,lote From obra[Ô]
Dim MyComand As New MySqlCommand(sql, MyConnection)
[ô]define objeto connection e command
MyConnection.Open()
Leitor = MyComand.ExecuteReader()
paginaAtual = 1
End Sub
[ô]Layout da(s) página(s) a imprimir
Private Sub pdRelatorios_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
[ô]Variaveis das linhas
Dim LinhasPorPagina As Single = 0
Dim PosicaoDaLinha As Single = 0
Dim LinhaAtual 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 CanetaDaImpressora2 As Pen = New Pen(Color.Black, 2)
Dim Zebrado As Pen = New Pen(Color.WhiteSmoke, 1)
[ô]VARIÃVEIS PARA OS CAMPOS QUE APARECERÃO NA TELA
Dim Codigo As Integer
Dim Descricao As String
Dim Endereco As String
Dim Quadra As String
Dim Area As Double
Dim Lote As String
[ô]Variaveis das fontes
Dim FonteNegrito As Font
Dim FonteTitulo As Font
Dim FonteSubTitulo As Font
Dim FonteRodape As Font
Dim FonteNormal As Font
Dim FonteGrande As Font
[ô]define efeitos em fontes
FonteNegrito = New Font([Ô]Arial[Ô], 10, FontStyle.Bold)
FonteTitulo = New Font([Ô]Arial[Ô], 15, FontStyle.Bold)
FonteSubTitulo = New Font([Ô]Arial[Ô], 16, FontStyle.Bold)
FonteRodape = New Font([Ô]Arial[Ô], 9)
FonteNormal = New Font([Ô]Arial[Ô], 8)
FonteGrande = New Font([Ô]Arial[Ô], 16)
[ô]define valores para linha atual e para linha da impressao
LinhaAtual = 0
Dim L As Integer = 0
[ô]#################InÃcio do cabeçalho da empresa####################################
[ô]Linha do Cabecalho
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda - 80, 40, MargemDireita + 80, 40)
CabecalhoEmpresa()
[ô]Imagem
[ô]****imagem do Lado esquerdo empresa
e.Graphics.DrawImage(Image.FromFile([Ô]C:\Users\Public\Pictures\Sample Pictures\Penguins.JPG[Ô]), e.MarginBounds.X - 80, e.MarginBounds.Y - 55, 100, 70)
[ô]cabeçalho com os dados da empresa
[ô]e.Graphics.DrawString(Empresa, FonteGrande, Brushes.Black, MargemEsquerda + 30, 45, New StringFormat())
[ô]e.Graphics.DrawString([Ô]Endereço: [Ô] & EnderecoEmpresa & [Ô], [Ô] & NumeroEmpresa & [Ô] Bairro: [Ô] & BairroEmpresa, FonteRodape, Brushes.Black, MargemEsquerda + 30, 70, New StringFormat())
[ô]e.Graphics.DrawString(BairroEmpresa, FonteNormal, Brushes.Black, MargemEsquerda + 200, 60, New StringFormat())
[ô]e.Graphics.DrawString(FoneEmpresa, FonteNormal, Brushes.Black, MargemEsquerda + 300, 60, New StringFormat())
[ô]e.Graphics.DrawString([Ô]Fone 1: [Ô] & Fone1Empresa & [Ô] Fone 2: [Ô] & Fone2Empresa & [Ô] Cel 1: [Ô] & Cel1Empresa & [Ô] Cel 2: [Ô] & Cel2Empresa & [Ô] Fax: [Ô] & FaxEmpresa, FonteRodape, Brushes.Black, MargemEsquerda + 30, 90, New StringFormat())
[ô]e.Graphics.DrawString([Ô]CNPJ: [Ô] & CNPJEmpresa & [Ô], E-mail: [Ô] & EmailEmpresa, FonteRodape, Brushes.Black, MargemEsquerda + 30, 110, New StringFormat())
[ô]#################Fim do cabeçalho da empresa########################################
e.Graphics.DrawString([Ô]Relação dos serviços cadastrados[Ô], FonteTitulo, Brushes.Black, MargemEsquerda - 80, 130, New StringFormat())
e.Graphics.DrawString([Ô]Gerado em: [Ô] + DateTime.Now, FonteNormal, Brushes.Black, MargemEsquerda + 520, 130, New StringFormat())
[ô]e.Graphics.DrawString(RelatorioTitulo & System.DateTime.Today, FonteSubTitulo, Brushes.Black, MargemEsquerda + 250, 120, New StringFormat())
[ô]Linha de cima
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda - 80, 170, MargemDireita + 80, 170)
[ô]Linha de baixo
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda - 80, 190, MargemDireita + 80, 190)
[ô]campos a serem impressos
[ô]Em cima
[ô]e.Graphics.DrawString([Ô]Código[Ô], FonteNegrito, Brushes.Black, MargemEsquerda - 80, 170, New StringFormat())
e.Graphics.DrawString([Ô]Obra[Ô], FonteNegrito, Brushes.Black, MargemEsquerda - 80, 170, New StringFormat())
e.Graphics.DrawString([Ô]Ãrea[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 260, 170, New StringFormat())
e.Graphics.DrawString([Ô]Endereço[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 310, 170, New StringFormat())
e.Graphics.DrawString([Ô]Quadra[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 610, 170, New StringFormat())
e.Graphics.DrawString([Ô]Lote[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 660, 170, New StringFormat())
LinhasPorPagina = CInt(e.MarginBounds.Height / FonteNormal.GetHeight(e.Graphics) - 9)
[ô]Aqui sao lidos os dados
While (LinhaAtual < LinhasPorPagina AndAlso Leitor.Read())
[ô]obtem os valores do datareader
Codigo = Leitor.GetInt32(0).ToString
Descricao = Leitor.GetValue(1).ToString
Area = Leitor.GetValue(2).ToString
Endereco = Leitor.GetValue(3).ToString
Quadra = Leitor.GetValue(4).ToString
Lote = Leitor.GetValue(5)
[ô]inicia a impressao
[ô]PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics))
PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNegrito.GetHeight(e.Graphics))
[ô]coloca uma linha para separar cada produto
[ô]posicaodalinha = margemsuperior
[ô]e.Graphics.FillRectangle(Brushes.WhiteSmoke, MargemEsquerda - 80, MargemSuperior, MargemDireita + 63, 12)
[ô]e.Graphics.DrawString(Format(Codigo, [Ô]00000[Ô]), FonteNormal, Brushes.Black, MargemEsquerda - 80, PosicaoDaLinha, New StringFormat())
e.Graphics.DrawString(Descricao.ToString, FonteNormal, Brushes.Black, MargemEsquerda - 80, PosicaoDaLinha, New StringFormat())
e.Graphics.DrawString(Format(Area, [Ô]#,###,###,##0.00[Ô]), FonteNormal, Brushes.Black, MargemEsquerda + 305, PosicaoDaLinha, New StringFormat(StringFormatFlags.DirectionRightToLeft))
e.Graphics.DrawString(Endereco.ToString, FonteNormal, Brushes.Black, MargemEsquerda + 310, PosicaoDaLinha, New StringFormat())
e.Graphics.DrawString(Quadra.ToString, FonteNormal, Brushes.Black, MargemEsquerda + 630, PosicaoDaLinha, New StringFormat())
e.Graphics.DrawString(Lote.ToString, FonteNormal, Brushes.Black, MargemEsquerda + 660, PosicaoDaLinha, New StringFormat())
[ô]Imprime uma linha no final dos registros
[ô]e.Graphics.DrawLine(CanetaDaImpressora2, MargemEsquerda - 80, PosicaoDaLinha + 25, MargemDireita + 80, PosicaoDaLinha + 25)
LinhaAtual += 1
End While
[ô]Rodape
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda - 80, MargemInferior, MargemDireita + 80, MargemInferior)
LinhaAtual += CInt(FonteNormal.GetHeight(e.Graphics))
LinhaAtual += 1
[ô]Imprime uma linha no final dos registros
e.Graphics.DrawLine(CanetaDaImpressora2, MargemEsquerda - 80, PosicaoDaLinha + 25, MargemDireita + 80, PosicaoDaLinha + 25)
[ô]Conta os Qtd de funcionários
TotalItens()
e.Graphics.DrawString([Ô]Quantidade de serviços cadastrados: [Ô] + ContarItens.ToString, FonteNegrito, Brushes.Black, MargemEsquerda - 80, PosicaoDaLinha + 35, New StringFormat())
e.Graphics.DrawString([Ô]Página : [Ô] & paginaAtual, FonteRodape, Brushes.Black, MargemDireita - 50, MargemInferior, New StringFormat())
[ô]Incrementa o n£mero da pagina
paginaAtual += 1
[ô]verifica se continua imprimindo
If (LinhaAtual > LinhasPorPagina) Then
e.HasMorePages = True
Else
e.HasMorePages = False
End If
End Sub
[ô]Encerra a conexão e o DataReader
Private Sub End_Print(ByVal sender As Object, ByVal byvale As Printing.PrintEventArgs)
Leitor.Close()
MyConnection.Close()
End Sub
Private Sub TotalItens()
Dim localizar As New BD
Dim consulta As String
Dim c As New conexao
consulta = String.Format([Ô]SELECT COUNT(*)FROM obra[Ô])
ContarItens = localizar.SqlEscalar(consulta)
c.conn.Close()
End Sub
End Class
Imports MySql.Data.MySqlClient
Public Class RelatorioGeralObras
Dim cmd As MySqlCommand
Private paginaAtual As Integer = 1
Private MyConnection As MySqlConnection
Private Leitor As MySqlDataReader
Private RelatorioTitulo As String
Private ContarItens As Single
Dim c As New conexao
Sub Impressao()
[ô]obtem a string de conexao
MyConnection = New MySqlConnection(c.connString)
[ô]define o titulo do relatorio
RelatorioTitulo = [Ô]Relatório Geral de Obras[Ô]
[ô]define os objetos printdocument e os eventos associados
Dim pd As Printing.PrintDocument = New Printing.PrintDocument()
[ô]IMPORTANTE - definimos 3 eventos para tratar a impressão : PringPage, BeginPrint e EndPrint.
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)
[ô]define o objeto para visualizar a impressao
Dim objPrintPreview As New PrintPreviewDialog
Try
[ô]define o formulário como maximizado e com Zoom
With objPrintPreview
.Document = pd
.WindowState = FormWindowState.Maximized
.PrintPreviewControl.Zoom = 1
.Text = [Ô]Relação de Obras[Ô]
.ShowDialog()
End With
Catch ex As Exception
MessageBox.Show(ex.ToString())
End Try
End Sub
[ô]A conexÆo e o DataReader ‚ aberto aqui
Private Sub Begin_Print(ByVal sender As Object, ByVal e As Printing.PrintEventArgs)
Dim sql As String = [Ô]Select idObra,descricao,area,endereco,quadra,lote From obra[Ô]
Dim MyComand As New MySqlCommand(sql, MyConnection)
[ô]define objeto connection e command
MyConnection.Open()
Leitor = MyComand.ExecuteReader()
paginaAtual = 1
End Sub
[ô]Layout da(s) página(s) a imprimir
Private Sub pdRelatorios_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
[ô]Variaveis das linhas
Dim LinhasPorPagina As Single = 0
Dim PosicaoDaLinha As Single = 0
Dim LinhaAtual 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 CanetaDaImpressora2 As Pen = New Pen(Color.Black, 2)
Dim Zebrado As Pen = New Pen(Color.WhiteSmoke, 1)
[ô]VARIÃVEIS PARA OS CAMPOS QUE APARECERÃO NA TELA
Dim Codigo As Integer
Dim Descricao As String
Dim Endereco As String
Dim Quadra As String
Dim Area As Double
Dim Lote As String
[ô]Variaveis das fontes
Dim FonteNegrito As Font
Dim FonteTitulo As Font
Dim FonteSubTitulo As Font
Dim FonteRodape As Font
Dim FonteNormal As Font
Dim FonteGrande As Font
[ô]define efeitos em fontes
FonteNegrito = New Font([Ô]Arial[Ô], 10, FontStyle.Bold)
FonteTitulo = New Font([Ô]Arial[Ô], 15, FontStyle.Bold)
FonteSubTitulo = New Font([Ô]Arial[Ô], 16, FontStyle.Bold)
FonteRodape = New Font([Ô]Arial[Ô], 9)
FonteNormal = New Font([Ô]Arial[Ô], 8)
FonteGrande = New Font([Ô]Arial[Ô], 16)
[ô]define valores para linha atual e para linha da impressao
LinhaAtual = 0
Dim L As Integer = 0
[ô]#################InÃcio do cabeçalho da empresa####################################
[ô]Linha do Cabecalho
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda - 80, 40, MargemDireita + 80, 40)
CabecalhoEmpresa()
[ô]Imagem
[ô]****imagem do Lado esquerdo empresa
e.Graphics.DrawImage(Image.FromFile([Ô]C:\Users\Public\Pictures\Sample Pictures\Penguins.JPG[Ô]), e.MarginBounds.X - 80, e.MarginBounds.Y - 55, 100, 70)
[ô]cabeçalho com os dados da empresa
[ô]e.Graphics.DrawString(Empresa, FonteGrande, Brushes.Black, MargemEsquerda + 30, 45, New StringFormat())
[ô]e.Graphics.DrawString([Ô]Endereço: [Ô] & EnderecoEmpresa & [Ô], [Ô] & NumeroEmpresa & [Ô] Bairro: [Ô] & BairroEmpresa, FonteRodape, Brushes.Black, MargemEsquerda + 30, 70, New StringFormat())
[ô]e.Graphics.DrawString(BairroEmpresa, FonteNormal, Brushes.Black, MargemEsquerda + 200, 60, New StringFormat())
[ô]e.Graphics.DrawString(FoneEmpresa, FonteNormal, Brushes.Black, MargemEsquerda + 300, 60, New StringFormat())
[ô]e.Graphics.DrawString([Ô]Fone 1: [Ô] & Fone1Empresa & [Ô] Fone 2: [Ô] & Fone2Empresa & [Ô] Cel 1: [Ô] & Cel1Empresa & [Ô] Cel 2: [Ô] & Cel2Empresa & [Ô] Fax: [Ô] & FaxEmpresa, FonteRodape, Brushes.Black, MargemEsquerda + 30, 90, New StringFormat())
[ô]e.Graphics.DrawString([Ô]CNPJ: [Ô] & CNPJEmpresa & [Ô], E-mail: [Ô] & EmailEmpresa, FonteRodape, Brushes.Black, MargemEsquerda + 30, 110, New StringFormat())
[ô]#################Fim do cabeçalho da empresa########################################
e.Graphics.DrawString([Ô]Relação dos serviços cadastrados[Ô], FonteTitulo, Brushes.Black, MargemEsquerda - 80, 130, New StringFormat())
e.Graphics.DrawString([Ô]Gerado em: [Ô] + DateTime.Now, FonteNormal, Brushes.Black, MargemEsquerda + 520, 130, New StringFormat())
[ô]e.Graphics.DrawString(RelatorioTitulo & System.DateTime.Today, FonteSubTitulo, Brushes.Black, MargemEsquerda + 250, 120, New StringFormat())
[ô]Linha de cima
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda - 80, 170, MargemDireita + 80, 170)
[ô]Linha de baixo
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda - 80, 190, MargemDireita + 80, 190)
[ô]campos a serem impressos
[ô]Em cima
[ô]e.Graphics.DrawString([Ô]Código[Ô], FonteNegrito, Brushes.Black, MargemEsquerda - 80, 170, New StringFormat())
e.Graphics.DrawString([Ô]Obra[Ô], FonteNegrito, Brushes.Black, MargemEsquerda - 80, 170, New StringFormat())
e.Graphics.DrawString([Ô]Ãrea[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 260, 170, New StringFormat())
e.Graphics.DrawString([Ô]Endereço[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 310, 170, New StringFormat())
e.Graphics.DrawString([Ô]Quadra[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 610, 170, New StringFormat())
e.Graphics.DrawString([Ô]Lote[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 660, 170, New StringFormat())
LinhasPorPagina = CInt(e.MarginBounds.Height / FonteNormal.GetHeight(e.Graphics) - 9)
[ô]Aqui sao lidos os dados
While (LinhaAtual < LinhasPorPagina AndAlso Leitor.Read())
[ô]obtem os valores do datareader
Codigo = Leitor.GetInt32(0).ToString
Descricao = Leitor.GetValue(1).ToString
Area = Leitor.GetValue(2).ToString
Endereco = Leitor.GetValue(3).ToString
Quadra = Leitor.GetValue(4).ToString
Lote = Leitor.GetValue(5)
[ô]inicia a impressao
[ô]PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics))
PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNegrito.GetHeight(e.Graphics))
[ô]coloca uma linha para separar cada produto
[ô]posicaodalinha = margemsuperior
[ô]e.Graphics.FillRectangle(Brushes.WhiteSmoke, MargemEsquerda - 80, MargemSuperior, MargemDireita + 63, 12)
[ô]e.Graphics.DrawString(Format(Codigo, [Ô]00000[Ô]), FonteNormal, Brushes.Black, MargemEsquerda - 80, PosicaoDaLinha, New StringFormat())
e.Graphics.DrawString(Descricao.ToString, FonteNormal, Brushes.Black, MargemEsquerda - 80, PosicaoDaLinha, New StringFormat())
e.Graphics.DrawString(Format(Area, [Ô]#,###,###,##0.00[Ô]), FonteNormal, Brushes.Black, MargemEsquerda + 305, PosicaoDaLinha, New StringFormat(StringFormatFlags.DirectionRightToLeft))
e.Graphics.DrawString(Endereco.ToString, FonteNormal, Brushes.Black, MargemEsquerda + 310, PosicaoDaLinha, New StringFormat())
e.Graphics.DrawString(Quadra.ToString, FonteNormal, Brushes.Black, MargemEsquerda + 630, PosicaoDaLinha, New StringFormat())
e.Graphics.DrawString(Lote.ToString, FonteNormal, Brushes.Black, MargemEsquerda + 660, PosicaoDaLinha, New StringFormat())
[ô]Imprime uma linha no final dos registros
[ô]e.Graphics.DrawLine(CanetaDaImpressora2, MargemEsquerda - 80, PosicaoDaLinha + 25, MargemDireita + 80, PosicaoDaLinha + 25)
LinhaAtual += 1
End While
[ô]Rodape
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda - 80, MargemInferior, MargemDireita + 80, MargemInferior)
LinhaAtual += CInt(FonteNormal.GetHeight(e.Graphics))
LinhaAtual += 1
[ô]Imprime uma linha no final dos registros
e.Graphics.DrawLine(CanetaDaImpressora2, MargemEsquerda - 80, PosicaoDaLinha + 25, MargemDireita + 80, PosicaoDaLinha + 25)
[ô]Conta os Qtd de funcionários
TotalItens()
e.Graphics.DrawString([Ô]Quantidade de serviços cadastrados: [Ô] + ContarItens.ToString, FonteNegrito, Brushes.Black, MargemEsquerda - 80, PosicaoDaLinha + 35, New StringFormat())
e.Graphics.DrawString([Ô]Página : [Ô] & paginaAtual, FonteRodape, Brushes.Black, MargemDireita - 50, MargemInferior, New StringFormat())
[ô]Incrementa o n£mero da pagina
paginaAtual += 1
[ô]verifica se continua imprimindo
If (LinhaAtual > LinhasPorPagina) Then
e.HasMorePages = True
Else
e.HasMorePages = False
End If
End Sub
[ô]Encerra a conexão e o DataReader
Private Sub End_Print(ByVal sender As Object, ByVal byvale As Printing.PrintEventArgs)
Leitor.Close()
MyConnection.Close()
End Sub
Private Sub TotalItens()
Dim localizar As New BD
Dim consulta As String
Dim c As New conexao
consulta = String.Format([Ô]SELECT COUNT(*)FROM obra[Ô])
ContarItens = localizar.SqlEscalar(consulta)
c.conn.Close()
End Sub
End Class
Marcos há um tempo atrás tive um problema similar ao seu.
Pesquisei na net mas não deu
O que fiz então
1 º Coloquei os Campos em outros locais ,ex:
Era assim
Razão Social =XXXXXXXXXXXXXXXXXXXXXX Nome Fantasia XXXXXXXXXXXXXXXXXXXXXXX
Ficou assim
Razão Social =XXXXXXXXXXXXXXXXXXXXXX
Nome Fantasia XXXXXXXXXXXXXXXXXXXXXXX
2 º A fonte do datagrid diminuà de tamanho
3º Aumentei a área útil da impressão
O que era
Dim MargemEsquerda As Single = e.MarginBounds.Left
Dim MargemDireita As Single = e.MarginBounds.Right
Ficou assim
Dim MargemEsquerda As Single = e.MarginBounds.Left - 60
Dim MargemDireita As Single = e.MarginBounds.Right + 60
Bom ,no meu caso deu certo.
Pesquisei na net mas não deu
O que fiz então
1 º Coloquei os Campos em outros locais ,ex:
Era assim
Razão Social =XXXXXXXXXXXXXXXXXXXXXX Nome Fantasia XXXXXXXXXXXXXXXXXXXXXXX
Ficou assim
Razão Social =XXXXXXXXXXXXXXXXXXXXXX
Nome Fantasia XXXXXXXXXXXXXXXXXXXXXXX
2 º A fonte do datagrid diminuà de tamanho
3º Aumentei a área útil da impressão
O que era
Dim MargemEsquerda As Single = e.MarginBounds.Left
Dim MargemDireita As Single = e.MarginBounds.Right
Ficou assim
Dim MargemEsquerda As Single = e.MarginBounds.Left - 60
Dim MargemDireita As Single = e.MarginBounds.Right + 60
Bom ,no meu caso deu certo.
Não. Isso eu sei, eu tenho o código aqui e já estou analisando. Tem que fazer uns cálculos para poder imprimir o restante em outra página se não der. Eu fiz um teste com um campo do banco de dados que tinha 1.000 caracteres e o que não der em uma linha, passa para a próxima e tudo formatado. Aà está o exemplo abaixo. é só chamar a sub assim: RedimensionaTexto(Resumo,e) O campo resumo eu colocar como um variável pública. Passei o datareader.
Coloca no evento PrintPage. agora tenho pegar isso e alterar. Mas aà está abaixo.
Sub RedimensionaTexto(ByVal Resumo As String, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
[ô] Declare a variable to hold the position of the last printed char. Declare
[ô] as static so that subsequent PrintPage events can reference it.
Static intCurrentChar As Int32
[ô] Initialize the font to be used for printing.
Dim font As New Font([Ô]Microsoft Sans Serif[Ô], 12)
Dim intPrintAreaHeight, intPrintAreaWidth, marginLeft, marginTop As Int32
With pd.DefaultPageSettings
[ô] Initialize local variables that contain the bounds of the printing
[ô] area rectangle.
intPrintAreaHeight = .PaperSize.Height - .Margins.Top - .Margins.Bottom
intPrintAreaWidth = .PaperSize.Width - .Margins.Left - .Margins.Right
[ô] Initialize local variables to hold margin values that will serve
[ô] as the X and Y coordinates for the upper left corner of the printing
[ô] area rectangle.
marginLeft = .Margins.Left - 80 [ô] X coordinate
marginTop = .Margins.Top + 175 [ô] Y coordinate
End With
[ô] If the user selected Landscape mode, swap the printing area height
[ô] and width.
If pd.DefaultPageSettings.Landscape Then
Dim intTemp As Int32
intTemp = intPrintAreaHeight
intPrintAreaHeight = intPrintAreaWidth
intPrintAreaWidth = intTemp
End If
[ô] Calculate the total number of lines in the document based on the height of
[ô] the printing area and the height of the font.
Dim intLineCount As Int32 = CInt(intPrintAreaHeight / font.Height)
[ô] Initialize the rectangle structure that defines the printing area.
Dim rectPrintingArea As New RectangleF(marginLeft, marginTop, intPrintAreaWidth, intPrintAreaHeight)
[ô]Instanciar a classe StringFormat, que encapsula o layout de texto
[ô]Informação (tais como alinhamento e espaçamento entre linhas), display manipulações
[ô]Tais como a inserção de reticências e substituição de dÃgitos nacionais) e OpenType
[ô]CaracterÃsticas. Uso de StringFormat causas MeasureString e cordão para uso
[ô]Apenas um número inteiro de linhas quando a impressão de cada página, ignorando parcial
[ô]Linhas que de outra forma provavelmente ser impresso se o número de linhas por
[ô]A página não dividir corretamente para cada página (o que é normalmente o caso).
[ô]Veja mais discussão na documentação do SDK sobre StringFormatFlags.
Dim fmt As New StringFormat(StringFormatFlags.LineLimit)
[ô][ô]Call MeasureString para determinar o número de caracteres que cabem no
[ô]retângulo da área de impressão. O Int32 CharFitted é passado ByRef e usados
[ô]Mais tarde HasMorePages cálculo intCurrentChar e assim. LinesFilled
[ô]Não é necessário para esta amostra, mas deve ser passada ao passar CharsFitted.
[ô]Mid é usado para passar o segmento de texto restante saiu fora do
[ô]Página anterior de impressão (lembre-se que intCurrentChar foi declarado como
[ô]Estática.
Dim intLinesFilled, intCharsFitted As Int32
[ô]e.Graphics.MeasureString(Mid(txtDocument.Text, intCurrentChar + 1), font, _
[ô] New SizeF(intPrintAreaWidth, intPrintAreaHeight), fmt, _
[ô] intCharsFitted, intLinesFilled)
e.Graphics.MeasureString(Mid(Resumo, intCurrentChar + 1), font, _
New SizeF(intPrintAreaWidth, intPrintAreaHeight), fmt, _
intCharsFitted, intLinesFilled)
[ô]***********************************************************************
[ô]***********************************************************************
[ô]***********************************************************************
[ô] Imprime o texto do banco de dados.
e.Graphics.DrawString(Mid(Resumo, intCurrentChar + 1), font, _
Brushes.Black, rectPrintingArea, fmt)
[ô]Avança o char atual para o passado char impresso nesta página. Como
[ô] [Ô]IntCurrentChar é uma variável estática, o seu valor pode ser usado para os próximos
[ô] A página a ser impressa. Ele é avançado por um e passou para Mid () para imprimir a
[ô] A página seguinte (ver acima em MeasureString ()).
intCurrentChar += intCharsFitted
[ô][Ô]HasMorePages informa o módulo de impressão se outro evento PrintPage
[ô][Ô]Deve ser demitido.
If intCurrentChar < Resumo.Length Then
e.HasMorePages = True
Else
e.HasMorePages = False
[ô] Você precisa explicitly reset intCurrentChar as it is static.
intCurrentChar = 0
End If
End Sub
Coloca no evento PrintPage. agora tenho pegar isso e alterar. Mas aà está abaixo.
Sub RedimensionaTexto(ByVal Resumo As String, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
[ô] Declare a variable to hold the position of the last printed char. Declare
[ô] as static so that subsequent PrintPage events can reference it.
Static intCurrentChar As Int32
[ô] Initialize the font to be used for printing.
Dim font As New Font([Ô]Microsoft Sans Serif[Ô], 12)
Dim intPrintAreaHeight, intPrintAreaWidth, marginLeft, marginTop As Int32
With pd.DefaultPageSettings
[ô] Initialize local variables that contain the bounds of the printing
[ô] area rectangle.
intPrintAreaHeight = .PaperSize.Height - .Margins.Top - .Margins.Bottom
intPrintAreaWidth = .PaperSize.Width - .Margins.Left - .Margins.Right
[ô] Initialize local variables to hold margin values that will serve
[ô] as the X and Y coordinates for the upper left corner of the printing
[ô] area rectangle.
marginLeft = .Margins.Left - 80 [ô] X coordinate
marginTop = .Margins.Top + 175 [ô] Y coordinate
End With
[ô] If the user selected Landscape mode, swap the printing area height
[ô] and width.
If pd.DefaultPageSettings.Landscape Then
Dim intTemp As Int32
intTemp = intPrintAreaHeight
intPrintAreaHeight = intPrintAreaWidth
intPrintAreaWidth = intTemp
End If
[ô] Calculate the total number of lines in the document based on the height of
[ô] the printing area and the height of the font.
Dim intLineCount As Int32 = CInt(intPrintAreaHeight / font.Height)
[ô] Initialize the rectangle structure that defines the printing area.
Dim rectPrintingArea As New RectangleF(marginLeft, marginTop, intPrintAreaWidth, intPrintAreaHeight)
[ô]Instanciar a classe StringFormat, que encapsula o layout de texto
[ô]Informação (tais como alinhamento e espaçamento entre linhas), display manipulações
[ô]Tais como a inserção de reticências e substituição de dÃgitos nacionais) e OpenType
[ô]CaracterÃsticas. Uso de StringFormat causas MeasureString e cordão para uso
[ô]Apenas um número inteiro de linhas quando a impressão de cada página, ignorando parcial
[ô]Linhas que de outra forma provavelmente ser impresso se o número de linhas por
[ô]A página não dividir corretamente para cada página (o que é normalmente o caso).
[ô]Veja mais discussão na documentação do SDK sobre StringFormatFlags.
Dim fmt As New StringFormat(StringFormatFlags.LineLimit)
[ô][ô]Call MeasureString para determinar o número de caracteres que cabem no
[ô]retângulo da área de impressão. O Int32 CharFitted é passado ByRef e usados
[ô]Mais tarde HasMorePages cálculo intCurrentChar e assim. LinesFilled
[ô]Não é necessário para esta amostra, mas deve ser passada ao passar CharsFitted.
[ô]Mid é usado para passar o segmento de texto restante saiu fora do
[ô]Página anterior de impressão (lembre-se que intCurrentChar foi declarado como
[ô]Estática.
Dim intLinesFilled, intCharsFitted As Int32
[ô]e.Graphics.MeasureString(Mid(txtDocument.Text, intCurrentChar + 1), font, _
[ô] New SizeF(intPrintAreaWidth, intPrintAreaHeight), fmt, _
[ô] intCharsFitted, intLinesFilled)
e.Graphics.MeasureString(Mid(Resumo, intCurrentChar + 1), font, _
New SizeF(intPrintAreaWidth, intPrintAreaHeight), fmt, _
intCharsFitted, intLinesFilled)
[ô]***********************************************************************
[ô]***********************************************************************
[ô]***********************************************************************
[ô] Imprime o texto do banco de dados.
e.Graphics.DrawString(Mid(Resumo, intCurrentChar + 1), font, _
Brushes.Black, rectPrintingArea, fmt)
[ô]Avança o char atual para o passado char impresso nesta página. Como
[ô] [Ô]IntCurrentChar é uma variável estática, o seu valor pode ser usado para os próximos
[ô] A página a ser impressa. Ele é avançado por um e passou para Mid () para imprimir a
[ô] A página seguinte (ver acima em MeasureString ()).
intCurrentChar += intCharsFitted
[ô][Ô]HasMorePages informa o módulo de impressão se outro evento PrintPage
[ô][Ô]Deve ser demitido.
If intCurrentChar < Resumo.Length Then
e.HasMorePages = True
Else
e.HasMorePages = False
[ô] Você precisa explicitly reset intCurrentChar as it is static.
intCurrentChar = 0
End If
End Sub
Tópico encerrado , respostas não são mais permitidas