none
Espaçamento na impressão RRS feed

  • Pergunta

  • Boa tarde!

    Pessoal, estou imprimindo pelo objeto Print, porém, ao imprimir linha a linha o espaçamento entre uma linha e outra esta exatamente no tamanho da fonte, mas, eu precisaria que fosse um pouco mais espaçado entre uma linha e outra.

        Private Sub PrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
            Dim sql As String = "SELECT TextoImportado.Linha, TextoImportado.Corte, TextoImportado.TimeCode, TextoImportado.Personagem, TextoImportado.Texto, TextoImportado.linhaValores From TextoImportado where TextoImportado.Linha >= " & id & " ORDER BY TextoImportado.Linha, TextoImportado.linhaValores"
            Dim Corte As Integer = 2 'margem para imprimir coluna 1
            Dim TimeCode As Integer = 56 'margem para imprimir coluna 2
            Dim Personagem As Integer = 150 'margem para imprimir coluna 3
            Dim Texto As Integer = 385 'margem para imprimir coluna 4
            Call BuscarDados()
    
            If CarregarDataSet(sql) = True Then
                'Cabeçalho
                e.Graphics.DrawString(Nfilme & "  (" & EFilme & ")", FonteMensagem_Superior, Brushes.Gray, TimeCode, 20)
                'corpo
                While oReader.Read
                    If linhaAtual < linhasPorPagina Then
                        id = oReader("Linha")
                        'posição da linha para impressão
                        PosicaoDaLinha = MargemSup + (linhaAtual * FonteMensagem.GetHeight(e.Graphics))
                        'gravando informações
                        If oReader("Corte") IsNot System.DBNull.Value Then
                            If IsNumeric(oReader("Corte")) Then
    
                                'linhaAtual superior e inferior
                                e.Graphics.DrawString("_________________________________________________________________________", FonteMensagem_Desenho, Brushes.Black, Corte - 1, PosicaoDaLinha - 23)
                                e.Graphics.DrawString("____", FonteMensagem_Desenho, Brushes.Black, Corte - 1, PosicaoDaLinha + 4)
    
                                'linhas da direita
                                e.Graphics.DrawString("       |", FonteMensagem_Desenho, Brushes.Black, Corte, PosicaoDaLinha - 4)
                                e.Graphics.DrawString("       |", FonteMensagem_Desenho, Brushes.Black, Corte, PosicaoDaLinha + 3)
    
                                'linhas da esquerda
                                e.Graphics.DrawString("|", FonteMensagem_Desenho, Brushes.Black, Corte - 5, PosicaoDaLinha - 4)
                                e.Graphics.DrawString("|", FonteMensagem_Desenho, Brushes.Black, Corte - 5, PosicaoDaLinha + 3)
                            End If
    
                            e.Graphics.DrawString(oReader("Corte"), FonteMensagem_Corte, Brushes.Black, Corte, PosicaoDaLinha)
                        End If
    
    
                        If oReader("TimeCode") IsNot System.DBNull.Value Then
                            e.Graphics.DrawString(oReader("TimeCode"), FonteMensagem, Brushes.Black, TimeCode, PosicaoDaLinha)
                        End If
    
                        If oReader("Personagem") IsNot System.DBNull.Value Then
                            e.Graphics.DrawString(oReader("Personagem"), FonteMensagem, Brushes.Black, Personagem, PosicaoDaLinha)
                        End If
    
                        If oReader("Texto") IsNot System.DBNull.Value Then
                            e.Graphics.DrawString(Limpar_Frase(oReader("Texto")), FonteMensagem, Brushes.Black, Texto, PosicaoDaLinha)
                        End If
                        'somando o numero da linha
                        linhaAtual += 1
                        'se a linha for igual a linha máxima, para e adiciona uma
                        'nova página
                        If linhaAtual = linhasPorPagina Then
                            Exit While
                        End If
                    End If
                End While
                oReader.Close()
            End If
    
    
            ' Numero_Pagina
            If linhaAtual < linhasPorPagina Then
                'se o total de linha for menor que o total da página, termina impressão
                e.Graphics.Dispose()
                linhaAtual = 0
                e.HasMorePages = False
            Else
                'se o total de linha for MAIOR que o total da página, acrescenta impressão
                Numero_Pagina += 1
                'Adiciona o número da página
                e.Graphics.DrawString("Página " & Numero_Pagina, FonteMensagem_Superior, Brushes.Black, 700, 20)
                e.Graphics.Dispose()
                linhaAtual = 0
                'adiciona mais páginas
                e.HasMorePages = True
            End If
    
        End Sub

    Poderiam me ajudar? Ja li em vários artigos, mas, não consegui fazer funcionar...

    quinta-feira, 15 de março de 2012 16:07

Respostas

  • Olá paulo.carinhena,

    Experimente criar uma variável para o espaçamento entre linhas, quando for necessário tamanho maior você realiza a multiplicação da variável.
    Por exemplo:

    Dim printFont As New Font("Arial", 12)
    Dim LineHeightSingle As Single = printFont.GetHeight + 2
    Dim horizontalPrintLocationSingle As Single = e.MarginBounds.Left
    Dim verticalPrintLocationSingle As Single = e.MarginBounds.Top
    Dim PrintLineString As String
    
    
    PrintLineString = "Linha1"
    e.Graphics.DrawString(PrintLineString, HeadingFont, Brushes.Black, horizontalPrintLocationSingle, verticalPrintLocationSingle)
    
    PrintLineString = "Linha2"
    verticlePrintLocationSingle += LineHeightSingle
    e.Graphics.DrawString(PrintLineString, PrintFont, Brushes.Black, horizontalPrintLocationSingle, verticalPrintLocationSingle)
    verticalPrintLocationSingle += LineHeightSingle * 2
    
    e.Graphics.DrawString("Linha3", PrintFont, Brushes.Black, horizontalPrintLocationSingle, verticalPrintLocationSingle)

    fonte

    Espero que ajude. :)


    Heloisa Pires | LATAM Forum Support Engineer | Microsoft Corporation

    quinta-feira, 22 de março de 2012 20:26
    Moderador

Todas as Respostas

  • Olá paulo.carinhena,

    Experimente criar uma variável para o espaçamento entre linhas, quando for necessário tamanho maior você realiza a multiplicação da variável.
    Por exemplo:

    Dim printFont As New Font("Arial", 12)
    Dim LineHeightSingle As Single = printFont.GetHeight + 2
    Dim horizontalPrintLocationSingle As Single = e.MarginBounds.Left
    Dim verticalPrintLocationSingle As Single = e.MarginBounds.Top
    Dim PrintLineString As String
    
    
    PrintLineString = "Linha1"
    e.Graphics.DrawString(PrintLineString, HeadingFont, Brushes.Black, horizontalPrintLocationSingle, verticalPrintLocationSingle)
    
    PrintLineString = "Linha2"
    verticlePrintLocationSingle += LineHeightSingle
    e.Graphics.DrawString(PrintLineString, PrintFont, Brushes.Black, horizontalPrintLocationSingle, verticalPrintLocationSingle)
    verticalPrintLocationSingle += LineHeightSingle * 2
    
    e.Graphics.DrawString("Linha3", PrintFont, Brushes.Black, horizontalPrintLocationSingle, verticalPrintLocationSingle)

    fonte

    Espero que ajude. :)


    Heloisa Pires | LATAM Forum Support Engineer | Microsoft Corporation

    quinta-feira, 22 de março de 2012 20:26
    Moderador
  • Heloisa,

    O exemplo não funcionou bem como eu queira, mas, me ajudou a resolver o problema porque me deu uma outra idéia.

    Obrigado pela ajuda, resolveu meu problema e pode ajudar a resolver de muitas outras pessoas com dúvidas parecidas.

    terça-feira, 3 de abril de 2012 18:26