0

hi i want to export a html table to pdf in asp.net with exact formatting of html table (means with style applied on html table).My code is

string html = Request.Form["Table_HTML"];
StringReader sr = new StringReader(html);
                Document pdfDoc = new Document(PageSize.A4.Rotate(), 2f, 2f, 2f, 2f);
                HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
                PdfWriter writer = PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
                pdfDoc.Open();  
                htmlparser.Parse(sr);
                pdfDoc.Close();
                Response.ContentType = "application/pdf";
                Response.AddHeader("content-disposition", "attachment;filename=Production_Report.pdf");
                Response.Cache.SetCacheability(HttpCacheability.NoCache);
                Response.Write(pdfDoc);
                Response.End();

    <div id="dvTable"> 
    <table style="border:1px solid red;">
    <tr><td colspan="2" style="border:1px solid red;"></td><td>Hours</td><td>Studies</td><td>Hrs/Studies</td></tr>
    <tr><td rowspan="3">APAC</td><td>Scripting</td><td><%=APAC_h_scri%></td><td><%=APAC_s_scri%></td><td><%=APAC_a_scri %></td></tr>
    <tr><td>DP</td><td><%=APAC_h_DP%></td><td><%=APAC_s_DP%></td><td><%=APAC_a_DP %></td></tr>
    <tr><td>Tabs</td><td><%=APAC_h_Tab%></td><td><%=APAC_s_Tab%></td><td><%=APAC_a_Tab%></td></tr>
    </table>
    </div>

but i am unable to export table with formatting. my table looks like enter image description here

after exporting in pdf it looks like enter image description here

my query is that i need formatting same like as in html table at least border of the table.

Sukhvindra Singh
  • 200
  • 2
  • 14

1 Answers1

0

Same Problem I have faced in one of the project.

Use this logic for make proper alignment for html document

        var pagesize = new iTextSharp.text.Rectangle(iTextSharp.text.PageSize.A4);

        //Set Background color of pdf    
        pagesize.BackgroundColor = iTextSharp.text.BaseColor.WHITE;

        var left_margin = 25;
        var top_margin = 25;
        var bottom_margin = 25;

        iTextSharp.text.Document doc = new iTextSharp.text.Document(pagesize, left_margin, 10, top_margin, bottom_margin);

        string filePath = "D:\\myTask\\";
        string tempFileName = "tempXmlToWebPdf.pdf";
        string finalFileName = "XmlToWebPdf.pdf";

        string tempFilePath = filePath + tempFileName;
        string finalFilePath = filePath + finalFileName;


        if (!Directory.Exists(filePath))
        {
            Directory.CreateDirectory(filePath);
        }

        try
        {

            PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(tempFilePath, FileMode.Create));

            iTextSharp.text.Font mainFont = new iTextSharp.text.Font();
            iTextSharp.text.Font boldFont = new iTextSharp.text.Font();

            mainFont = FontFactory.GetFont("Arial", 10, iTextSharp.text.Font.NORMAL, new iTextSharp.text.BaseColor(System.Drawing.ColorTranslator.FromHtml("#000000")));
            boldFont = FontFactory.GetFont("Arial", 12, iTextSharp.text.Font.BOLD);

            Paragraph para = new Paragraph();

            // Read in the contents of the Receipt.htm file...
            string contents = System.IO.File.ReadAllText(Server.MapPath("~/Design/Template.html"));

            // Replace the placeholders with the user-specified text
            contents = contents.Replace("@FirstName", Model.FirstName);
            contents = contents.Replace("@CourseName", Model.CourseName);
            contents = contents.Replace("@Score", Convert.ToString(Model.Score));
            string date = DateTime.Now.Day + "/" + DateTime.Now.Month + "/" + DateTime.Now.Year;
            contents = contents.Replace("@Date", date);
            contents = contents.Replace("@Path1", Server.MapPath("~/Content/Frontendcss/assets/Icon/elearning-logo.png").ToString());
            contents = contents.Replace("@Path2", Server.MapPath("~/Content/Frontendcss/assets/images/x.jpg").ToString());


            doc.Open();

            var titleFont = FontFactory.GetFont("Arial", 18, Font.BOLD);
            var subTitleFont = FontFactory.GetFont("Arial", 14, Font.BOLD);
            var boldTableFont = FontFactory.GetFont("Arial", 12, Font.BOLD);
            var endingMessageFont = FontFactory.GetFont("Arial", 10, Font.ITALIC);
            var bodyFont = FontFactory.GetFont("Arial", 12, Font.NORMAL);

            var parsedHtmlElements = HTMLWorker.ParseToList(new StringReader(contents), null);

            // Enumerate the elements, adding each one to the Document...
            foreach (var htmlElement in parsedHtmlElements)
                doc.Add(htmlElement as IElement);

            //var logo = iTextSharp.text.Image.GetInstance(Server.MapPath("~/Content/Frontendcss/assets/Icon/elearning-logo.png"));
            //logo.SetAbsolutePosition(20, 20);
            //doc.Add(logo);

            //doc.Add(new Paragraph("Northwind Traders Receipt", titleFont));


            //var orderInfoTable = new PdfPTable(2);
            //orderInfoTable.HorizontalAlignment = 0;
            //orderInfoTable.SpacingBefore = 10;
            //orderInfoTable.SpacingAfter = 10;
            //orderInfoTable.DefaultCell.Border = 0;
            //orderInfoTable.SetWidths(new int[] { 1, 4 });

            //orderInfoTable.AddCell(new Phrase("Order:", boldTableFont));
            //orderInfoTable.AddCell(Model.CourseName);
            //orderInfoTable.AddCell(new Phrase("Price:", boldTableFont));
            //orderInfoTable.AddCell(Convert.ToString(Model.Score));

            //doc.Add(orderInfoTable);

            doc.Close();

        }
        catch (Exception Ex)
        {
            throw Ex;
        }


        Response.AddHeader("Content-Disposition", "attachment;filename=eLearningCertificate.pdf");
        Response.ContentType = "application/pdf";
        Response.TransmitFile(tempFilePath);
        Response.End();

I am sure this will works for you!

Unknown_Coder
  • 764
  • 6
  • 24
  • hi codes working fine. i am getting same result by your code as i am getting by my code. but my problem is that when i am exporting pdf then i got table without formatting as i mention in images. I need formatting in exported table in pdf as like as html table. – Sukhvindra Singh Apr 19 '17 at 07:08
  • Yes, I got your problem. You can Store your HTML file in separate folder. Apply css to give proper allignment and then run code which is provided by me. – Unknown_Coder Apr 19 '17 at 07:10
  • Sukhvindra, did you got your answer ? i am also looking for the same – Ravindra Jan 06 '20 at 08:15