Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [VB.NET 08] oggetto DrawString

    Ciao a tutti,

    ho creato una funzione per la stampa di un elenco telefonico al quale in modo molto semplice prende i dati da un datatable e gl'incolonna nella pagina d'accordo col numero di record esistenti (52 per ogni colonna per un max di 3 colonne se ci sono di più stampa un'altra pagina per quelli successivi), il problema è che non riesco ad incolonnargli in quanto da quello che ho capito l'oggetto DrawString una volta arrivato in fondo (stampato tutta la prima colonna per esempio) non riesce ad tornare a capo (inizio seconda colonna per stamparla)..

    sembra semplice ma io proprio non so come fare.. qualcuno mi aiuti per favore?!

    GRAZIE..

    posto il codice..

    codice:
    Public Sub PrintModCol3(ByVal e As System.Drawing.Printing.PrintPageEventArgs, ByVal dtPrint As DataTable)
    
            Static i As Integer
            Static Pagina As Integer
    
            Try
    
                Dim Font1 As New Font("Arial Black", 14)
                Dim Font2 As New Font("Arial", 14, FontStyle.Bold)
                Dim Font3 As New Font("Arial", 8, FontStyle.Bold)
                Dim Font4 As New Font("Arial", 8)
                Dim Y As Integer = 280
                Dim str As String
    
    
                e.Graphics.DrawImage(Image.FromFile(Application.StartupPath & "\logo.jpg"), 50, 50, 150, 150)
                e.Graphics.DrawString("Telephone Directory on Active Directory", Font1, Brushes.Black, 250, 100)
                e.Graphics.DrawString(Date.Today.Date, Font3, Brushes.Black, 250, 140)
                e.Graphics.DrawLine(Pens.Red, 50, 200, 785, 200)
    
                e.Graphics.DrawString("User list", Font2, Brushes.Black, 50, 215)
    
                e.Graphics.DrawString("Name", Font3, Brushes.Black, 50, 255)
                e.Graphics.DrawString("Surname", Font3, Brushes.Black, 150, 255)
                e.Graphics.DrawString("Telephone", Font3, Brushes.Black, 225, 255)
    
                e.Graphics.DrawString("Name", Font3, Brushes.Black, 300, 255)
                e.Graphics.DrawString("Surname", Font3, Brushes.Black, 400, 255)
                e.Graphics.DrawString("Telephone", Font3, Brushes.Black, 475, 255)
    
                e.Graphics.DrawString("Name", Font3, Brushes.Black, 550, 255)
                e.Graphics.DrawString("Surname", Font3, Brushes.Black, 650, 255)
                e.Graphics.DrawString("Telephone", Font3, Brushes.Black, 725, 255)
    
                For i = i To i + 52
    
                    If i < dtPrint.Rows.Count Then
    
                        If i > 0 And i <= 52 Then
                            If IsDBNull(dtPrint.Rows(i).Item(0)) = False Then
                                str = dtPrint.Rows(i).Item(0)
                            Else
                                str = ""
                            End If
                            e.Graphics.DrawString(str, Font4, Brushes.Black, 50, Y)
    
                            If IsDBNull(dtPrint.Rows(i).Item(1)) = False Then
                                str = dtPrint.Rows(i).Item(1)
                            Else
                                str = ""
                            End If
                            e.Graphics.DrawString(str, Font4, Brushes.Black, 150, Y)
    
                            If IsDBNull(dtPrint.Rows(i).Item(5)) = False Then
                                str = Right(dtPrint.Rows(i).Item(5), 3)
                            Else
                                str = ""
                            End If
                            e.Graphics.DrawString((str.PadLeft(Len(str))), Font4, Brushes.Black, 250, Y)
    
                            Y = Y + Font4.GetHeight
                        End If
    
    
                        If i >= 53 And i <= 104 Then
                            If IsDBNull(dtPrint.Rows(i).Item(0)) = False Then
                                str = dtPrint.Rows(i).Item(0)
                            Else
                                str = ""
                            End If
                            e.Graphics.DrawString(str, Font4, Brushes.Black, 300, Y)
    
                            If IsDBNull(dtPrint.Rows(i).Item(1)) = False Then
                                str = dtPrint.Rows(i).Item(1)
                            Else
                                str = ""
                            End If
                            e.Graphics.DrawString(str, Font4, Brushes.Black, 400, Y)
    
                            If IsDBNull(dtPrint.Rows(i).Item(5)) = False Then
                                str = Right(dtPrint.Rows(i).Item(5), 3)
                            Else
                                str = ""
                            End If
                            e.Graphics.DrawString((str.PadLeft(Len(str))), Font4, Brushes.Black, 475, Y)
    
                            Y = Y + Font4.GetHeight
                        End If
    
                        If i >= 105 And i <= 156 Then
                            If IsDBNull(dtPrint.Rows(i).Item(0)) = False Then
                                str = dtPrint.Rows(i).Item(0)
                            Else
                                str = ""
                            End If
                            e.Graphics.DrawString(str, Font4, Brushes.Black, 550, Y)
    
                            If IsDBNull(dtPrint.Rows(i).Item(1)) = False Then
                                str = dtPrint.Rows(i).Item(1)
                            Else
                                str = ""
                            End If
                            e.Graphics.DrawString(str, Font4, Brushes.Black, 650, Y)
    
                            If IsDBNull(dtPrint.Rows(i).Item(5)) = False Then
                                str = Right(dtPrint.Rows(i).Item(5), 3)
                            Else
                                str = ""
                            End If
                            e.Graphics.DrawString((str.PadLeft(Len(str))), Font4, Brushes.Black, 725, Y)
    
                            Y = Y + Font4.GetHeight
                        End If
    
    
                        e.HasMorePages = True
    
                    Else
                        e.HasMorePages = False
                    End If
    
                Next i
    
    
    
                e.Graphics.DrawLine(Pens.Red, 50, 975, 785, 975)
                Pagina += 1
                e.Graphics.DrawString("Page " & Pagina, Font3, Brushes.Black, 700, 960)
    
    
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
    
            If e.HasMorePages = False Then
                i = 0
                Pagina = 0
                dtPrint.Clear()
            End If
    
        End Sub

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    se usi il graphics devi calcolare a mano la posizione del testo, quindi anche delle colonne, tipo calcolare quale andra a fianco di chi (1,2,3 colonna) e scrivere la stringa con la riga di tutte e 3 le colonne ecc.

    a parer mio ti converrebbe usare un rtf formattato con le colonne, se hai una dimensione prefissata è ancora piu' semplice, infatti ti basterebbe segnare l'rtf con dei segnaposto e fare un replace del testo, dopodichè mandi in stampa il file rtf.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.