如何在呈现为PDF时正确地保留HTML表格? [英] How to keep HTML tables properly alligned while rendering to PDF?

查看:94
本文介绍了如何在呈现为PDF时正确地保留HTML表格?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望在使用Itextsharp渲染为PDF时保持html表格正确对齐。表格内容是垂直的,而不是左右两个表格,而是以PDF格式呈现,以此类推。



以下是我的HTML代码:

I want to keep html tables properly alligned while rendering to PDF using Itextsharp. The table contents are coming vertically instead of coming horizontally for 2 tables left and right and so on while rendering in PDF.

Below is my html code:

<div style="width: 760px">
        
    <table width="760px"><tbody><tr><td align="center">
             <asp:Panel ID="pnlGridExport" runat="server" Width="820px" Visible="false">
            <table border="1" style="font-family: Arial; font-size: 10pt; width: 400px; float: left" align="left"><tbody><tr><td colspan="2" style="height: 18px; color: black">
                        Outward
                    </td></tr><tr><td>No: of OCEs</td><td><asp:Label ID="lblOCECount" runat="server"></td></tr><tr><td>Amount</td><td><asp:Label ID="lblOCEAmount" runat="server"></td></tr><tr><td style="color: blue">CR</td></tr></tbody></table>
            <table border="1" style="font-family: Arial; font-size: 10pt; width: 400px; float: right" align="right"><tbody><tr><td colspan="2" style="height: 18px; color: black">
                        Inward</td></tr><tr><td>No: of ICEs</td><td><asp:Label ID="lblICECount" runat="server"></td></tr><tr><td>Amount</td><td><asp:Label ID="lblICEAmount" runat="server"></td></tr><tr><td style="color: red">DR</td></tr></tbody></table>
              
            <table border="1" style="font-family: Arial; font-size: 10pt; width: 400px; float: left" align="left"><tbody><tr><td colspan="2" style="height: 18px; color: black">
                        Outward
                    Return</td></tr><tr><td>No: of IREs</td><td><asp:Label ID="lblIRECount" runat="server"></td></tr><tr><td>Amount</td><td><asp:Label ID="lblIREAmount" runat="server"></td></tr><tr><td style="color: red">DR</td></tr></tbody></table>
            <table border="1" style="font-family: Arial; font-size: 10pt; width: 400px; float: right" align="right"><tbody><tr><td colspan="2" style="height: 18px; color: black">
                        Inward</td></tr><tr><td>No: of RCEs</td><td><asp:Label ID="lblRCECount" runat="server"></td></tr><tr><td>Amount</td><td><asp:Label ID="lblRCEAmount" runat="server"></td></tr><tr><td style="color: blue">CR</td></tr></tbody></table>
            <table border="1" style="font-family: Arial; font-size: 10pt; width: 400px; float: left" align="left"><tbody><tr><td colspan="2" style="height: 18px; color: black">
                        Net of Outward</td></tr><tr><td>No: of Recods</td><td><asp:Label ID="lblNetOutwardRecords" runat="server"></td></tr><tr><td>Amount</td><td><asp:Label ID="lblNetOutwardAmount" runat="server"></td></tr><tr><td style="color: blue">CR</td></tr></tbody></table>
            <table border="1" style="font-family: Arial; font-size: 10pt; width: 400px; float: right" align="right"><tbody><tr><td colspan="2" style="height: 18px; color: black">
                        Net of Inward</td></tr><tr><td>No: of Records</td><td><asp:Label ID="lblNetInwardRecords" runat="server"></td></tr><tr><td>Amount</td><td><asp:Label ID="lblNetInwardAmount" runat="server"></td></tr><tr><td style="color: red">DR</td></tr></tbody></table>          
            <table border="1" style="font-family: Arial; font-size: 10pt; width: 400px" align="center"><tbody><tr><td colspan="2" style="height: 18px; color: black">
                        Net Amount</td><td colspan="2" style="height: 18px; color: black">
                       <asp:Label ID="lblNetAmount" runat="server"></td></tr></tbody></table>
            </td></tr></tbody></table>
</div>





What I have tried:



I am rendering PDF File via Itextsharp dll. Code to render the same to PDF are as below:



What I have tried:

I am rendering PDF File via Itextsharp dll. Code to render the same to PDF are as below:

#region View PDF Report
/// <summary>
/// populate the report using the search criteria.
/// 
private void ViewPDFReport()
{
    try
    {

        BLL_MISReports objMisReport = new BLL_MISReports();
        DateTime FromDate = DateTime.ParseExact(txtFromDate.Value.Trim(), "dd/MM/yyyy", CultureInfo.InvariantCulture);
        DateTime ToDate = DateTime.ParseExact(txtToDate.Value.Trim(), "dd/MM/yyyy", CultureInfo.InvariantCulture);
        DataSet ds = objMisReport.BusinessDaySettlementReport(FromDate, ToDate, Convert.ToInt32(Session["USER"].ToString()));

        DataTable dt = new DataTable();
        if (ds.Tables[0].Rows.Count > 0)
        {
            dt = ds.Tables[0];
            pnlGridExport.Visible = true;
            //Bind Datatable to Labels
            lblOCECount.Text = dt.Rows[0]["OCERecordCount"].ToString();
            lblOCEAmount.Text = dt.Rows[0]["OCEAmount"].ToString();

            lblICECount.Text = dt.Rows[0]["ICERecordCount"].ToString();
            lblICEAmount.Text = dt.Rows[0]["ICEAmount"].ToString();

            lblIRECount.Text = dt.Rows[0]["RCERecordCount"].ToString();
            lblIREAmount.Text = dt.Rows[0]["IREAmount"].ToString();

            lblRCECount.Text = dt.Rows[0]["RCERecordCount"].ToString();
            lblRCEAmount.Text = dt.Rows[0]["RCEAmount"].ToString();


            lblNetOutwardRecords.Text = dt.Rows[0]["NetOutWardRecordCount"].ToString();
            lblNetOutwardAmount.Text = dt.Rows[0]["NetOutWardAmount"].ToString();


            lblNetInwardRecords.Text = dt.Rows[0]["NetInWardRecordCount"].ToString();
            lblNetInwardAmount.Text = dt.Rows[0]["NetInWardAmount"].ToString();


            lblNetAmount.Text = dt.Rows[0]["NetAmount"].ToString();

            Response.ContentType = "application/pdf";
            Response.AddHeader("content-disposition", "attachment;filename=BusinessDaySummary_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".pdf");
            //Response.Cache.SetCacheability(HttpCacheability.NoCache);
            StringWriter sw = new StringWriter();
            HtmlTextWriter hw = new HtmlTextWriter(sw);

            pnlGridExport.RenderControl(hw);
            // grdExport.HeaderStyle.Width = "1";
            // grdExport.HeaderRow.Style.Add("font-size", "10px");
            //pnlGridExport.Style.Add("text-decoration", "none");
            //pnlGridExport.Style.Add("font-family", "Arial, Helvetica, sans-serif;");
            //pnlGridExport.Style.Add("font-size", "8px");
            //string strHead = strReportHeading + " FOR USER " + drdUserId.SelectedItem.Text.ToString();
            string strHead = strReportHeading;
            StringBuilder strbn = new StringBuilder();
            string Imagepath = Common.SITE_URL + "loginLogo.jpg";
            strbn.Append("<div style="float: right"></div> <span style="float: right; text-align: right; font-weight: bold">Date:" + DateTime.Today.ToString("dd-MMM-yyyy") + "</span><div style="text-align: center; font-weight: bold; background-color: White; width: 100%; font-size: 20px; text-decoration: underline"> " + strHead + "</div> <br>");
            strbn.Append(sw.ToString());
            StringReader sr = new StringReader(strbn.ToString());
            //Document pdfDoc = new Document(PageSize.A2, 7f, 7f, 7f, 0f);
            Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f);
            HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
            PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
            pdfDoc.Open();
            htmlparser.Parse(sr);
            pdfDoc.Close();
            Response.Flush();
            Response.Write(pdfDoc);
            Response.Flush();
            Response.Close();
        }
        else
        {
            pnlGridExport.Visible = false;
            Common.showMessage("No Records Found", this);
            return;
        }


    }
    catch (Exception ex)
    {
        Common.handleErrorLog(ex);
    }
}
#endregion

推荐答案

<pre lang="c#"><pre lang="c#"><pre lang="c#"><pre lang="c#">

You try to pdf table concept using this type of code



You try to pdf table concept using this type of code

      public string AssessmentInfopdfTwo(EntityStudentAssessment oStudentAssmInfo)
        {

            var FontColour = new BaseColor(181, 171, 134);
            var innerColour = new BaseColor(204, 197, 166);
            var tblwidth = 550f;
   FontFactory.RegisterDirectories();
            Font Defaultfont = new Font(FontFactory.GetFont("helvetica", 9, Font.NORMAL));
            Font MainHeading = new Font(FontFactory.GetFont("helvetica", 16, Font.BOLD));
            Font SubHeading = new Font(FontFactory.GetFont("helvetica", 14, Font.NORMAL));
            Font DateHeading = new Font(FontFactory.GetFont("helvetica", 12, Font.NORMAL));
            Font ExamDateHeading = new Font(FontFactory.GetFont("helvetica", 14, Font.NORMAL));
            Font PageHeading = new Font(FontFactory.GetFont("helvetica", 16, Font.BOLD));
            Font TableHeading = new Font(FontFactory.GetFont("helvetica", 9, Font.BOLD));
            Font TableContent = new Font(FontFactory.GetFont("helvetica", 9, Font.NORMAL));
            Font TableQualitativeContent = new Font(FontFactory.GetFont("helvetica", 8, Font.ITALIC));
iTextSharp.text.Font Default = Defaultfont; //for Document Header


            string PdfName = "schloud" + DateTime.Now.Ticks + ".pdf";
           Document doc = new Document(iTextSharp.text.PageSize.A4, 5, 5, 50, 25);
            string pdfFilePath = Server.MapPath("\\Temp\\");
            PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream(pdfFilePath + PdfName, FileMode.Create));
            doc.Open();
            iTextSharp.text.Image jpg = iTextSharp.text.Image.GetInstance(Server.MapPath("../../Img/logo/ReportLogo.png"));
            iTextSharp.text.Image footerlogo = iTextSharp.text.Image.GetInstance(Server.MapPath("../../Img/logo/footerlogo.png"));

            float[] FirstPage = new float[2];
            FirstPage[0] = 65f;
            FirstPage[1] = 265f;

            PdfPTable dammy = new PdfPTable(1);
            PdfPCell Dummycell = new PdfPCell(new Phrase("  ", Defaultfont));
            Dummycell.BorderWidth = 0;
            dammy.AddCell(Dummycell);
            doc.Add(dammy);

            PdfPTable schooldetails = new PdfPTable(2);
            schooldetails.TotalWidth = 550f;
            schooldetails.LockedWidth = true;
            schooldetails.DefaultCell.BackgroundColor = FontColour;
            schooldetails.SetWidths(FirstPage);
            jpg.ScaleAbsolute(65f, 85f);
            PdfPCell Schoollogo = new PdfPCell(jpg);
            Schoollogo.Left = 0;
            Schoollogo.PaddingLeft = 0;
            Schoollogo.BorderWidth = 0;
            Schoollogo.BackgroundColor = FontColour;
            Schoollogo.HorizontalAlignment = Element.ALIGN_LEFT;
            schooldetails.AddCell(Schoollogo);

            PdfPTable schoolNameDetails = new PdfPTable(1);
            schoolNameDetails.TotalWidth = 550f;
            schoolNameDetails.DefaultCell.BackgroundColor = FontColour;
            PdfPCell SchoolName = new PdfPCell(new Phrase(" International", MainHeading));
            SchoolName.BorderWidth = 0;
            SchoolName.PaddingTop = 5f;
            SchoolName.PaddingBottom = 5f;
            SchoolName.PaddingLeft= 0;
            schoolNameDetails.AddCell(SchoolName);
 PdfPCell SchoolCenter = new PdfPCell(new Phrase("  CENTRE NO: 10721", ExamDateHeading));
            SchoolCenter.BorderWidth = 0;
            SchoolCenter.PaddingTop = 10f;
            SchoolCenter.PaddingBottom = 5f;
            SchoolCenter.PaddingLeft = 5f;
            schoolNameDetails.AddCell(SchoolCenter);

             PdfPCell SchoolTable = new PdfPCell(schoolNameDetails);
              SchoolTable.BorderWidth = 0;
         
              SchoolTable.BackgroundColor = FontColour;
              schooldetails.AddCell(SchoolTable);
              doc.Add(schooldetails);
float[] SubjecttableWidths = new float[4];
            SubjecttableWidths[0] = 80f;
            SubjecttableWidths[1] = 80f;
            SubjecttableWidths[2] = 40f;
            SubjecttableWidths[3] = 40f;
          //  SubjecttableWidths[4] = 200f;

            PdfPTable SubjectTableRight = new PdfPTable(4);

            SubjectTableRight.TotalWidth = 260f;
            SubjectTableRight.LockedWidth = true;
            SubjectTableRight.SetWidths(SubjecttableWidths);



            //subject table Head cells
            PdfPCell Subject = new PdfPCell(new Phrase("SUBJECTS", TableHeading)) { HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE };
            Subject.Padding = 10f;
            Subject.BackgroundColor = FontColour;
            SubjectTableRight.AddCell(Subject);
            PdfPCell Personnal = new PdfPCell(new Phrase("FACILITATOR", TableHeading)) { HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, BackgroundColor = FontColour };
            SubjectTableRight.AddCell(Personnal);
            PdfPCell Mark = new PdfPCell(new Phrase("%MARK", TableHeading)) { HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, BackgroundColor = FontColour };
            SubjectTableRight.AddCell(Mark);
            PdfPCell Grade = new PdfPCell(new Phrase("GRADE", TableHeading)) { HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, BackgroundColor = FontColour };
            SubjectTableRight.AddCell(Grade);
            SubjectTableRight.SpacingBefore = 10;


            PdfPTable SubjectTableLeft = new PdfPTable(4);

            SubjectTableLeft.TotalWidth = 260f;
            SubjectTableLeft.LockedWidth = true;
            SubjectTableLeft.SetWidths(SubjecttableWidths);

            //subject table Head cells
            PdfPCell Subject1 = new PdfPCell(new Phrase("SUBJECTS", TableHeading)) { HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE };
            Subject1.Padding = 10f;
            Subject1.BackgroundColor = FontColour;
            SubjectTableLeft.AddCell(Subject1);
            PdfPCell Personnal1 = new PdfPCell(new Phrase("FACILITATOR", TableHeading)) { HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, BackgroundColor = FontColour };
            SubjectTableLeft.AddCell(Personnal1);
            PdfPCell Mark1 = new PdfPCell(new Phrase("%MARK", TableHeading)) { HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, BackgroundColor = FontColour };
            SubjectTableLeft.AddCell(Mark1);
            PdfPCell Grade1 = new PdfPCell(new Phrase("GRADE", TableHeading)) { HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, BackgroundColor = FontColour };
            SubjectTableLeft.AddCell(Grade1);
          
            SubjectTableLeft.SpacingBefore = 10;

<pre>
            if (oStudentAssmInfo.oExamList.Count() > 0)
            {
                int i = 0;
                foreach (EntitySubject oProj in oStudentAssmInfo.oSubjectList)
                {
                    i++;
                    int index = oStudentAssmInfo.oExamList.FindIndex(f => f.oSubject.SubjectId == oProj.SubjectId);
                    if (index >= 0)
                    {
                        EntityExam oExam = oStudentAssmInfo.oExamList.Where(c => c.oSubject.SubjectId == oProj.SubjectId).First();
                        PdfPCell Subjects = new PdfPCell();
                        Subjects = new PdfPCell(new Phrase(oExam.oSubject.SubjectName, TableHeading));
                        Subjects.BackgroundColor = FontColour;
                        Subjects.VerticalAlignment = Element.ALIGN_MIDDLE;
                        Subjects.Padding = 10f;
                        PdfPCell persannals = new PdfPCell();
                        persannals = new PdfPCell(new Phrase(oExam.oStaff.FullName, Defaultfont));
                        persannals.VerticalAlignment = Element.ALIGN_MIDDLE;


                        PdfPCell Marks = new PdfPCell();
                        if (oExam.TotalMark != "-1")
                        {
                            Marks = new PdfPCell(new Phrase(oExam.TotalMark, Defaultfont));
                        }
                        else
                        {
                            Marks = new PdfPCell(new Phrase("absent", Defaultfont));
                        }
                        Marks.VerticalAlignment = Element.ALIGN_MIDDLE;
                        Marks.HorizontalAlignment = Element.ALIGN_CENTER;


                        PdfPCell Grades = new PdfPCell();
                        Grades = new PdfPCell(new Phrase(oExam.Grade, Defaultfont));
                        Grades.HorizontalAlignment = Element.ALIGN_CENTER;
                        Grades.VerticalAlignment = Element.ALIGN_MIDDLE;



                        PdfPCell Remarks = new PdfPCell();
                        Remarks = new PdfPCell(new Phrase(oExam.Remarks, Defaultfont));
                        Remarks.ExtraParagraphSpace = 5f;
                        Remarks.VerticalAlignment = Element.ALIGN_MIDDLE;
                        if (i % 2 == 0)
                        {
                            SubjectTableRight.AddCell(Subjects);
                            SubjectTableRight.AddCell(persannals);
                            SubjectTableRight.AddCell(Marks);
                            SubjectTableRight.AddCell(Grades);
                            //SubjectTableRight.AddCell(Remarks);
                        }
                        else
                        {

                            SubjectTableLeft.AddCell(Subjects);
                            SubjectTableLeft.AddCell(persannals);
                            SubjectTableLeft.AddCell(Marks);
                            SubjectTableLeft.AddCell(Grades);
                        }
                    }
                    else
                    {
                        PdfPCell Subjects = new PdfPCell();
                        Subjects = new PdfPCell(new Phrase(oProj.SubjectName, TableHeading));
                        Subjects.BackgroundColor = FontColour;
                        Subjects.VerticalAlignment = Element.ALIGN_MIDDLE;
                        Subjects.Padding = 10f;
                        if (i % 2 == 0)
                        {
                            SubjectTableRight.AddCell(Subjects);
                            SubjectTableRight.AddCell(new PdfPCell(new Phrase(" ", Defaultfont)) { Padding = 3f, BackgroundColor = innerColour });
                            SubjectTableRight.AddCell(new PdfPCell(new Phrase(" ", Defaultfont)) { Padding = 3f, BackgroundColor = innerColour });
                            SubjectTableRight.AddCell(new PdfPCell(new Phrase(" ", Defaultfont)) { Padding = 3f, BackgroundColor = innerColour });
                            //SubjectTableRight.AddCell(new PdfPCell(new Phrase(" ", Defaultfont)) { Padding = 3f, BackgroundColor = innerColour });
                        }
                        else
                        {
                            SubjectTableLeft.AddCell(Subjects);
                            SubjectTableLeft.AddCell(new PdfPCell(new Phrase(" ", Defaultfont)) { Padding = 3f, BackgroundColor = innerColour });
                            SubjectTableLeft.AddCell(new PdfPCell(new Phrase(" ", Defaultfont)) { Padding = 3f, BackgroundColor = innerColour });
                            SubjectTableLeft.AddCell(new PdfPCell(new Phrase(" ", Defaultfont)) { Padding = 3f, BackgroundColor = innerColour });
                        }
                    }
                }

            }
            else
            {
                SubjectTableRight.AddCell(" ");
                SubjectTableRight.AddCell("");
                SubjectTableRight.AddCell("");
                SubjectTableRight.AddCell("");

                SubjectTableLeft.AddCell(" ");
                SubjectTableLeft.AddCell("");
                SubjectTableLeft.AddCell("");
                SubjectTableLeft.AddCell("");
            }
 PdfPTable SubjectTableParent = new PdfPTable(2);
            SubjectTableParent.TotalWidth = 560f;
            SubjectTableParent.LockedWidth = true;
            SubjectTableParent.DefaultCell.Border = 0;
            SubjectTableParent.SpacingBefore = 10;
            SubjectTableParent.AddCell(SubjectTableRight);
            SubjectTableParent.AddCell(SubjectTableLeft);
            SubjectTableParent.SpacingAfter = 18;
            doc.Add(SubjectTableParent);
doc.Close();

            return PdfName;
}

        public ActionResult PrintAssessment()
        {

            EntityStudentAssessment oStudentAssmInfo = new BSNSTest().GetStudentWiseResult(Request.QueryString["StudentId"].ToString(), Request.QueryString["TestId"].ToString(), Request.QueryString["BatchId"].ToString());
            string file = "";
         
                file = AssessmentInfopdfTwo(oStudentAssmInfo);
          
            var fileStream = new FileStream(Server.MapPath("\\Temp\\" + file),
                                     FileMode.Open,
                                     FileAccess.Read
                                   );
            var fsResult = new FileStreamResult(fileStream, "application/pdf");
            return fsResult;




        }<pre lang="c#"><pre lang="c#">


这篇关于如何在呈现为PDF时正确地保留HTML表格?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆