impressão c#

oi, sou novo por aqui e gostaria da ajuda de vocês.
preciso fazer a impressão de um listview, a impressao é de uma tabela e tals
eu peguei esse codigo da internet:
o código imprime e tals, mas eu gostaria de muda-lo para ele criar uma tabela na impressão.
do jeito que ele esta ai ele imprimi um texto
se alguem puder ajudar
preciso fazer a impressão de um listview, a impressao é de uma tabela e tals
eu peguei esse codigo da internet:
private void button1_Click(object sender, EventArgs e)
{
try
{
string texto = "texto de impressão";
leitor = new StringReader(texto);
PrintPreviewDialog printPreviewDialog1 = new PrintPreviewDialog();
printPreviewDialog1.Document = this.printDocument1;
printPreviewDialog1.FormBorderStyle = FormBorderStyle.Fixed3D;
printPreviewDialog1.ShowDialog();
}
catch (Exception exp)
{
MessageBox.Show(" Erro : " + exp.Message.ToString());
}
}
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
//variaveis usadas para definir as configurações da impressão
float linhasPorPagina = 0;
float yPosicao = 0;
int contador = 0;
float margemEsquerda = e.MarginBounds.Left;
float margemSuperior = e.MarginBounds.Top;
string linha = null;
Font fonteImpressao = this.richTextBox1.Font;
SolidBrush mCaneta = new SolidBrush(Color.Black);
// Define o numero de linhas por pagina, usando MarginBounds.
linhasPorPagina = e.MarginBounds.Height / fonteImpressao.GetHeight(e.Graphics);
// Itera sobre a string usando StringReader, imprimindo cada linha
while (contador < linhasPorPagina && ((linha = leitor.ReadLine()) != null))
{
// calcula a posicao da proxima linha baseada
// na altura da fonte de acordo com o dispositivo de impressão
yPosicao = margemSuperior + (contador * fonteImpressao.GetHeight(e.Graphics));
// desenha a proxima linha no controle RichTextBox
e.Graphics.DrawString(linha, fonteImpressao, mCaneta, margemEsquerda, yPosicao, new StringFormat());
contador++;
}
// Verifica se existe mais linhas para imprimir
if (linha != null)
e.HasMorePages = true;
else
e.HasMorePages = false;
//libera recursos
mCaneta.Dispose();
}
o código imprime e tals, mas eu gostaria de muda-lo para ele criar uma tabela na impressão.
do jeito que ele esta ai ele imprimi um texto
se alguem puder ajudar
