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