2017-04-19 3 views
0

Salut, je veux exporter un tableau HTML au format PDF en asp.net avec la mise en forme exacte de la table html (signifie avec style appliqué sur la table html) Code .Mon estincapable d'exporter le tableau HTML au format PDF avec la mise en forme exacte

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> 

mais je suis incapable d'exporter la table avec le formatage. ma table ressemble enter image description here

après l'exportation en pdf il ressemble enter image description here

ma requête est que je besoin d'être formaté même comme comme dans le tableau html au moins bordure de la table.

+0

Jetez un coup d'oeil à ceci [http://stackoverflow.com/questions/19877873/export-html-to-pdf-in-asp-net?rq=1](http://stackoverflow.com/questions/ 19877873/export-html-en-pdf-in-asp-net? Rq = 1) – TheRuler

+0

Veuillez ne pas utiliser 'HTMLWorker'. Utilisez 'XMLWorker' à la place. –

Répondre

0

Même problème que j'ai rencontré dans l'un des projets.

Utilisez cette logique pour faire un bon alignement pour le document html

 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(); 

Je suis sûr que cela fonctionne pour vous!

+0

salut codes fonctionnant bien. J'obtiens le même résultat par votre code que je reçois par mon code. mais mon problème est que quand j'exporte pdf alors j'ai eu la table sans formatage comme je mentionne dans les images. J'ai besoin de mise en forme dans la table exportée en pdf comme comme table html. –

+0

Oui, j'ai votre problème. Vous pouvez stocker votre fichier HTML dans un dossier séparé. Appliquez css pour donner un bon alignement, puis exécutez le code qui est fourni par moi. –