HTML to PDF convert using Aspose.Pdf-iTextSharp


    private string ExportGridToPDF(string id) { try { string Err = string.Empty; DataTable dt = (DataTable)Session["Data"]; var imageUrl = ""; StringBuilder sb = new StringBuilder(); string baseUrl = Request.Url.Scheme + "://" + Request.Url.Authority + Request.ApplicationPath.TrimEnd('/') + "/"; var seblLogo = baseUrl + "/img/sebl.png"; sb.Append(""); if (dt.Rows.Count > 0) { sb = new StringBuilder(); sb.Append("<header class='clearfix' style='padding:50px'>"); sb.Append("<div id='bodyproject' >"); sb.Append("<table width='700px' >"); sb.Append("<tr>"); sb.Append("<td style='vertical-align: top; ' width='130px' height='100px'> <span style='padding-top: -25px;font-weight: normal;font-size: 11px;'></span>"); sb.Append("<div style='opacity: 0.5;'><img style='opacity: 0.5' src='" + seblLogo + "' width='40' height='40' alt='logo'/> </div>"); sb.Append("</td>"); sb.Append("<td width='500px' style='vertical-align: top;text-align: center' height='100px'><span style='font-weight: normal;font-size: 11px;'></span>"); sb.Append("<div style='font-size: 14px;font-weight: bold;'>COMPANY NAME</div>"); sb.Append("<div style='font-size: 14px;font-weight: bold;'>DIVISION</div>"); sb.Append("<div style='font-size: 12px; font-weight: bold;'> HEAD OFFICE, DHAKA</div>"); sb.Append("<div style='font-size: 12px;font-weight: bold;' >APPLICATION FORM</div>"); sb.Append("<div style='font-size: 12px;font-weight: normal;'>Instruction Id:" + dt.Rows[0]["batch_id"].ToString() + "</div>"); sb.Append("<div style='font-size: 12px;'>Created Date:" + dt.Rows[0]["create_date"].ToString() + "</div>"); sb.Append("</td>"); sb.Append("<td width='50px' height='100px'> <span style='font-weight: normal;font-size: 11px;'></span>"); sb.Append("</td>"); sb.Append("</tr>"); sb.Append("</table >"); sb.Append("<div id='company' >"); sb.Append("</div>"); sb.Append("</div>"); sb.Append("</header>"); sb.Append("<main>"); sb.Append("<div id='bodyprojectc'>"); sb.Append("<div><span style='font-weight: bold;font-size: 12px;'>Applicant's(Remitter) Information</span> </div>"); sb.Append("<table >"); sb.Append("<tr>"); sb.Append("<td width='150px' height='30px'> <span style='font-weight: normal;font-size: 11px;'>Name of Applicant :</span>"); sb.Append("</td>"); sb.Append("<td width='160px' height='30px'><span style='font-weight: normal;font-size: 11px;'>" + dt.Rows[0]["applicant_name"].ToString() + "</span>"); sb.Append("</td>"); sb.Append("<td width='80px' height='30px'>"); sb.Append("</td>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>Your Reference No :</span>"); sb.Append("</td>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>" + dt.Rows[0]["reference_no"].ToString() + "</span>"); sb.Append("</td>"); sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>Debit A/C No:</span>"); sb.Append("</td>"); sb.Append("<td width='160px' height='30px'><span style='font-weight: normal;font-size: 11px;'>("+ dt.Rows[0]["debit_account_currency"].ToString() + ") " + dt.Rows[0]["debit_accountno"].ToString() + "</span>"); sb.Append("</td>"); sb.Append("<td width='80px' >"); sb.Append("</td>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>Charge Debit A/C No:</span>"); sb.Append("</td>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>(" + dt.Rows[0]["charge_debit_accountno_currency"].ToString() + ") " + dt.Rows[0]["charge_debit_accountno"].ToString() + "</span>"); sb.Append("</td>"); sb.Append("</tr>"); sb.Append("</table>"); sb.Append("</div>"); sb.Append("<div id='bodyproject1'>"); sb.Append("<div><span style='font-weight: bold;font-size: 12px;'>Remittance Amount</span> </div>"); sb.Append("<table >"); sb.Append("<tr>"); sb.Append("<td width='150px' height='30px'> <span style='font-weight: normal;font-size: 11px;'>Currency of Remittance:</span>"); sb.Append("</td>"); sb.Append("<td width='160px' height='30px'><span style='font-weight: normal;font-size: 11px;'>" + dt.Rows[0]["currency_of_remittance"].ToString() + "</span>"); sb.Append("</td>"); sb.Append("<td width='80px' height='30px'>"); sb.Append("</td>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>Amount to be Remmitted:</span>"); sb.Append("</td>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>(" + dt.Rows[0]["amount_to_be_remitted_currency"].ToString() + ") " + dt.Rows[0]["amount_to_be_remitted_amount"].ToString() + "</span>"); sb.Append("</td>"); sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td width='160px' height='30px'><span style='font-weight: normal;font-size: 11px;'>Charge Type:</span>"); sb.Append("</td>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>" + dt.Rows[0]["charge_type"].ToString() + "</span>"); sb.Append("</td>"); sb.Append("<td width='80px' height='30px' >"); sb.Append("</td>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>Value Date:</span>"); sb.Append("</td>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>" + dt.Rows[0]["value_date"].ToString() + "</span>"); sb.Append("</td>"); sb.Append("</tr>"); sb.Append("</table>"); sb.Append("</div>"); sb.Append("<div id='bodyproject2'>"); sb.Append("<div><span style='font-weight: bold;font-size: 12px;'>Recipient's Information</span> </div>"); sb.Append("<table >"); sb.Append("<tr>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>Account No/BAN:</span>"); sb.Append("</td>"); sb.Append("<td width='160px' height='30px'><span style='font-weight: normal;font-size: 11px;'>" + dt.Rows[0]["beneficiary_accountno"].ToString() + "</span>"); sb.Append("</td>"); sb.Append("<td width='80px' height='30px'>"); sb.Append("</td>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>Bank Name:</span>"); sb.Append("</td>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>" + dt.Rows[0]["recipient_bank_name"].ToString() + "</span>"); sb.Append("</td>"); sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>Country:</span>"); sb.Append("</td>"); sb.Append("<td width='160px' height='30px'><span style='font-weight: normal;font-size: 11px;'>" + dt.Rows[0]["recipient_bank_country"].ToString() + "</span>"); sb.Append("</td>"); sb.Append("<td width='80px' height='30px'>"); sb.Append("</td>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>SWIFT/Clearing Code:</span>"); sb.Append("</td>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>" + dt.Rows[0]["recipient_bank_swift_code"].ToString() + "</span>"); sb.Append("</td>"); sb.Append("</tr>"); sb.Append("</table>"); sb.Append("<table > "); sb.Append("<tr>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>Address:</span>"); sb.Append("</td>"); sb.Append("<td width='350px' height='30px'><span style='font-weight: normal;font-size: 11px;'>" + dt.Rows[0]["recipient_bank_address"].ToString() + "</span>"); sb.Append("</td>"); //sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'></span>"); //sb.Append("</td>"); //sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'></span>"); //sb.Append("</td>"); sb.Append("</tr>"); sb.Append("</table>"); sb.Append("<table > "); sb.Append("<tr>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>Account Name & Address:</span>"); sb.Append("</td>"); sb.Append("<td width='160px' height='30px'><span style='font-weight: normal;font-size: 11px;'>" + dt.Rows[0]["recipient_account_name_address"].ToString() + "</span>"); sb.Append("</td>"); sb.Append("<td width='80px' height='30px'><span style='font-weight: normal;font-size: 11px;'></span>"); sb.Append("</td>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>Recipient Country:</span>"); sb.Append("</td>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>"+ dt.Rows[0]["recipient_country"].ToString() + "</span>"); sb.Append("</td>"); sb.Append("</tr>"); sb.Append("</table>"); sb.Append("</div>"); sb.Append("<div id='bodyproject3'>"); sb.Append("<div><span style='font-weight: bold;font-size: 12px;'>Intermediary Bank Information(Optional)</span> </div>"); sb.Append("<table >"); sb.Append("<tr>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>Bank Name:</span>"); sb.Append("</td>"); sb.Append("<td width='160px' height='30px'><span style='font-weight: normal;font-size: 11px;'>" + dt.Rows[0]["intermediary_bank_name"].ToString() + "</span>"); sb.Append("</td>"); sb.Append("<td width='80px' >"); sb.Append("</td>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>Country:</span>"); sb.Append("</td>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>" + dt.Rows[0]["intermediary_bank_country"].ToString() + "</span>"); sb.Append("</td>"); sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>Swift/Clearing Code:</span>"); sb.Append("</td>"); sb.Append("<td width='160px' height='30px'><span style='font-weight: normal;font-size: 11px;'>" + dt.Rows[0]["intermediary_swift_code"].ToString() + "</span>"); sb.Append("</td>"); sb.Append("<td width='80px' height='30px' >"); sb.Append("</td>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>Address:</span>"); sb.Append("</td>"); sb.Append("<td width='150px' height='30px'><span style='font-weight: normal;font-size: 11px;'>" + dt.Rows[0]["intermediary_address"].ToString() + "</span>"); sb.Append("</td>"); sb.Append("</tr>"); sb.Append("</table>"); sb.Append("</div>"); DataTable dtFiles = (DataTable)Session["DataFile"]; sb.Append("<div id='bodyproject4'>"); sb.Append("<div><span style='font-weight: bold;font-size: 12px;'>Payment Details</span> </div>"); sb.Append("<div height='30px'><span style='font-weight: normal;font-size: 12px;'>" + dt.Rows[0]["payment_details"].ToString() + "</span> </div>"); sb.Append("</div>"); sb.Append("<div id='bodyproject4'>"); sb.Append("<div><span style='font-weight: bold;font-size: 12px;'>File List</span> </div>"); var baseUlr = new clsCommon().CLIENT_BASE_URL; var file_path = ""; for (int i = 0; i < dtFiles.Rows.Count; i++) { file_path = baseUlr + dtFiles.Rows[i]["file_path"].ToString(); //sb.Append("<div height='30px'><span style='font-weight: normal;font-size: 12px;'>" + (i + 1) + ". " + dtFiles.Rows[0]["filetitle"].ToString() + "</span> </div>"); sb.Append("<div height='30px'><a style='font-weight: normal;font-size: 12px;color:black' target='_blank' download='" + dtFiles.Rows[i]["filetitle"].ToString() + "' href='" + file_path + "'>"+ (i + 1) +"."+ dtFiles.Rows[i]["filetitle"].ToString() + " </a></div>"); } sb.Append("</div>"); sb.Append("<div id='bodyproject5'>"); sb.Append("<div><span style='font-weight: bold;font-size: 12px;'>Purpose of Remittance</span> </div>"); sb.Append("<table >"); sb.Append("<tr>"); sb.Append("<td width='150px' height='30px'> <span style='font-weight: normal;font-size: 11px;'>" + dt.Rows[0]["purpose_of_remittance"].ToString() + "</span>"); sb.Append("</td>"); sb.Append("<td width='150px' height='30px'> <span style='font-weight: normal;font-size: 11px;'>:</span>"); sb.Append("</td>"); sb.Append("<td width='150px' height='30px'> <span style='font-weight: normal;font-size: 11px;'></span>"); sb.Append("</td>"); sb.Append("</tr>"); sb.Append("</table>"); sb.Append("</div>"); DataTable dtSignature = (DataTable)Session["DataSignature"]; sb.Append("<div id='bodyproject6'>"); sb.Append("<div><span style='font-weight: bold;font-size: 12px;'>Applicant Signature</span> </div>"); for (int i = 0; i < dtSignature.Rows.Count; i++) { Guid id_url = Guid.NewGuid(); var path = Server.MapPath("~/TempImage/" + id_url + ".jpg"); baseUrl = Request.Url.Scheme + "://" + Request.Url.Authority + Request.ApplicationPath.TrimEnd('/') + "/"; Base64ToImage(dtSignature.Rows[0]["signature_image_url"].ToString()).Save(path); imageUrl = baseUrl + "/TempImage/" + id_url + ".jpg"; sb.Append("<img src='" + imageUrl + "' width='100' height='100' alt='logo'/>"); imageUrl = path; } sb.Append("</div>"); sb.Append("</main>"); sb.Append("<footer>"); sb.Append("."); sb.Append("</footer>"); } String htmlText = sb.ToString(); string fname = Guid.NewGuid() + ".pdf"; using (var stream = new FileStream(Server.MapPath(Path.Combine("~/TempImage/", fname)), FileMode.Create)) { using (var document = new Document(PageSize.A4)) { var writer = PdfWriter.GetInstance(document, stream); document.Open(); // instantiate custom tag processor and add to `HtmlPipelineContext`. var tagProcessorFactory = iTextSharp.tool.xml.html.Tags.GetHtmlTagProcessorFactory(); tagProcessorFactory.AddProcessor( new TableDataProcessor(), new string[] { HTML.Tag.TD } ); var htmlPipelineContext = new HtmlPipelineContext(null); htmlPipelineContext.SetTagFactory(tagProcessorFactory); var pdfWriterPipeline = new PdfWriterPipeline(document, writer); var htmlPipeline = new HtmlPipeline(htmlPipelineContext, pdfWriterPipeline); // get an ICssResolver and add the custom CSS var cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(true); string CSS = @" body {font-size: 12px;} .header{border: none;} table { page-break-inside:auto } div { page-break-inside:avoid; } /* This is the key */ thead { display:table-header-group } tfoot { display:table-footer-group } "; cssResolver.AddCss(CSS, "utf-8", true); var cssResolverPipeline = new CssResolverPipeline( cssResolver, htmlPipeline ); var worker = new XMLWorker(cssResolverPipeline, true); var parser = new XMLParser(worker); using (var stringReader = new StringReader(htmlText)) { parser.Parse(stringReader); } } } return "/TempImage/"+fname; } catch (Exception ex) { return ""; //throw ex; //lblmessage.Text = ex.ToString(); } } 
private class TableDataProcessor : iTextSharp.tool.xml.html.table.TableData { /* * a **very** simple implementation of the CSS writing-mode property: * https://developer.mozilla.org/en-US/docs/Web/CSS/writing-mode */ bool HasWritingMode(IDictionary<string, string> attributeMap) { bool hasStyle = attributeMap.ContainsKey("style"); return hasStyle && attributeMap["style"].Split(new char[] { ';' }) .Where(x => x.StartsWith("writing-mode:")) .Count() > 0 ? true : false; } public override IList<IElement> End( IWorkerContext ctx, Tag tag, IList<IElement> currentContent) { var cells = base.End(ctx, tag, currentContent); var attributeMap = tag.Attributes; if (HasWritingMode(attributeMap)) { var pdfPCell = (PdfPCell)cells[0]; // **always** 'sideways-lr' pdfPCell.Rotation = 90; } return cells; } }
Have to use this lib: using iTextSharp.text.pdf; using iTextSharp.text; using iTextSharp.tool.xml; using iTextSharp.tool.xml.html; using iTextSharp.tool.xml.parser; using iTextSharp.tool.xml.pipeline.css; using iTextSharp.tool.xml.pipeline.end; using iTextSharp.tool.xml.pipeline.html;

Comments

Popular posts from this blog

Easy Ui Jquery easyui-textbox change onChange event

Provision AWS EC2 Instance and RDS with Terraform, and Deploy Spring Boot App to EC2 Instance via GitHub Action Pipeline

npm install gets stuck at fetchMetadata