How can I generate a pdf with the iTextSharp library?

0

In C # I have a DataGridView with data obtained from a database in MySql and I want to generate the PDF document but it marks an error when creating the body of the PDF in the method GenerarDocumentos

private void btn_imprimir_Click(object sender, EventArgs e)
    {
        if (dgv_listaActividades.RowCount == 0)
        {
            MessageBox.Show("No Hay Datos Para Realizar Un Reporte");
        }
        else
        {    //ESCOJE A RUTA DONDE GUARDAREMOS EL PDF 
            SaveFileDialog save = new SaveFileDialog();
            save.Filter = "PDF Files (*.pdf)|*.pdf|All Files (*.*)|*.*";
            if (save.ShowDialog() == DialogResult.OK)
            {
                string filename = save.FileName;
                Document doc = new Document(PageSize.A3, 9, 9, 9, 9);
                Chunk encab = new Chunk("LISTA DE ACTIVIDADES DE LABORATORIO DE DIVULGACION", FontFactory.GetFont("COURIER", 18));
                try
                {
                    FileStream file = new FileStream(filename, FileMode.OpenOrCreate);
                    PdfWriter writer = PdfWriter.GetInstance(doc, file);
                    writer.ViewerPreferences = PdfWriter.PageModeUseThumbs;
                    writer.ViewerPreferences = PdfWriter.PageLayoutOneColumn;
                    doc.Open();

                    doc.Add(new Paragraph(encab));
                    GenerarDocumentos(doc);

                    Process.Start(filename);
                    doc.Close();
                }

                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message + ex.StackTrace);
                }
            }
        } 
    }
    public void GenerarDocumentos(Document document)
    {

        PdfPTable datatable = new PdfPTable(dgv_listaActividades.ColumnCount);

        //asignamos algunas propiedades para el diseño del pdf  
        datatable.DefaultCell.Padding = 1;
        float[] headerwidths = GetTamanoColumnas(dgv_listaActividades);

        datatable.SetWidths(headerwidths);
        datatable.WidthPercentage = 100;
        datatable.DefaultCell.BorderWidth = 1;

        datatable.DefaultCell.BackgroundColor = iTextSharp.text.BaseColor.WHITE;

        datatable.DefaultCell.BorderColor = iTextSharp.text.BaseColor.BLACK;

        iTextSharp.text.Font fuente = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA);

        Phrase objP = new Phrase("A", fuente);

        datatable.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;

        for (int i = 0; i < dgv_listaActividades.ColumnCount; i++)
        {

            objP = new Phrase(dgv_listaActividades.Columns[i].HeaderText, fuente);
            datatable.HorizontalAlignment = Element.ALIGN_CENTER;

            datatable.AddCell(objP);

        }
        datatable.HeaderRows = 1;

        datatable.DefaultCell.BorderWidth = 1;

        //SE GENERA EL CUERPO DEL PDF 
        for (int i = 0; i < dgv_listaActividades.RowCount; i++)
        {
            for (int j = 0; j < dgv_listaActividades.ColumnCount; j++) 
            {
                objP = new Phrase(dgv_listaActividades[j,i].Value.ToString(), fuente);
                datatable.AddCell(objP);
            }
            datatable.CompleteRow();
        }
        document.Add(datatable);
    }

    //Función que obtiene los tamaños de las columnas del datagridview 
    public float[] GetTamanoColumnas(DataGridView dg)
    {
        //Tomamos el numero de columnas 
        float[] values = new float[dg.ColumnCount];
        for (int i = 0; i < dg.ColumnCount; i++)
        {
            //Tomamos el ancho de cada columna 
            values[i] = (float)dg.Columns[i].Width;
        }
        return values;
    }

When I give value to i of 1, and to j of 1 if it works only that a line does not appear in the DataGridView and it generates it when it is 0 not

    
asked by David rnk 29.08.2018 в 00:29
source

0 answers