public ActionResult CreatePdfUsuarioCatalogo() { IEnumerable<Usuario> lista = null; try { // Extraer informacion IServiceUsuario _ServiceUsuario = new ServiceUsuario(); lista = _ServiceUsuario.GetUsuarios(); // Crear stream para almacenar en memoria el reporte MemoryStream ms = new MemoryStream(); //Initialize writer PdfWriter writer = new PdfWriter(ms); //Initialize document PdfDocument pdfDoc = new PdfDocument(writer); Document doc = new Document(pdfDoc); Paragraph header = new Paragraph("Catálogo de Usuarios") .SetFont(PdfFontFactory.CreateFont(StandardFonts.HELVETICA)) .SetFontSize(14) .SetFontColor(ColorConstants.BLUE); doc.Add(header); // Crear tabla con 6 columnas Table table = new Table(6, true); // los Encabezados table.AddHeaderCell("Login"); table.AddHeaderCell("Descripción"); table.AddHeaderCell("Fotografia"); table.AddHeaderCell("Nombre"); table.AddHeaderCell("Apellidos"); table.AddHeaderCell("Estado"); foreach (var item in lista) { // Agregar datos a las celdas table.AddCell(new Paragraph(item.Login.ToString())); table.AddCell(new Paragraph(item.Rol.Descripcion.ToString())); // Convierte la imagen que viene en Bytes en imagen para PDF Image image = new Image(ImageDataFactory.Create(item.Foto)); // Tamaño de la imagen image = image.SetHeight(75).SetWidth(75); table.AddCell(image); table.AddCell(new Paragraph(item.Nombre.ToString())); table.AddCell(new Paragraph(item.Apellidos.ToString())); table.AddCell(new Paragraph(item.Estado.ToString())); } doc.Add(table); // Colocar número de páginas int numberOfPages = pdfDoc.GetNumberOfPages(); for (int i = 1; i <= numberOfPages; i++) { // Write aligned text to the specified by parameters point doc.ShowTextAligned(new Paragraph(String.Format("pag {0} of {1}", i, numberOfPages)), 559, 826, i, TextAlignment.RIGHT, VerticalAlignment.TOP, 0); } //Close document doc.Close(); // Retorna un File return File(ms.ToArray(), "application/pdf", "reporte"); } catch (Exception ex) { // Salvar el error en un archivo Log.Error(ex, MethodBase.GetCurrentMethod()); TempData["Message"] = "Error al procesar los datos! " + ex.Message; TempData.Keep(); // Redireccion a la captura del Error return RedirectToAction("Default", "Error"); } }