usando ItextSharp aqui te mando un sample
Código:
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = "application/pdf";
HttpContext.Current.Response.AddHeader("Content-disposition", "filename=PedidoNumero" +tuID+ ".pdf");
MemoryStream ms = new MemoryStream();
Document xy = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(xy, ms);
xy.Open();
iTextSharp.text.Image imagenLogo= iTextSharp.text.Image.GetInstance(new Uri(urlLogoReporte));
imagenLogo.ScalePercent(50, 50);
imagenLogo.SetDpi(1000,1000);
iTextSharp.text.Image imagenChart1=iTextSharp.text.Image.GetInstance(new Uri(urlGrafica1));
iTextSharp.text.Image imagenChart2=iTextSharp.text.Image.GetInstance(new Uri(urlGrafica2));
imagenChart1.SetDpi(1000,1000);
imagenChart2.SetDpi(1000,1000);
// Mi tabla para alinear mis graficas a la pagina del pdf.
iTextSharp.text.Table tablecharts=new iTextSharp.text.Table(2,1);
tablecharts.CellsFitPage =true;
tablecharts.Width=110;
tablecharts.Cellpadding=1;
tablecharts.AddCell(new Cell(imagenChart1),0,0);
tablecharts.AddCell(new Cell(imagenChart2),0,1);
tablecharts.BorderWidth = 0;
xy.AddAuthor("Creado por Peterpay");
xy.Add(imagenLogo); // Agrego Logo
xy.Add(new Paragraph(""));
xy.Add(new Paragraph(Titulo)); // Agrego Titulo
xy.Add(new Paragraph(""));
xy.Add(tablecharts); // Agrego Mis graficas q estan dentro del table
xy.Add((tablaXY); // Agrego mi detalle de pedido
xy.Close();
HttpContext.Current.Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);
HttpContext.Current.Response.OutputStream.Flush();
HttpContext.Current.Response.OutputStream.Close();
HttpContext.Current.Response.End();
ms.Close(); // Cierro el MemoryStream
tablaXY lo deberas definir como un PDFPTable y ahi puedes poner con un ciclo tus items del pedido
Es solo hacer un for e ir alimentandolo con tu fuente de datos.