html - PDF 不呈现 Html Css ASP.NET

标签 html css asp.net pdf render

大家好,我正在从我的 html 内容生成 PDF 格式的付款发票订单,并使用以下代码通过电子邮件发送:

    ***//Generates PDF Payment Invoice***       
    StringBuilder sb = new StringBuilder();
    sb.Append(@"<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"">");      
    sb.Append(boletoBancario.MontaHtml());

    StringReader sr = new StringReader(sb.ToString());

    Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);

    HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
    byte[] bytes;

    memoryStream = new MemoryStream();

    PdfWriter writer = PdfWriter.GetInstance(pdfDoc, memoryStream);
    pdfDoc.Open();

    iTextSharp.text.html.simpleparser.StyleSheet ST = new iTextSharp.text.html.simpleparser.StyleSheet();
    ST.LoadTagStyle("body", "encoding", "Identity-H");
    htmlparser.SetStyleSheet(ST);
    htmlparser.Parse(sr);            

    pdfDoc.Close();
    bytes = memoryStream.ToArray();
    memoryStream.Close();                       
    memoryStream = new MemoryStream(bytes);


    ***//Sends E-mail with PDF PAYMENT INVOICE Attached***
    MailAddress de = new MailAddress(enderecoOrigem, HttpUtility.HtmlDecode(nomeOrigem));
    MailAddress para = new MailAddress(enderecoDestino, HttpUtility.HtmlDecode(nomeDestino));

    MailMessage mensagem = new MailMessage(de, para);
    NetworkCredential credential = new NetworkCredential(usuarioConta, senhaConta);
    SmtpClient smtp = new SmtpClient();
    smtp.Host = servidorSMTP;
    smtp.Port = Convert.ToInt32(porta);
    MailAddressCollection comCopia;     

    Attachment att = new Attachment(memoryStream, "Boleto.pdf", MediaTypeNames.Application.Pdf);
    mensagem.Attachments.Add(att);      

    mensagem.Subject = "Payment Invoice";
    mensagem.Body = String.Format("Your payment invoice is available.");
    mensagem.IsBodyHtml = true;

    smtp.UseDefaultCredentials = true;
    smtp.EnableSsl = false;     

    smtp.Send(mensagem);    

问题是附加到电子邮件的 PDF 无法正确呈现 HTML,因此它仍未格式化。否则,当我创建一个空白文件并放入整个 HTML 并使用 Chrome 打开它时,它的格式非常好。

我需要将此 PDF 正确附加到电子邮件中。

有人能帮帮我吗? Here You can see the Rendering Problem

最佳答案

我终于找到了解决问题的方法!

有必要使用 itextSharp.xmlWorker 库并在代码隐藏中进行一些更改。原因是 HTMLWorker 确实不解析 CSS,所以我不得不改用 XMLWorker 并执行以下操作:

    //Geração de PDF
    StringBuilder sb = new StringBuilder();      
    StringReader sr;
    Document pdfDoc;
    PdfWriter writer;
    byte[] bytes;

    sb.Append(boletoBancario.MontaHtml());
    sr = new StringReader(sb.ToString().Replace("<br />","<b></b>").Replace("<br>","<br></br>"));

    pdfDoc = new Document(PageSize.A4, 30, 30, 30, 30);

    writer = PdfWriter.GetInstance(pdfDoc, memoryStream);
    HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
    htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());

    ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);

    IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(pdfDoc, writer)));

    XMLWorker worker = new XMLWorker(pipeline, true);
    XMLParser xmlParser = new XMLParser(worker);

    pdfDoc.Open();

    xmlParser.Parse(sr);

    pdfDoc.Close();

    bytes = memoryStream.ToArray();
    memoryStream.Close();

    return new MemoryStream(bytes);

顺便说一句,谢谢大家!

关于html - PDF 不呈现 Html Css ASP.NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36898475/

相关文章:

c# - 列出具有交替颜色的项目

html - css 图像蒙版覆盖

javascript - jQuery为单选输入文本添加点击事件

html - Textarea 拉伸(stretch)父 div

asp.net - 智能卡身份验证 ASP.NET

Javascript 标签在回发后失去值(value)

javascript - Chrome开发工具: How to calculate the total time required to load a popup and display it on a page?

html - CSS中的链/序列动画

javascript - 有没有办法让 css3 类跟随鼠标光标

javascript - 使用 JS 切换页面颜色