How to merge first 3 columns for rows with same value in PDF

随声附和 提交于 2019-12-12 03:26:21

问题


I'm using itextSharp to export a DataTable to a pdf table. I can export the data to a pdf table using the sample code i have posted below. The DataTable contains close to 21 columns.

The first column in the pdf (DataTable) might contain similar values for any number of rows. If the data values in first column for a group of rows is similar, i want to merge the first 3 columns of those rows as one cell.

I'm having trouble modifying the code below to achieve this.

public iTextSharp.text.Table GetItextTable(DataTable dtChartData, string reportType)
    {
        int intCols = dtChartData.Columns.Count; //Total number of columns 
        int intRows = dtChartData.Rows.Count; //Total number of rows 
        iTextSharp.text.Table pdfTable = new iTextSharp.text.Table(intCols, intRows);
        try
        {
            pdfTable.BorderWidth = 1;
            pdfTable.Width = 100;
            pdfTable.Padding = 1;
            pdfTable.Spacing = 1;
            /*creating table headers */
            for (int i = 0; i < intCols; i++)
            {

                iTextSharp.text.Cell cellCols = new iTextSharp.text.Cell();
                iTextSharp.text.Font ColFont = iTextSharp.text.FontFactory.GetFont("Tahoma", 07,
                    iTextSharp.text.Font.BOLD);
                for (int l = 0; l < dtChartData.Columns.Count; l++)
                {
                    if (dtChartData.Columns[l].ColumnName.Contains("_"))
                    {
                        dtChartData.Columns[l].ColumnName = dtChartData.Columns[l].ColumnName.Replace("_", " ");
                    }
                }
                iTextSharp.text.Chunk chunkCols = new iTextSharp.text.Chunk(dtChartData.Columns[i].ColumnName,ColFont);
                cellCols.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER;
                if ((chunkCols.ToString().ToLower() == "ReportDetails"))
                {
                    cellCols.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER;
                }
            }
            /* loop that take values from every row in datatable and insert in itextsharp table */
            for (int k = 0; k < intRows; k++)
            {
                for (int j = 0; j < intCols; j++)
                {
                    iTextSharp.text.Cell cellRows = new iTextSharp.text.Cell();
                    iTextSharp.text.Font RowFont = iTextSharp.text.FontFactory.GetFont("Tahoma", 07);
                    iTextSharp.text.Chunk chunkRows = new iTextSharp.text.Chunk(dtChartData.Rows[k][j].ToString(),RowFont);

                    cellRows.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER;
                    cellRows.Add(chunkRows);
                    pdfTable.AddCell(cellRows);
                }
            }
        }
        catch (Exception ex)
        {
            //error handling code here removed
        }
        return pdfTable;
    }

回答1:


Have you tried to change the Colspan?

iTextSharp.text.Cell cell = new iTextSharp.text.Cell();
cell.AddElement(new Paragraph("colspan 3"));
cell.Colspan = 3;
table.AddCell(cell);

In this case, cell will span three columns.




回答2:


try this. i just edited your code, not checked

here i have edited 1 line of your code and added a new line (total 2 lines of change only).

dont forget to combine headding row like this, if you need

/* loop that take values from every row in datatable and insert in itextsharp table */
        for (int k = 0; k < intRows; k++)
        {
            for (int j = 2; j < intCols; j++)// EDIT: if all first 3 cols are same, then starts with 2
            { 
                iTextSharp.text.Cell cellRows = new iTextSharp.text.Cell();
                if(j == 2) cellRows.Colspan = 3;// ADD: it'll gives a 3 times long cell
                iTextSharp.text.Font RowFont = iTextSharp.text.FontFactory.GetFont("Tahoma", 07);
                iTextSharp.text.Chunk chunkRows = new iTextSharp.text.Chunk(dtChartData.Rows[k][j].ToString(),RowFont);

                cellRows.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER;
                cellRows.Add(chunkRows);
                pdfTable.AddCell(cellRows);
            }
        }


来源:https://stackoverflow.com/questions/36568392/how-to-merge-first-3-columns-for-rows-with-same-value-in-pdf

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!