繁体   English   中英

如果 iTextSharp 包含很大,如何在下一页上设置大表格

[英]how to set large table on next pages if contain is large with iTextSharp

我通过 PdfPageEventHelper 在我的文档上添加了页眉和页脚。

该文档有几个在运行时填充的“大”表。

我试图简单地通过“documen.Add(table)”来添加这些表格,但我的页眉和页脚结果被覆盖了。

我已经尝试了两种方法来添加表(WriteSelectedRows 和 document.Add(myPdfPtable))。

这是 Head 的 PageEventHelper 代码:

 public override void OnEndPage(PdfWriter writer, Document doc)
            {
                Phrase phrase = null;
                PdfPCell cell = null;           

                PdfPTable maintable = new PdfPTable(2);                
                maintable.TotalWidth = 500f;
                maintable.LockedWidth = true;
                maintable.SetWidths(new float[] { 50f, 400f });


                #region checklogo               
                if (IsLogo!=0)
                {
                   // code for display head like logo, etc
                }
                #endregion CheckSchoolNameandAddress

                maintable.WriteSelectedRows(0, -1, 50, 835, writer.DirectContent);

                Color color = new Color(System.Drawing.ColorTranslator.FromHtml("#A9A9A9"));
                DrawLine(writer, 25f,  780f, doc.PageSize.Width - 25f, 780f,color);
                DrawLine(writer, 25f, 780f, doc.PageSize.Width - 25f,  780f, color);

            }

这是页脚的 PageEventHelper 代码:

     public override void OnEndPage(PdfWriter writer, Document doc)
                {
                    Phrase phrase = null;
                    PdfPCell cell = null;
                    PdfPCell cell1 = null;
                    PdfPCell cell2 = null;
                    int pageN = writer.PageNumber;
                    String text = "Page " + pageN;

                    PdfPTable foootertable = new PdfPTable(3);
                    foootertable.TotalWidth = 500f;
                    foootertable.LockedWidth = true;
                    foootertable.SetWidths(new float[] { 50f, 60f, 50f });



                    #region checkprintedbyReportNamePageNo
                    if (Isfooter != 0)
                    {
                        // code for footer like pageno, etc
                    }
                    #endregion CheckprintedbyReportNamePageNo

                    foootertable.WriteSelectedRows(0, -1, 30,30, writer.DirectContent);
                    color = new Color(System.Drawing.ColorTranslator.FromHtml("#A9A9A9"));
                    DrawLine(writer, 25f, 32f, doc.PageSize.Width - 25f, 32f, color);
                    DrawLine(writer, 25f, 32f, doc.PageSize.Width - 25f, 32f, color);

                }

显示在所有页面上的表格代码,如 reportdiaplay

    public ActionResult DetailReportPDF(int TempId, int ReportModuleId, string BoardStageId, string ShiftId, string ClassDivisionId, string Subjects)
        {
            try
            {
                var BaseUrl = string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~"));

                IBoard board = Session["SchoolAdmin"] as IBoard;

                if (board != null)
                {
                    int yearid = 0; IYears currentyear = YearsDomain.GetCurrentYears(board.Board_Id); if (currentyear != null) yearid = currentyear.Year_Id;
                    string SchoolAddress = "";
                    string SchoolName = "";
                    string SchoolLogo = "";
                    SchoolName = board.Board_Name != null ? board.Board_Name.ToUpper() : "";
                    SchoolAddress = (board.Board_Address1 != null ? board.Board_Address1.ToUpper() + "," : "") + (board.Board_City != null ? board.Board_City + "," : "") + (board.Board_State != null ? board.Board_State + ", " : "") + (board.Board_Country != null ? board.Board_Country + " - " : "") + (board.Board_Pincode != null ? board.Board_Pincode + "." : "");
                    SchoolLogo = Session["SchoolLogo"] != null ? Session["SchoolLogo"].ToString() : "";

                    string filename = "";
                    DateTime now = DateTime.Now;

                    Document document = new Document(PageSize.A4);
                    document.SetMargins(88, 88, 80, 10f);
                    iTextSharp.text.Font NormalFont = FontFactory.GetFont("Arial Unicode MS,Arial", 12, iTextSharp.text.Font.NORMAL, iTextSharp.text.Color.BLACK);
                    iTextSharp.text.Font VNormalFont = FontFactory.GetFont("Arial Unicode MS,Arial", 10, iTextSharp.text.Font.NORMAL, iTextSharp.text.Color.BLACK);
                    iTextSharp.text.Font LARGFont = FontFactory.GetFont("Arial Unicode MS,Arial", 14, iTextSharp.text.Font.NORMAL, iTextSharp.text.Color.BLACK);

                    using (System.IO.MemoryStream memoryStream = new System.IO.MemoryStream())
                    {
                        PdfWriter writer = PdfWriter.GetInstance(document, memoryStream);
                        Phrase phrase = null;
                        PdfPCell cell = null;
                        PdfPTable maintable = null;
                        PdfPTable table = null;                       
                        PdfPTable secondTable = null;
                        PdfPCell TableCell = new PdfPCell();
                        PdfPCell secondTableCell = new PdfPCell();
                        secondTableCell.Border = iTextSharp.text.Rectangle.NO_BORDER;
                        iTextSharp.text.Color color = null;
                        document.Open();
                        List<ReportSetLayout> lst = new List<ReportSetLayout>();
                        IReportTemplate RTD = ReportTemplateDomain.GetReportTemplateFromId(TempId);
                        string Newstr = "";

                        int IsLogo = 0;
                        string LogoSize="";
                        string LogoPosition="";
                        int IsSchoolName=0;
                        int IsSchoolAddress=0;
                        string SchoolNameSize = "";
                        string SchoolNamePosition = "";
                        string SchoolAddressSize = "";
                        string SchoolAddressPosition = "";

                        int Isfooter = 0;
                        int IsPrintedBy =0;
                        int IsReportName =0;
                        int PageNo =0;
                        string ShowPrintedBy=""; 
                        string ShowReportName ="";
                        string ShowPageNo = "";

                        IReportModule ReportModule = ReportModuleDomain.GetReportModulesFromId(ReportModuleId);
                        IBoardUserRights boarduserrights = BoardUserRightsDomain.GetBoardUserRights(board.Board_Id, "Reports", Session["BoardUserName"].ToString());
                        IBoardUser BU = BoardUserDomain.getBoardUserById(Convert.ToInt32(boarduserrights.Board_User_Id));

                        if (RTD != null)
                        {

                            #region forLogo

                            // code for get value for header logo    

                            #endregion forLogo

                            #region forschoolName&address

                                // code for get value for header address

                            #endregion forschoolName&address

                            #region forprintedbyReportNamePageNo

                            // code for get value for footer 

                            #endregion forprintedbyReportNamePageNo


                        }



                        writer.PageEvent = new Header() { SName = SchoolName, SAddress = SchoolAddress, SLogo = SchoolLogo, IsLogo=IsLogo, LogoSize = LogoSize, LogoPosition = LogoPosition ,IsSchoolName=IsSchoolName , IsSchoolAddress=IsSchoolAddress, SchoolNameSize=SchoolNameSize ,SchoolNamePosition=SchoolNamePosition,SchoolAddressSize=SchoolAddressSize,SchoolAddressPosition=SchoolAddressPosition};

                       // writer.PageEvent = new Header();
                        writer.PageEvent = new Footer(){ Isfooter=Isfooter,IsPrintedBy=IsPrintedBy,IsReportName=IsReportName,IsPageNo=PageNo,PrintedBy=ShowPrintedBy,ReportName=ShowReportName};

                        #region ReportBind

                        string Shortby = "";
                        List<string> lstformat = new List<string>();
                        List<string> lstWrap = new List<string>();                   


                        List<ReportColumnDetails> lstReportColumn = new List<ReportColumnDetails>();
                        lstReportColumn = ReportColumnDomain.GetReportColumnsFromReportModule(ReportModuleId);


                        List<IReportTemplateColumn> lstRptempcol = new List<IReportTemplateColumn>();
                        lstRptempcol = ReportTemplateColumnDomain.GetAllReportTemplateColumnbyID(TempId);

                        List<int> colindexid = new List<int>();
                        List<int> ColWidth = new List<int>();

                        foreach (var col in lstRptempcol)
                        {
                            ColWidth.Add(Convert.ToInt32(col.ColumnWidth));
                            colindexid.Add(Convert.ToInt32(col.Column_Index_Id));

                        }
                        foreach (var shortName in lstRptempcol)
                        {
                            if (shortName.Sortby == Convert.ToByte(1))
                            {
                                Shortby = lstReportColumn.Where(x => x.ColumnId == shortName.Column_Id).Select(y => y.ColumnName).FirstOrDefault();
                            }

                            if (lstReportColumn.Where(x => x.ColumnId == shortName.Column_Id).Select(y => y.ColumnName).FirstOrDefault().Contains("Date"))
                            {
                                lstformat.Add(lstReportColumn.Where(x => x.ColumnId == shortName.Column_Id).Select(y => y.ColumnName).FirstOrDefault() + "_" + shortName.Format);

                            }
                            if (lstReportColumn.Where(x => x.ColumnId == shortName.Column_Id).Select(y => y.ColumnName).FirstOrDefault().Contains("Gender"))
                            {
                                lstformat.Add(lstReportColumn.Where(x => x.ColumnId == shortName.Column_Id).Select(y => y.ColumnName).FirstOrDefault() + "_" + shortName.Format);

                            }
                            if (shortName.Wrap == Convert.ToByte(1))
                            {
                                lstWrap.Add(lstReportColumn.Where(x => x.ColumnId == shortName.Column_Id).Select(y => y.ColumnName).FirstOrDefault());
                            }



                        }



                        //string[] cols = Columns.TrimEnd(',').Split(',');
                        //string[] colsindex = ColumnsIndex.TrimEnd(',').Split(',');

                        string str = "";
                        string str1 = "";
                      //  DataTable dt = new DataTable("ReportTable");


                        if (ReportModule != null)
                        {


                            if (ReportModule.Report_Module_Name == "Teacher")
                            {


                                var items = new List<int>(new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 });

                                string H1 = "Sr.No", H2 = "Teacher Name", H3 = "Contact No", H4 = "Address", H5 = "Gender", H6 = "Marital Status", H7 = "Join Date", H8 = "Leave Date", H9 = "Physically Challenged ", H10 = "Photo", H11 = "EmailId", H12 = "EmployeeId", H13 = "Group", H14 = "Religion", H15 = "Cast Category", H16 = "Cast", H17 = "Designation", H18 = "Service Category", H19 = "Anniversary Date", H20 = "Education";

                                #region trimdata
                                List<int> lstBoardStageId = new List<int>();
                                if (BoardStageId != "" || BoardStageId != null)
                                {
                                    string[] BSId = BoardStageId.TrimEnd(',').Split(',');



                                    for (int i = 0; i <= BSId.Count() - 1; i++)
                                    {
                                        if (BSId[i] != "")
                                            lstBoardStageId.Add(Convert.ToInt32(BSId[i]));
                                    }

                                }

                                List<int> lstShiftId = new List<int>();
                                if (ShiftId != "" || ShiftId != null)
                                {
                                    string[] ShiftIDs = ShiftId.TrimEnd(',').Split(',');



                                    for (int i = 0; i <= ShiftIDs.Count() - 1; i++)
                                    {
                                        if (ShiftIDs[i] != "")
                                            lstShiftId.Add(Convert.ToInt32(ShiftIDs[i]));
                                    }
                                }

                                List<int> lstClassDivisionId = new List<int>();
                                if (ClassDivisionId != "" || ClassDivisionId != null)
                                {
                                    string[] classDiv = ClassDivisionId.TrimEnd(',').Split(',');



                                    for (int i = 0; i <= classDiv.Count() - 1; i++)
                                    {
                                        if (classDiv[i] != "")
                                            lstClassDivisionId.Add(Convert.ToInt32(classDiv[i]));
                                    }

                                }
                                List<int> lstSubjects = new List<int>();
                                //if (Subjects != "" || Subjects != null)
                                //{
                                    string[] subjs = Subjects.TrimEnd(',').Split(',');

                                    for (int i = 0; i <= subjs.Count() - 1; i++)
                                    {
                                        if (subjs[i] != "")
                                            lstSubjects.Add(Convert.ToInt32(subjs[i]));
                                    }

                                //}


                                #endregion trimdata

                                List<ReportTecaherDetails> resultTeacher = new List<ReportTecaherDetails>();


                                resultTeacher = TeacherDomain.GetReportTeacher1(board.Board_Id, lstBoardStageId, lstShiftId, lstSubjects, lstClassDivisionId, Shortby, lstformat, yearid);

                                float[] widthArry = new float[20];
                                float widthCount = 0;



                                for (int i = 0; i < ColWidth.Count; i++)
                                {

                                    widthArry[i] = ColWidth[i];
                                    widthCount += ColWidth[i];

                                }

                                widthArry = widthArry.Where(x => x != 0).ToArray();

                                table = new PdfPTable(widthArry);
                                table.TotalWidth = 550f;
                                table.LockedWidth = true;
                                table.SetWidths(widthArry);

                                #region CheckHeaderText
                                foreach (var HeaderText in lstRptempcol)
                                {
                                    //code for headerText
                                }
                                #endregion CheckHeaderText

                                int Srno = 1;
                                int count = 0;

                                for (int a = 0; a < colindexid.Count; a = a + 1)
                                {

                                    if (colindexid.Contains(Convert.ToInt32(a.ToString())))
                                    {
                                        #region addcolumnHeadeName
                                        if (a.ToString() == Convert.ToString(0))
                                        {
                                            // dt.Columns.Add(new DataColumn(H1, typeof(string)));
                                            phrase = new Phrase();
                                            phrase.Add(new Chunk(H1, FontFactory.GetFont("Arial Unicode MS,Arial", 8, iTextSharp.text.Font.BOLD, iTextSharp.text.Color.BLACK)));
                                            cell = PhraseCell(phrase, PdfPCell.ALIGN_CENTER);
                                            cell.BorderColor = new iTextSharp.text.Color(229, 229, 229);
                                            cell.FixedHeight = 10f;
                                            table.AddCell(cell);
                                        }
                                        else if (a.ToString() == Convert.ToString(1))
                                        {
                                            // dt.Columns.Add(new DataColumn(H1, typeof(string)));
                                            phrase = new Phrase();
                                            phrase.Add(new Chunk(H2, FontFactory.GetFont("Arial Unicode MS,Arial", 8, iTextSharp.text.Font.BOLD, iTextSharp.text.Color.BLACK)));
                                            cell = PhraseCell(phrase, PdfPCell.ALIGN_CENTER);
                                            cell.BorderColor = new iTextSharp.text.Color(229, 229, 229);
                                            cell.FixedHeight = 10f;
                                            table.AddCell(cell);
                                        }
                                        // .... else if{}  same as above
                                        #endregion addcolumnHeadeName
                                    }                                    
                                }

                               document.Add(table);

                                secondTable = new PdfPTable(widthArry);
                                secondTable.TotalWidth = 550f;
                                secondTable.LockedWidth = true;
                                secondTable.SetWidths(widthArry);

                                foreach (var item in resultTeacher)
                                {


                                    #region rowadd

                                    if (colindexid.Contains(Convert.ToInt32(0)))
                                    {
                                        phrase = new Phrase();
                                        phrase.Add(new Chunk(Convert.ToString(Srno), FontFactory.GetFont("Arial Unicode MS,Arial", 8, iTextSharp.text.Font.BOLD, iTextSharp.text.Color.BLACK)));
                                        secondTableCell = PhraseCell(phrase, PdfPCell.ALIGN_CENTER);
                                        secondTableCell.BorderColor = new iTextSharp.text.Color(229, 229, 229);
                                        secondTableCell.FixedHeight = 50f;
                                        secondTable.AddCell(secondTableCell);
                                    }
                                    else
                                    {

                                    }
                                     // .... if{} same as above
                                    #endregion rowadd
                                    Srno++;



                                }


                                document.Add(secondTable);

                            }

                        }



                        #endregion ReportBind                      

                        filename = filename + now.Hour.ToString("00") + now.Minute.ToString("00") + now.Second.ToString("00") + now.Millisecond.ToString() + now.DayOfYear.ToString("000") + now.Day.ToString("00") + now.Month.ToString("00") + now.Year.ToString("0000") + ".pdf";
                        document.Close();
                        byte[] bytes = memoryStream.ToArray();
                        memoryStream.Close();
                        Response.Clear();
                        Response.ContentType = "application/pdf";
                        Response.AddHeader("Content-Disposition", "attachment; filename=" + filename + "");
                        Response.ContentType = "application/pdf";
                        Response.Buffer = true;
                        Response.Cache.SetCacheability(HttpCacheability.NoCache);
                        Response.BinaryWrite(bytes);
                        Response.End();
                        Response.Close();


                    }

                    return View();
                }
                else
                {
                    return Redirect(BaseUrl);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

你可以试试

Image.ScaleToFitLineWhenOverflow = false;

请参阅SO答案# 在Itextsharp表中设置分页

我以前曾遇到过这个问题,但是我能提出的唯一解决方案是确定现在在一个页面上可以容纳许多行而不会弄乱布局,并且我添加了许多表格来将所有行放入文档中。

如评论中所述(@Bruno Lowagie)iTextSharp DOES提供了一种控制表分页的机制。

我相信它的正确答案是: iTextSharp的页眉,页脚和大表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM