2016-04-27 54 views
0

你好,大家好我在PDF从我的HTML内容生成付款发票秩序,通过e-mail用下面的代码发送它:PDF但没有渲染HTML教程ASP.NET

***//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

回答

0

最后我找到了解决我的问题的方法!

有必要使用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); 

感谢大家顺便说一句!