Mostrando las entradas con la etiqueta C#. Mostrar todas las entradas
Mostrando las entradas con la etiqueta C#. Mostrar todas las entradas

Dando Estilo a Celdas de Excel con mso-number-format


  • mso-number-format:"0" Sin decimales 
  • mso-number-format:"0\.000" 3 decimales 
  • mso-number-format:"\#\,\#\#0\.000" Coma decimal con 3 decimales 
  • mso-number-format:"mm\/dd\/yy" Fecha(Date7) 
  • mso-number-format:"mmmm\ d\,\ yyyy" Fecha(Date9) 
  • mso-number-format:"m\/d\/yy\ h\:mm\ AM\/PM" D -T AMPM (Fecha y Hora con am o pm) 
  • mso-number-format:"Short Date" 01/03/1998 Fecha Corta 
  • mso-number-format:"Medium Date" 01-mar-98 Fecha Formato Medio 
  • mso-number-format:"d\-mmm\-yyyy" 01-mar-1998 
  • mso-number-format:"Short Time" 5:16 
  • mso-number-format:"Medium Time" 5:16 am 
  • mso-number-format:"Long Time" 5:16:21:00 
  • mso-number-format:"Percent" Porcentaje con 2 decimales 
  • mso-number-format:"0%" Porcentaje sin decimales 
  • mso-number-format:"0\.E+00" Notación científica 
  • mso-number-format:"\@" Texto 
  • mso-number-format:"\#\ ???\/???" Fracciones con más de 3 dígitos 
  • mso-number-format:"\0022£\0022\#\,\#\#0\.00" £12.76 
  • mso-number-format:"\#\,\#\#0\.00_ \;\[Red\]\-\#\,\#\#0\.00\ " 2 decimales, y números negativos en rojo y con signo (1.56 -1.56)

Generando PDF utilizando ItextSharp en C#

Introducción

Existen varios requerimientos para generar archivos en PDF, por ejemplo generar facturas en ese formato, hay varias opciones para generar documentos PDF. Por supuesto que la opción más simple es utilizar Crystal Reports además de tener una buena calidad, pero el problema con Crystal Reports es que es necesario instalarlo, y si es un proyecto web, se necesita instalar Crystal Reports en el servidor del hosting, de modo que encuentro en ItextSharp una alternativa interesante.

Después de investigar en varios artículos de internet para poder generar la factura tal como la esperaba un cliente, ya que la información para utilizar ItextSharp está en partes así que vamos a ver una forma más completa: como emitir un PDF con encabezado, cuerpo y pie de página.

Requerimientos

La librería iTextSharp está disponible gratuitamente y puede ser descarga desde aquí.

Utilizando el Código

Después de descargar iTextSharp , hay que agregar una referencia a la librería de ITextSharp en tu proyecto.

Utiliza el siguiente espacio de nombres antes de empezar a escribir código.

using iTextSharp.text.pdf;

using iTextSharp.text; 

El código sería el siguiente:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using iTextSharp.text.pdf;
using iTextSharp.text;
using System.IO;

namespace CrearPDF_iText
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void btnCrearPDF_Click(object sender, EventArgs e)
        {
            Document doc = new Document(iTextSharp.text.PageSize.A4);

            System.IO.FileStream file = new System.IO.FileStream(Application.StartupPath + "/" + DateTime.Now.ToString("ddMMyyHHmmss") + ".pdf", System.IO.FileMode.OpenOrCreate);

            PdfWriter writer = PdfWriter.GetInstance(doc, file);
            doc.Open();
            PdfPTable tab = new PdfPTable(3);
            PdfPCell cell = new PdfPCell(new Phrase("Encabezado", new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 24)));
            cell.Colspan = 3;
            cell.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right
            //Style
            cell.BorderColor = new BaseColor(System.Drawing.Color.Red);
            cell.Border = 1; // | Rectangle.TOP_BORDER;
            cell.BorderWidthBottom = 3f;
            tab.AddCell(cell);
            //row 1
            tab.AddCell("R1C1");
            tab.AddCell("R1C2");
            tab.AddCell("R1C3");
            //row 2
            tab.AddCell("R2C1");
            tab.AddCell("R2C2");
            tab.AddCell("R2C3");
            cell = new PdfPCell();
            cell.Colspan = 3;
            iTextSharp.text.List pdfList = new List(List.UNORDERED);
            pdfList.Add(new iTextSharp.text.ListItem(new Phrase("Producto de Lista 1")));
            pdfList.Add("Producto de Lista 2");
            pdfList.Add("Producto de Lista 3");
            pdfList.Add("Producto de Lista 4");
            cell.AddElement(pdfList);
            tab.AddCell(cell);
            doc.Add(tab);
            // calling PDFFooter class to Include in document
            writer.PageEvent = new PDFFooter();
            doc.Close();
            file.Close();
        }

      
    }

    public class PDFFooter : PdfPageEventHelper
    {
        public override void OnEndPage(PdfWriter writer, Document document)
        {
            //base.OnEndPage(writer, document);
            // Writing Footer on Page
            PdfPTable tab = new PdfPTable(1);
            PdfPCell cell = new PdfPCell(new Phrase("Prueba de Pie de Página"));
            cell.Border = 0;
            tab.TotalWidth = 300F;
            tab.AddCell(cell);
            tab.WriteSelectedRows(0, -1, 300, 30, writer.DirectContent);
        }


    }
}

Puntos de Interés

El siguiente código es para crear un PDF a disco con la ayuda de la clase FileStream class, también puedes utilizar la clase MemoryStream para enviar el PDF como una respuesta.

System.IO.MemoryStream str = new System.IO.MemoryStream();

        PdfWriter writer = PdfWriter.GetInstance(doc, str);

        Response.AddHeader("Content-Disposition", "attachment;filename=report.pdf");

        Response.ContentType = "application/pdf";

        Response.BinaryWrite(str.ToArray());

        str.Close();

        Response.End();

Enlaces sobre Programación

Me he propuesto aprender C# a fondo, ya la sintaxis la estoy manejando regular, pero me parece un buen reto que despertará a mis neuronas adormecidas por la rutina de siempre. En mi afán de aprender, estoy portando una aplicación de Visual Fox hacia C#, manejando incluso Dbf's, ya que es un sistema de planillas, que tiene su base de datos en Dbf's, una aplicación heredada.

También estoy investigando como crear complementos y la forma de extraer información de Outlook, ya se que hay aplicaciones comerciales para eso, pero no está demas invertir tiempo en algo que sirve, además una aplicación comercial vale arriba de los mil dolares, y en el Perú, quien puede pagar eso sin que el bolsillo se resienta.

Y esos enlaces los pongo aquí, para no volver a buscarlos luego, son enlaces a sitios de programación, algunos que he encontrado recientemente, otros que los tengo en la memoria, referente a Visual Fox, NET (VBNET y C#), Visual Basic:

Fox Press: Revista sobre Visual Fox, uno de los lenguajes que sé usar, y me ha servido de mucho.

Blog de Dan Fernandez: Blog sobre productos NET, ahí encontré un artículo interesante sobre como crear un complemento para Outlook.

Otros Sitios del Guille: enlaces que tiene el archiconocido Guille, el maestro. El Guille tiene un artículo sobre como leer un archivo de texto y asignarlo a un combo, un control de lista o un listview. El Guille también tiene una sección referente a C#, una manual de iniciación, bueno y que ayuda bastante a los que estamos entrando paso a paso en el hermano mayor de VB.Net. Y el mismo Guille tiene su sección de equivalencias entre VBasic y C#, que es como un traductor para programadores como yo.

StringBuilder: es una página del Microsoft MSDN, ahí aprendí a usar el StringBuilder.

En MailXMail tienen un curso de C#. Incluso lo pueden descargar en PDF.

The Code Project: sitio enorme sobre NET.

La capacidad del programador cuenta mas que el lenguaje o herramienta de programación que usa. Es el lema de Harvey Triana, aunque no actualiza mucho sus artículos sigue siendo una referencia, desde que andaba con el VB 6.0.

Este es un sitio más, Net un mundo por descubrir, está mas orientado a noticias o descripción de las nuevas tecnologías en programación Web: ASPNET, AJAX, etc, estoy revisandolo para ver cuanto puede servir de ayuda para un programador de aplicaciones de escritorio.

El blog de Sergio Tarrillo, colaborador de El Guille. No solo habla de programación, sino de productividad, consejitos que no están demás.

Y el sitio de Geeks de Microsoft, que reune a todos los blogueros de Microsoft, ahí es donde probablemente encontraremos mucha ayuda, y mas retos también...

Bueno eso es todo, por ahora. Seguimos investigando, seguimos aprendiendo.