Problema Stampa c#

di il
3 risposte

Problema Stampa c#

Salve a tutti, sto facendo un programma e ho riscontrato un problema nella stampa. In pratica devo stampare i dati di una ListView tramite printdocument. Il mio problema è che mi stampa solo una pagina, riempiendo la pagina il resto non lo stampa più. Potete aiutarmi?? grazie in anticipo.
Ecco il codice:
private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
int H = 0;
H = 50;
e.Graphics.DrawString("Lista Primo Semestre - Comune di Poggioreale", new System.Drawing.Font("Times New Roman", 20), Brushes.Black, 50, H);
H += 50;
foreach (ListViewItem Itm in ListView1.Items)
{

e.Graphics.DrawString(" Genitore ", new System.Drawing.Font("Times New Roman", 12), Brushes.Black, 50, H);
e.Graphics.DrawString("Codice Fiscale ", new System.Drawing.Font("Times New Roman", 12), Brushes.Black, 250, H);
e.Graphics.DrawString("Residenza ", new System.Drawing.Font("Times New Roman", 12), Brushes.Black, 450, H);
e.Graphics.DrawString("Via ", new System.Drawing.Font("Times New Roman", 12), Brushes.Black, 650, H);
e.Graphics.DrawString(" Iban ", new System.Drawing.Font("Times New Roman", 12), Brushes.Black, 850, H);
H += 20;
e.Graphics.DrawString(Itm.Text, new System.Drawing.Font("Times New Roman", 10), Brushes.Black, 50, H);
e.Graphics.DrawString(Itm.SubItems[1].Text, new System.Drawing.Font("Times New Roman", 10), Brushes.Black, 250, H);
e.Graphics.DrawString(Itm.SubItems[2].Text, new System.Drawing.Font("Times New Roman", 10), Brushes.Black, 450, H);
e.Graphics.DrawString(Itm.SubItems[3].Text, new System.Drawing.Font("Times New Roman", 10), Brushes.Black, 650, H);
e.Graphics.DrawString(Itm.SubItems[4].Text, new System.Drawing.Font("Times New Roman", 12), Brushes.Black, 850, H);
H += 30;
e.Graphics.DrawString("Alunno ", new System.Drawing.Font("Times New Roman", 12), Brushes.Black, 50, H);
e.Graphics.DrawString("Importo da Liquidare ", new System.Drawing.Font("Times New Roman", 12), Brushes.Black, 250, H);
H += 20;
e.Graphics.DrawString(Itm.SubItems[5].Text, new System.Drawing.Font("Times New Roman", 10), Brushes.Black, 50, H);
e.Graphics.DrawString(Itm.SubItems[9].Text, new System.Drawing.Font("Times New Roman", 10), Brushes.Black, 250, H);
H += 25;
e.Graphics.DrawString("----------------------------", new System.Drawing.Font("Times New Roman", 10), Brushes.Black, 50, H);
H += 25;
}

}

3 Risposte

  • Re: Problema Stampa c#

    Devi gestire la proprietà e.HasMorePages che genera un nuovo evento Print_Page
  • Re: Problema Stampa c#

    Salve,
    trivialmente parlando, Windows.Forms gestisce le stampe in "pagine", come ad esempio i metodi autogenerati da un oggetto PrintDocument lasciano supporre, "PrintDocument1_PrintPage"...
    sei quindi tu ad indicare quando la pagina corrente e' finita E SE ci sono altre pagine da stampare...
    brutalmente "la pagina e' finita" quando l'asse delle Y ( =H ) raggiunge il margine inferiore, e nel caso tu non abbia stampato tutte le righe informi il processore di stampa che ci sono altre pagine da stampare...
    semplicisticamente, se H >= al margine inferiore, allora imposti il parametro "e" nel suo campo ".HasMorePages" dicendo che il processo non e' finito e smetti di stampare sulla pagina corrente...

    brutalmente scriverai quindi qualche cosa tipo
    
    private class xx {
    
        // riferimento alla prima riga da stampare
        private int m_ptr = 0;
    
        private void printDocument1_PrintPage(object sender, PrintPageEventArgs e) {
        
            int H = 50;
            e.Graphics.DrawString("Lista Primo Semestre - Comune di Poggioreale", new System.Drawing.Font("Times New Roman", 20), Brushes.Black, 50, H);
            H += 50;
            int loopTo = ListView1.Items.count - 1;
            for (int iLoop = m_ptr; iLoop <= loopTo; iLoop++) {
                if (H >= e.PageBounds.Bottom) { // la pagina e' finita
                    // ci sono pero' ancora righe da stampare
                    e.HasMorePages = true;
                    // mantengo riferimento alla riga da stampare
                    m_ptr = iLoop;
                    // esco dal cico corrente ... l'avevo dimenticato prima :D
                    break;
                }
                else {
                    e.Graphics.DrawString(" Genitore ", new System.Drawing.Font("Times New Roman", 12), Brushes.Black, 50, H);
                    // ...
                    H += 25;
                    e.Graphics.DrawString(ListView1.Items(iLoop).Text, new System.Drawing.Font("Times New Roman", 10), Brushes.Black, 50, H);
                }
            }
    
            if (!e.HasMorePages)
                e.Graphics.DrawString("stampa terminata", new System.Drawing.Font("Times New Roman", 12), Brushes.Black, 50, e.pagebounds.bottom - 10);
            else
                e.Graphics.DrawString("seguono altre pagine...", new System.Drawing.Font("Times New Roman", 12), Brushes.Black, 50, e.pagebounds.bottom - 10);
        }
    }
    
    maggiori info sicuramente presso https://docs.microsoft.com/en-us/dotnet/framework/winforms/advanced/how-to-print-a-multi-page-text-file-in-windows-forms?view=netframework-4.7.2

    saluti omnia
    --
    Andrea
  • Re: Problema Stampa c#

    Grazie mille, funziona! <3
Devi accedere o registrarti per scrivere nel forum
3 risposte