在pdf中重复标题到表格

时间:2017-12-05 05:25:20

标签: c# asp.net

我正在使用Itextsharp PDF工具使用asp.net和C#生成PDF,因为在一个PDFPtable中,最后一行数据在下一页上重复意味着转发到下一页的表的一部分。所以想在下一页显示该表的标题。

这是我的代码。

Document doc = new Document(iTextSharp.text.PageSize.A4.Rotate(), 10, 10, 20, 10);
string pdfFilePath = Server.MapPath(".") + "/pdf/myPdf" + Guid.NewGuid().ToString("N") + ".pdf";
try
{
    //Create Document class object and set its size to letter and give space left, right, Top, Bottom Margin
    FileStream fs = new FileStream(pdfFilePath, FileMode.Create);
    //
    PdfWriter wri = PdfWriter.GetInstance(doc, fs);

    //Header Section
    string strImagePath = Server.MapPath("Images");
    string strReportName = oReportDTO.strReportName + " " + oReportDTO.oDateRange.FromDate.ToString(DateFormat);
    Chunk headerchunk = new Chunk(strReportName, new Font(1, 8.0f));
    HeaderFooter oHeader = new HeaderFooter(new Phrase(headerchunk), false);
    oHeader.Border = Rectangle.NO_BORDER;
    oHeader.Alignment = 1;
    doc.Header = oHeader;

    //Footer Section
    string name ="Logged in as : " +currentLoggedInUser.UserName + new string(' ',70)+ "Page Number : " + doc.PageNumber;
    Chunk Footerchunk1 = new Chunk(name, new Font(1, 5.0f));
    HeaderFooter oFooter1 = new HeaderFooter(new Phrase(Footerchunk1), true);
    oFooter1.Border = Rectangle.NO_BORDER;
    oFooter1.Alignment = 1;
    doc.Footer = oFooter1;
    iTextSharp.text.Image imgFooter = iTextSharp.text.Image.GetInstance(System.Drawing.Image.FromFile(strImagePath + "/TransRisk Logo168x97.png"), System.Drawing.Imaging.ImageFormat.Jpeg);
    imgFooter.ScaleAbsolute(80, 50);
    Chunk footerchunk = new Chunk(imgFooter, 260.0f, 0.0f);
    HeaderFooter oFooter = new HeaderFooter(new Phrase(name),new Phrase(footerchunk));
    oFooter.Border =Rectangle.NO_BORDER;
    doc.Footer = oFooter;

    doc.Open();//Open Document to write    

    Font font8 = FontFactory.GetFont("ARIAL", 7);

    HtmlTable dt = customMatrixReport;

    if (dt.Rows.Count > 0)
    {
        //Craete instance of the pdf table and set the number of column in that table
        int startColumnPosition = 1;
        int endColumnPosition = 13;//End Column number in Pdf Page
        int NoOfReports = Convert.ToInt32(Math.Ceiling((decimal)(dt.Rows[0].Cells.Count - 1) / endColumnPosition));//Count How many Pages to show
        int pageRowCount = 0;
        List<PdfPCell> lstHeaderCells = new List<PdfPCell>();
        PdfPTable oPdfTable = null;
        PdfPCell oPdfPCell = null;
        for (int report = 1; report <= NoOfReports; ++report)
        {
            doc.Add(oHeader);
            //ColumnText.ShowTextAligned(

            int noOfColumns = -1;
            if (endColumnPosition > dt.Rows[0].Cells.Count - 1) { endColumnPosition = dt.Rows[0].Cells.Count - 1; noOfColumns = (endColumnPosition - startColumnPosition) + 2; oPdfTable = new PdfPTable(noOfColumns); }
            else
            {
                oPdfTable = new PdfPTable(14);
                //Widths Count
                noOfColumns = 14;
            }
            oPdfTable.TotalWidth = 650f;
            List<float> lstwidths = new List<float>();
            lstwidths.Add(100f);
            for (int i = 2; i <= noOfColumns; ++i)
            {
                lstwidths.Add(80f);
            }
            oPdfTable.SetTotalWidth(lstwidths.ToArray());
            pageRowCount = 0;

            for (int rows = 0; rows < dt.Rows.Count; rows++)
            {
                //PageRowCount
                pageRowCount = pageRowCount + 1;
                //Description celll
                if (rows == 0 )
                {
                    //Background color for table header
                    oPdfPCell = new PdfPCell(new Phrase(new Chunk(dt.Rows[rows].Cells[0].InnerText, new Font(1, 8.0f, 1, Color.WHITE))));
                    oPdfPCell.BackgroundColor = new Color(118, 147, 199);
                    oPdfTable.AddCell(oPdfPCell);
                }
                else
                {
                    //background color for Table cells
                    oPdfPCell = new PdfPCell(new Phrase(new Chunk(dt.Rows[rows].Cells[0].InnerText,new Font(1, 8.0f))));
                    oPdfPCell.BackgroundColor = new Color(232, 237, 255);
                    oPdfTable.AddCell(oPdfPCell);
                }

                //for header cel
                if (rows == 0)
                {
                    lstHeaderCells.Add(oPdfPCell);
                }
                for (int column = startColumnPosition; column <= endColumnPosition; column++)
                {

                    if (rows == 0)
                    {
                        oPdfPCell = new PdfPCell(new Phrase(new Chunk(dt.Rows[rows].Cells[column].InnerText, new Font(1, 8.0f, 1, Color.WHITE))));
                        oPdfPCell.BackgroundColor = new Color(118, 147, 199);
                        oPdfTable.AddCell(oPdfPCell);
                    }
                    else
                    {
                        oPdfPCell = new PdfPCell(new Phrase(new Chunk(dt.Rows[rows].Cells[column].InnerText, new Font(1, 8.0f))));
                        oPdfPCell.BackgroundColor = new Color(232, 237, 255);
                        oPdfPCell.Column.Alignment = 2;
                        oPdfTable.AddCell(oPdfPCell);
                    }

                    if (rows == 0)
                    {
                        lstHeaderCells.Add(oPdfPCell);
                    }
                }
                if (pageRowCount >= 40 && rows != (dt.Rows.Count - 1))
                {
                    pageRowCount = 0; doc.Add(oPdfTable); doc.NewPage(); doc.Add(oHeader); oPdfTable = new PdfPTable(noOfColumns); oPdfTable.SetTotalWidth(lstwidths.ToArray()); foreach (PdfPCell oHeaderCell in lstHeaderCells) { oPdfTable.AddCell(oHeaderCell); }
                }
            }
            startColumnPosition = endColumnPosition + 1;
            endColumnPosition = endColumnPosition + 13;
            oPdfTable.SpacingBefore = 10;
            oPdfTable.SpacingAfter = 10;
            doc.Add(oPdfTable);
            //doc.NewPage();
        }
    }
    else
        doc.Add(oHeader);
}

finally
{
    doc.Close();
}

帮帮我......

1 个答案:

答案 0 :(得分:0)

更改此行 -

if (endColumnPosition > dt.Rows[0].Cells.Count - 1) { endColumnPosition = dt.Rows[0].Cells.Count - 1; noOfColumns = (endColumnPosition - startColumnPosition) + 2; oPdfTable = new PdfPTable(noOfColumns); }

对此 -

if (endColumnPosition > dt.Rows[0].Cells.Count - 1) { endColumnPosition = dt.Rows[0].Cells.Count - 1; noOfColumns = (endColumnPosition - startColumnPosition) + 2; oPdfTable = new PdfPTable(noOfColumns); oPdfTable.HeaderRows = 1;}

在这一行之后 -

oPdfTable = new PdfPTable(14);

添加此内容 -

oPdfTable.HeaderRows = 1;

更改此行 -

pageRowCount = 0; doc.Add(oPdfTable); doc.NewPage(); doc.Add(oHeader); oPdfTable = new PdfPTable(noOfColumns); oPdfTable.SetTotalWidth(lstwidths.ToArray()); foreach (PdfPCell oHeaderCell in lstHeaderCells) { oPdfTable.AddCell(oHeaderCell); }

对此 -

pageRowCount = 0; doc.Add(oPdfTable); doc.NewPage(); doc.Add(oHeader); oPdfTable = new PdfPTable(noOfColumns); oPdfTable.HeaderRows = 1; oPdfTable.SetTotalWidth(lstwidths.ToArray()); foreach (PdfPCell oHeaderCell in lstHeaderCells) { oPdfTable.AddCell(oHeaderCell); }