Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: joalbela en 16 Marzo 2011, 22:38 pm



Título: Paginar un pdf y alinear las columnas de un datagridview
Publicado por: joalbela en 16 Marzo 2011, 22:38 pm
Hola amigos necesito una yuda urgente, estoy generando un datagridview y l oestoy exportando a pdf me gustaria poder alinear las columnas como quiero y poder colocarle el numero de la hoja a cada una si algo aca dejo el codigo . mucahs gracias.



Código
  1. OdbcDataAdapter dta  =new OdbcDataAdapter (" SELECT a.cdgo_prdcto COD,a.nmbre_prdcto DESCRIPCION, SUM(b.cntdad)PMVTA,a.csto_rpscion CR, " +
  2.                                                   " a.clfccion_prmnnte P, a.clfccion_tmpral T,a.cdgo_brra EAN" +
  3.                                                   " from prdcto a , prmdio_vnta b " +
  4.                                                   " where estdo = 'A' " +
  5.                                                   " and a.cdgo_prdcto = b.cdgo_prdcto " +
  6.                                                   " group by 1,2,4,5,6,7 " +
  7.                                                    " order by 2 ", conn);
  8.  
  9.  
  10.  
  11.            DataSet dsdatos = new DataSet();
  12.            dta.Fill(dsdatos, "Datos");
  13.  
  14.            this.dataGridView1.DataMember = "Datos";
  15.            //this.dataGridView1.Columns(1).Width = 4400;
  16.            this.dataGridView1.DataSource = dsdatos;
  17.  
  18.  
  19.  
  20.        }
  21.  
  22.        private void Form1_Load(object sender, EventArgs e)
  23.        {
  24.  
  25.        }
  26.  
  27.        //private void dataGridView1_DefaultCellStyleChanged(object sender, EventArgs e)
  28.  
  29.        private void btnExportar_Click(object sender, EventArgs e)
  30.        {
  31.  
  32.  
  33.            DateTime hora = DateTime.Now;
  34.            string fcha_ttal = Convert.ToDateTime(hora).Day + "/" + Convert.ToDateTime(hora).Month + "/" + Convert.ToDateTime(hora).Year;
  35.  
  36.  
  37.            Document doc = new Document(PageSize.LETTER, 10, 10, 10, 10);
  38.            string filename = "C:\\Temp\\Listado Total.pdf";
  39.            iTextSharp.text.Image jpg = iTextSharp.text.Image.GetInstance(@"C:\Mis documentos\Biblia_productos\Biblia_productos\Images\marion.JPG"); jpg.Alignment = iTextSharp.text.Image.ALIGN_LEFT;
  40.            Chunk encab = new Chunk(" LISTA DE PRODUCTOS CODIFICADOS EN " + fcha_ttal + "", FontFactory.GetFont("COURIER", 12));
  41.  
  42.  
  43.            try
  44.            {
  45.                FileStream file = new FileStream
  46.               (filename, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
  47.                PdfWriter.GetInstance(doc, file);
  48.                doc.Open();
  49.  
  50.  
  51.                doc.Add(new Paragraph(encab));
  52.                doc.Add(jpg);
  53.                GenerarDocumento(doc);
  54.  
  55.                Process.Start(filename);
  56.                doc.Close();
  57.            }
  58.  
  59.            catch (Exception ex)
  60.            {
  61.                MessageBox.Show(ex.Message);
  62.            }
  63.  
  64.        }
  65.  
  66.        //Función que genera el documento Pdf
  67.        public void GenerarDocumento(Document document)
  68.        {
  69.  
  70.  
  71.  
  72.            PdfPTable datatable = new PdfPTable(dataGridView1.ColumnCount);
  73.            datatable.DefaultCell.Padding = 1;
  74.            float[] headerwidths = GetTamañoColumnas(dataGridView1);
  75.  
  76.  
  77.            datatable.SetWidths(headerwidths);
  78.            datatable.WidthPercentage = 100;
  79.            datatable.DefaultCell.BorderWidth = 4; // Define el grosor del encabezado
  80.  
  81.            //datatable.DefaultCell.VerticalAlignment = Element.ALIGN_CENTER; // Alinea el encabezado al centro
  82.            //datatable.DefaultCell.Column =
  83.            datatable.DefaultCell.Padding = 3;     //Amplia el tamaño del encabezado
  84.  
  85.  
  86.  
  87.           iTextSharp.text.Font fuente = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.COURIER, 9);
  88.  
  89.           Phrase objP = new Phrase("A", fuente);
  90.  
  91.            for (int i = 0; i < dataGridView1.ColumnCount; i++)
  92.            {
  93.  
  94.                objP = new Phrase(dataGridView1.Columns[i].HeaderText, fuente);
  95.  
  96.                //this.dataGridView1.Columns[1].DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter;
  97.                datatable.AddCell(objP);
  98.  
  99.  
  100.            }
  101.            datatable.HeaderRows = 1;
  102.            datatable.DefaultCell.BorderWidth = 1;
  103.  
  104.  
  105.            for (int i = 0; i < dataGridView1.RowCount - 1; i++)
  106.            {
  107.                for (int j = 0; j < dataGridView1.ColumnCount; j++)
  108.                {
  109.  
  110.                    objP = new Phrase(dataGridView1[j, i].Value.ToString(), fuente);
  111.                    datatable.AddCell(objP);
  112.                 }
  113.                datatable.CompleteRow();
  114.                }
  115.  
  116.            document.Add(datatable);
  117.  
  118.        }
  119.        public float[] GetTamañoColumnas(DataGridView dg)
  120.        {
  121.            float[] values = new float[dg.ColumnCount];
  122.            for (int i = 0; i < dg.ColumnCount; i++)
  123.            {
  124.                values[i] = (float)dg.Columns[i].Width;
  125.            }
  126.            return values;
  127.        }


Título: Re: Paginar un pdf y alinear las columnas de un datagridview
Publicado por: .::IT::. en 17 Marzo 2011, 01:24 am
joalbela pues la manera mas facil de hacer lo que dices es usando un reporteador como http://www.fyireporting.com/  que soporta exportacion a pdf lo e probado en estas semanas y la verdad esta muy bueno.


Título: Re: Paginar un pdf y alinear las columnas de un datagridview
Publicado por: Novlucker en 17 Marzo 2011, 04:16 am
Lo bueno sería que dejes de abrir un nuevo tema por cada opción de estilo que le quieres poner a tus pdf :¬¬

Saludos