Ayuda con tipo de letra al exportar un datagrid a pdf

Iniciado por joalbela, 8 Marzo 2011, 21:46 PM

0 Miembros y 1 Visitante están viendo este tema.

joalbela

Hola amigos, tengo un problema lo que pasa es que genere un datagrid y luego lo exporte a pdf y me gustaria poder cambiarle el estilo de la  letra por una curier new ya que no he podido hacerlo.

Muchas gracias
Jorge MB

Shell Root

Y como hicisteis para exportarlo? Alguna librería u objeto?
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

joalbela

#2
Código (csharp) [Seleccionar]
private void btnExportar_Click(object sender, EventArgs e)
        {

         
            DateTime hora = DateTime.Now;
            string fcha_ttal = Convert.ToDateTime(hora).Day + "/" + Convert.ToDateTime(hora).Month + "/" + Convert.ToDateTime(hora).Year;
            Document doc = new Document(PageSize.A3, 9, 9, 10, 10);
            string filename = "C:\\Temp\\Listado Total.pdf";
            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 ;
            Chunk tamaño = new Chunk(" LISTA DE PRODUCTOS CODIFICADOS EN " + fcha_ttal + "", FontFactory.GetFont("COURIER", 12));
           
            try
            {
                FileStream file = new FileStream
               (filename, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
                PdfWriter.GetInstance(doc, file);
                doc.Open();
                doc.Add(new Paragraph(tamaño));
                doc.Add(jpg);
                GenerarDocumento(doc);
                Process.Start(filename);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            doc.Close();
        }
        //Función que genera el documento Pdf
        public void GenerarDocumento(Document document)
        {
            PdfPTable datatable = new PdfPTable(dataGridView1.ColumnCount);
            datatable.DefaultCell.Padding = 1;
            float[] headerwidths = GetTamañoColumnas(dataGridView1);
            datatable.SetWidths(headerwidths);
            datatable.WidthPercentage = 100;
            datatable.DefaultCell.BorderWidth = 3;
            datatable.DefaultCell.HorizontalAlignment = Element.ALIGN_LEFT;
            for (int i = 0; i < dataGridView1.ColumnCount; i++)
            {
                datatable.AddCell(dataGridView1.Columns[i].HeaderText);

            }
            datatable.HeaderRows = 0;
            datatable.DefaultCell.BorderWidth = 1;

            for (int i = 0; i < dataGridView1.RowCount - 1; i++)
            {
                for (int j = 0; j < dataGridView1.ColumnCount; j++)
                {
                    datatable.AddCell(dataGridView1[j, i].Value.ToString());
                    //string nmbre_prdcto = datatable.AddCell(dataGridView1[j, i].Value.ToString());
                    //string primera = nmbre_prdcto.Substring(1, 1);
                }
                datatable.CompleteRow();
            }
            document.Add(datatable);
        }
        public float[] GetTamañoColumnas(DataGridView dg)
        {
            float[] values = new float[dg.ColumnCount];
            for (int i = 0; i < dg.ColumnCount; i++)
            {
                values[i] = (float)dg.Columns[i].Width;
            }
            return values;
        }



ESTE FUE EL CODIGO CON EL QUE EXPORTE EL DATAGRID AL PDF
Jorge MB

seba123neo

#3
trata de poner el codigo fuente entre el geshi asi es mas claro de leer.

no pusiste que libreria estas usando, porque cuando haces un "new Document" o "new PdfPTable" esos metodos forman parte de una libreria externa al visual studio que debes estar usando.

por lo que me acabo de fijar la libreria se llama iTextSharp

busca en internet que hay mucho de esta libreria, fijate esto:

iTextSharp - Working with Fonts

saludos.



La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

joalbela

#4
 
Código (csharp) [Seleccionar]
public void GenerarDocumento(Document document)
       {
           PdfPTable datatable = new PdfPTable(dataGridView1.ColumnCount);
           datatable.DefaultCell.Padding = 1;
           float[] headerwidths = GetTamañoColumnas(dataGridView1);
           datatable.SetWidths(headerwidths);
           datatable.WidthPercentage = 100;
           datatable.DefaultCell.BorderWidth = 3;
           datatable.DefaultCell.HorizontalAlignment = Element.ALIGN_LEFT;
           for (int i = 0; i < dataGridView1.ColumnCount; i++)
           {
               datatable.AddCell(dataGridView1.Columns[i].HeaderText);

           }
           datatable.HeaderRows = 0;
           datatable.DefaultCell.BorderWidth = 1;

           for (int i = 0; i < dataGridView1.RowCount - 1; i++)
           {
               for (int j = 0; j < dataGridView1.ColumnCount; j++)
               {
                   datatable.AddCell(dataGridView1[j, i].Value.ToString());
                   //string nmbre_prdcto = datatable.AddCell(dataGridView1[j, i].Value.ToString());
                   //string primera = nmbre_prdcto.Substring(1, 1);
               }
               datatable.CompleteRow();
           }
           document.Add(datatable);
       }
       public float[] GetTamañoColumnas(DataGridView dg)
       {
           float[] values = new float[dg.ColumnCount];
           for (int i = 0; i < dg.ColumnCount; i++)
           {
               values[i] = (float)dg.Columns[i].Width;
           }
           return values;
       }


claro uso ITextSharp
Jorge MB

seba123neo

#5
no hacia falta que hagas otro post, podes editar el otro.

el geshi para C# es [ code=csharp] [ /code]
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson