大家好,我正在从我的 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 正确附加到电子邮件中。
最佳答案
我终于找到了解决问题的方法!
有必要使用 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/