PDF 未呈现 Html Css ASP.NET

PDF Not Rendering Html Css ASP.NET

大家好,我正在从我的 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);

谢谢大家顺便说一句!