【问题标题】:PDF Not Rendering Html Css ASP.NETPDF 不呈现 Html Css ASP.NET
【发布时间】:2016-08-22 06:17:10
【问题描述】:

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

【问题讨论】:

    标签: html css asp.net pdf render


    【解决方案1】:

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

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

    谢谢大家!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-18
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      相关资源
      最近更新 更多