Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    492

    [VB.NET] Anteprima di stampa e stampa dati

    Salve a tutti
    ho necessità, dopo aver recuperato i dati da un db, di stampare gli stessi ed avere anche un'anteprima di stampa.
    Chiedo lumi sulla strategia da utilizzare, nel senso, stampare prima in un file txt, e poi stampare il file...non ho proprio idea.

    Premetto che l'intento è di stampare in modo tabellare
    Val1 val2 val3
    Nome1
    nome2
    nome3
    ---------------------------------------
    somma somma somma

    Ovvio che per recuperare le somme, non presenti su DB effettuo delle apposite query

    Grazie a tutti per i suggerimenti

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    credo che le strade che possa percorrere sono diverse, una potrebbe essere usare crystalreport,oppure usare un printPreviewControll oppure anche un file rtf formattato con dei "campi" pronti per fare il replace in modo da sostituirli con i tuoi dati per poi aprire il file attraverso la Process con wordpad (e usare l'anteprima di stampa di wordpad). oppure fai un file di testo e lo apri con blocco note

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    492
    Grazie mille
    penso di usare a questo punto printPreviewControll

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    492
    Usando il PrintDocument non riesco a stampare su più pagine e sto impazzendo

    Il codice che sto usando è il seguente:

    codice:
    Public codApp_DT As New DataTable
        Public anteprimaStampa As New DataTable
        Public indiceStorico As Integer
        Public indiceCodApp As Integer
        Public Pagina As Integer
    
    
    Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage        'Questo è il contenuto della pagina che verrà stampato
    
            Static s_codApp As String
            'Static indiceCodApp As Integer
            'Static indiceStorico As Integer
    
            Dim TotPreu As Double
            Dim TotAAms As Double
            Dim TotLordo As Double
            Dim TotNetto As Double
            Dim TotMN As Double
    
            'DICHIARAZIONI GENERALI
            Dim Font1 As New Font("Arial Black", 18)                                        'Creo i font necessari
            Dim Font2 As New Font("Arial", 18, FontStyle.Bold)
            Dim Font3 As New Font("Arial", 12, FontStyle.Bold)
            Dim Font4 As New Font("Arial", 12)
            'Static i As Integer             'Questa variabile contiene la posizione nel dataset
    
            'Dim Up_Int As Integer = 50      'Intestazione foglio
            Dim Y As Integer = 180          'In questa invece si mette la posizione di stampa della prima riga dei dati. ATTENZIONE Questa variabile NON deve essere statica, altrimenti i dati vengo progressivamente stampati più in basso, fino a uscire dal foglio
            Dim X As Integer = 110
            Dim rigaMax As Integer = 350
            Dim rigaCorrente As Integer = 110
            'Dim str As String               'In questa variabile inserisco il valore della cella del dataset
            'Static Pagina As Integer        'In questa registro il numero di pagina corrente
            'Totale definitivo
    
            'Spaziature
            Dim tabPreu As Integer = 50
            Dim tabAams As Integer = 140
            Dim tabLordo As Integer = 220
            Dim tabNetto As Integer = 330
            Dim tabMn As Integer = 410
            Dim tabPerRif As Integer = 500
    
    
    
            '****************************************************************************************
            'INTESTAZIONE DEL DOCUMENTO
    
    
            'e.Graphics.DrawImage(Image.FromFile(Application.StartupPath & "\Marchio.jpg"), 50, 50, 150, 150)       'Se voglio rappresentare un'immagine. Per esempio il marchio della ditta
            e.Graphics.DrawString("REPORT", Font1, Brushes.Black, 330, 50)      'Se voglio inserire una stringa con un testo
            e.Graphics.DrawLine(Pens.Red, 50, 50 + 35, 750, 50 + 35)                                'Per visualizzare un elemento grafico
    
            codApp_DT = Me.Tab_prodTableAdapter.GetData() 'carico tutti i dati di Apparati
            Dim nCodApp As Integer = codApp_DT.Rows.Count  'Verifico il numero degli apparati
    
    
            'If rigaCorrente < rigaMax Then
            For Me.indiceCodApp = indiceCodApp To nCodApp - 1
                s_codApp = codApp_DT.Rows.Item(indiceCodApp).Item(0) 'memorizzo
                Dim nomeApp As String = codApp_DT.Rows.Item(indiceCodApp).Item(2)
    
                anteprimaStampa = Me.Tab_storicoTableAdapter.GetData_UltimoCalcolo_codApp(s_codApp)
    
                Dim nRecord As Integer = anteprimaStampa.Rows.Count
    
                For rigaCorrente = rigaCorrente To rigaMax
                    e.Graphics.DrawString(nomeApp, Font2, Brushes.Black, 50, rigaCorrente)  'Queste sono le varie voci delle intestazioni di colonna
                    rigaCorrente = rigaCorrente + 30
                    e.Graphics.DrawString("PREU", Font3, Brushes.Black, tabPreu, rigaCorrente)
                    e.Graphics.DrawString("AAMS", Font3, Brushes.Black, tabAams, rigaCorrente)
                    e.Graphics.DrawString("LORDO", Font3, Brushes.Black, tabLordo, rigaCorrente)
                    e.Graphics.DrawString("NETTO", Font3, Brushes.Black, tabNetto, rigaCorrente)
                    e.Graphics.DrawString("MN", Font3, Brushes.Black, tabMn, rigaCorrente)
                    e.Graphics.DrawString("Periodo Riferimento", Font3, Brushes.Black, tabPerRif, rigaCorrente)
                    rigaCorrente = rigaCorrente + 20
    
                    For Me.indiceStorico = indiceStorico To nRecord - 1
    
                        If rigaCorrente < rigaMax Then
                            Dim s_preu As String = anteprimaStampa.Rows.Item(indiceStorico).Item(9).ToString
                            e.Graphics.DrawString(s_preu, Font4, Brushes.Black, tabPreu, rigaCorrente)
                            Dim s_aams As String = anteprimaStampa.Rows.Item(indiceStorico).Item(11).ToString
                            e.Graphics.DrawString(s_aams, Font4, Brushes.Black, tabAams, rigaCorrente)
                            Dim s_lordo As String = anteprimaStampa.Rows.Item(indiceStorico).Item(12).ToString
                            e.Graphics.DrawString(s_lordo, Font4, Brushes.Black, tabLordo, rigaCorrente)
                            Dim s_netto As String = anteprimaStampa.Rows.Item(indiceStorico).Item(14).ToString
                            e.Graphics.DrawString(s_netto, Font4, Brushes.Black, tabNetto, rigaCorrente)
                            Dim s_mn As String = anteprimaStampa.Rows.Item(indiceStorico).Item(16).ToString
                            e.Graphics.DrawString(s_mn, Font4, Brushes.Black, tabMn, rigaCorrente)
                            Dim s_perRif As String = anteprimaStampa.Rows.Item(indiceStorico).Item(18).ToString
                            e.Graphics.DrawString(s_perRif, Font4, Brushes.Black, tabPerRif, rigaCorrente)
                            rigaCorrente = rigaCorrente + Font4.GetHeight             'Incremento il valore di Y in modo da stampare la riga seguente sotto la precedente
    
                            TotPreu = TotPreu + s_preu
                            TotAAms = TotAAms + s_aams
                            TotLordo = TotLordo + s_lordo
                            TotNetto = TotNetto + s_netto
                            TotMN = TotMN + s_mn
    
                            e.HasMorePages = True               'Permetto di stampare la pagina successiva
                            'Else
                            '    e.HasMorePages = False              'Blocco la stampa
                        End If
    
                    Next indiceStorico
                    indiceStorico = 0
    
                    If rigaCorrente < rigaMax Then                                                       'Quando i supera il numero di record da stampare (vuol dire che questi sono finiti), allora stampo il totale
                        rigaCorrente = rigaCorrente + 10
                        e.Graphics.DrawLine(Pens.Black, 50, (rigaCorrente), 720, (rigaCorrente))           'Tiro la linea di somma
                        'e.Graphics.DrawString("TOTALE ", Font3, Brushes.Black, 580, (Y + 20))   'La scritta Totale
                        rigaCorrente = rigaCorrente + 10
                        e.Graphics.DrawString(TotPreu, Font3, Brushes.Black, tabPreu, (rigaCorrente))      'E lo stampo
                        e.Graphics.DrawString(TotAAms, Font3, Brushes.Black, tabAams, (rigaCorrente))
                        e.Graphics.DrawString(TotLordo, Font3, Brushes.Black, tabLordo, (rigaCorrente))
                        e.Graphics.DrawString(TotNetto, Font3, Brushes.Black, tabNetto, (rigaCorrente))
                        e.Graphics.DrawString(TotMN, Font3, Brushes.Black, tabMn, (rigaCorrente))
                        e.HasMorePages = True
    
                    End If
                    rigaCorrente = rigaCorrente + 50
                Next
                'Else
                '    e.HasMorePages = False
    
                'End If
    
            Next
    
            If Me.indiceCodApp = nCodApp Then
    
                e.HasMorePages = False              'Blocco la stampa
            End If
    
            '****************************************************************************************
            'PIE' DI PAGINA DEL DOCUMENTO
            e.Graphics.DrawLine(Pens.Red, 50, 1060, 750, 1060)                                'Per visualizzare un elemento grafico
            Pagina += 1                                                                     'Incremento il numero di pagina
            e.Graphics.DrawString("Pagina " & Pagina, Font2, Brushes.Black, 600, 1080)
            'e.Graphics.DrawString("Valore della pagina " & Parziale, Font2, Brushes.Black, 50, 850)
            'Incrementale += Parziale
            'e.Graphics.DrawString("Subtotale " & Incrementale, Font2, Brushes.Black, 50, 900)
        End Sub
    ho usato come limite della pagina il numero di righe, anche se non so se è del tutto corretto dal momento che i caratteri che scrivo hanno dimensione diversa.

    Chiedo lumi per aiutarmi a risolvere il mio prob

    Grazie in anticipo

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    492
    Nessuno riesce a darmi un aiuto?

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    492
    Cerco di riassumere meglio il problema generalizzandolo: ho una tabella principale dove ricerco dei valori A1, A2 etc.., valori che poi mi servono per ricercare determinati valori val1, val2, val3, val4, val5

    Ora sto cercando di stampare in questo modo:

    REPORT
    -------------------------------------

    A1
    campo1 campo2 campo3 campo4 campo5
    val1 val2 val3 val4 val5
    val1 val2 val3 val4 val5
    val1 val2 val3 val4 val5
    val1 val2 val3 val4 val5
    ----------------------------------------------------------------
    Tot1 Tot2 Tot3 Tot4 Tot5

    A1
    campo1 campo2 campo3 campo4 campo5
    val1 val2 val3 val4 val5
    val1 val2 val3 val4 val5
    val1 val2 val3 val4 val5
    val1 val2 val3 val4 val5
    . . . . .
    . . . . .
    ----------------------------------------------------------------
    Tot1 Tot2 Tot3 Tot4 Tot5


    Ho pensato di impostare come limite di stampa il numero di righe

    Ovviamente per ogni A1,2,3.... non so quanti record ci possono essere, pertanto in base al numero di record posso avere + o - intestazioni

    An(1,2,3...)
    campo1 campo2 campo3 campo4 campo5

    Spero di essere stato chiaro

    Grazie ancora tutti

  7. #7
    Tempo fa scrissi un articolo sulla stampa in VB.NET.
    Puoi trovarlo QUA

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    492
    Ciao
    grazie mille per il link, l'avevo anche già visto.
    Il mio problema (perchè alla fine non so se poi è una banalità), ma avendo delle sottotabelle

    A1
    campo1 campo2 campo3 campo4 campo5
    val1 val2 val3 val4 val5
    val1 val2 val3 val4 val5
    val1 val2 val3 val4 val5
    val1 val2 val3 val4 val5
    ----------------------------------------------------------------
    Tot1 Tot2 Tot3 Tot4 Tot5

    che crescono con il tempo, non riesco ad identificare l'area di stampa apriori, ma solo nel momento in cui stampo, non so se ho reso l'idea

  9. #9
    E' chiaro che a priori non puoi conoscere il numero di info che devi stampare, ma sicuramente avrai la possibilità di sapere, nel momento in cui metti su carta il tuo lavoro, che cosa devi rappresentare.

    Se contare le righe ti risulta inutile, puoi valutare l'idea di contare le tabelle/sottotabelle, le loro dimensioni, eventuali titoli e lo spazio fra di esse.

    Supponi di avere 8 tabelle con queste altezze:

    2 tabelle da 260 pixel
    3 tabelle da 156 pixel
    3 tabelle da 702 pixel

    e che lo spazio fra una e la successiva deve essere di alemno 100 pixel (comprensivi dei titoli), avrai bisogno di 3794 Pixel totali (se ho fatto bene i calcoli...); ammettendo che una pagina A4 occupi lo spazio di 800 pixel avrai bisogno di ALMENO 5 PAGINE.

    Ho scritto "ALMENO 5 PAGINE" perché potrebbe capitare che il titolo di una tabella si trovi alla fine di una pagina e la tabella nella successiva... pertanto devi valutare come suddividere la rappresentazione del tuo report, ed eventualmente aggiungere pagine supplementari.

  10. #10

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.