Stampa

di il
4 risposte

Stampa

Ciao tutti,
ho un problema per la stampa di più pagine vediamo se qualcuno riesce a darmi una dritta sennò non ne vengo più fuori!
L'anteprima la crea giusta poi quando spingo il bottone stampa mi stampa solo l'ultima pagina!
Questa è la parte di codice riguardante la stampa di più pagine ma poi come devo fare?
Maxrighe: è il numero di righe che posso mettere nel foglio

'HO RAGGIUNTO IL FINE PAGINA NE DEVO INIZIARE UN'ALTRA
'RIPETO L'INTESTAZIONE PER LA SECONDA PAGINA IN POI
If NumeroLineeInserite >= MaxRighe Then
e.HasMorePages = True
Else
e.HasMorePages = False
CarattereCorrente = e.MarginBounds.Left - 40
NumeroLineeInserite = e.MarginBounds.Top
End If

Per favore qualcuno mi rispnda!
Ciao Paperina

4 Risposte

  • Re: Stampa

    Ciao io un pò di tempo fa avevo il tuo stesso problema e su MSDN online ricordo di aver trovato questo codice(in c#) perfettamente funzionante, spero che ti sia di aiuto:

    private void pdoc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
    Font font = new Font("Microsoft Sans Serif", 10);
    int intPrintAreaHeight;
    int intPrintAreaWidth;
    int marginLeft;
    int marginTop;

    intPrintAreaHeight = pdoc.DefaultPageSettings.PaperSize.Height - pdoc.DefaultPageSettings.Margins.Top - pdoc.DefaultPageSettings.Margins.Bottom;
    intPrintAreaWidth = pdoc.DefaultPageSettings.PaperSize.Width - pdoc.DefaultPageSettings.Margins.Left - pdoc.DefaultPageSettings.Margins.Right;

    marginLeft = pdoc.DefaultPageSettings.Margins.Left;
    marginTop = pdoc.DefaultPageSettings.Margins.Top;

    if (pdoc.DefaultPageSettings.Landscape)
    {
    int intTemp = intPrintAreaHeight;
    intPrintAreaHeight = intPrintAreaWidth;
    intPrintAreaWidth = intTemp;
    }

    // ora si calcola il numero di linee del documento basandosi sull'altezza
    // dell'area di stampa e sull'altezza del font
    int intLineCount= (int)(intPrintAreaHeight / font.Height);

    RectangleF rectPrintingArea = new RectangleF(marginLeft, marginTop, intPrintAreaWidth, intPrintAreaHeight);

    StringFormat fmt = new StringFormat(StringFormatFlags.LineLimit);

    // ora si deve calcolare il numero di caratteri che saranno inseriti nell'area di stampa
    // Ciò viene effettuato usanto la Measurestring.
    int intLinesFilled;
    int intCharsFitted;

    e.Graphics.MeasureString(richTextBox1.Text.Substring(intCurrentChar),
    font,new SizeF(intPrintAreaWidth, intPrintAreaHeight),
    fmt,out intCharsFitted, out intLinesFilled);

    e.Graphics.DrawString(richTextBox1.Text.Substring(intCurrentChar), font,Brushes.Black, rectPrintingArea, fmt);

    intCurrentChar += intCharsFitted;

    if (intCurrentChar < (richTextBox1.Text.Length-1))
    {
    e.HasMorePages = true;
    }
    else
    {
    e.HasMorePages = false;
    intCurrentChar = 0;
    }
    }

    ciao e buon lavoro

    Leonardo Miglietta
  • Re: Stampa

    Grazie adesso provo a fare questo tipo di dichiarazione e a richiamarlo nell' e.Graphics.DrawString perchè non vedo altre differenze rispetto al mio codice, poi la cosa che mi lascia perlessa è che l'anteprima è giusta e stampa solo l'ultima pagina, come se avesse un puntatore all'ultima!

    Dim rectPrintingArea = New RectangleF(e.MarginBounds.Left - 40, e.MarginBounds.Top + 50, e.MarginBounds.Width, e.MarginBounds.Height)

    Se avete in mente altre cose rimango in ascolto!
    Ciao a tutti
  • Re: Stampa

    Scusatemi ma pensandoci io non capisco come devo poi usare il RectangleF.
    Vi riporto un pezzo di codice così capite come costruisco la pagina e spero che così capite meglio.
    Grazie mille a tutti! Ciao!

    ...

    For i = 1 + ultimariga To totaleRighe
    NumeroLineeInserite += 15
    e.Graphics.DrawString(Me.dtgDisBase.Item(i - 1, 0), _
    CarattereStampa, Brushes.Black, CarattereCorrente, _
    NumeroLineeInserite)
    CarattereCorrente += 60
    e.Graphics.DrawString(Me.dtgDisBase.Item(i - 1, 1), _
    CarattereStampa, Brushes.Black, CarattereCorrente, _
    NumeroLineeInserite)
    CarattereCorrente += 100
    e.Graphics.DrawString(Me.dtgDisBase.Item(i - 1, 2), _
    CarattereStampa, Brushes.Black, CarattereCorrente, _
    NumeroLineeInserite)
    Next

    'HO RAGGIUNTO IL FINE PAGINA NE DEVO INIZIARE UN'ALTRA
    'RIPETO L'INTESTAZIONE PER LA SECONDA PAGINA IN POI
    If NumeroLineeInserite >= MaxRighe Then
    e.HasMorePages = True
    Else
    e.HasMorePages = False
    CarattereCorrente = e.MarginBounds.Left - 40
    NumeroLineeInserite = e.MarginBounds.Top
    End If
  • Re: Stampa

    L'utilizzo di rectangleF è circoscritto a quanto è presente nel codice sopra da me inserito, ti ricordo che la ruotine è un evento, ti consiglio di guardare la documentazione presente su msdn online io ho preso tutto da li e dopo mezzora non avevo + problemi di stampa

    ciao

    Ciao e buon lavoro

    Leonardo Miglietta
Devi accedere o registrarti per scrivere nel forum
4 risposte