【问题标题】:ITextSharp is outputting a blank document when Memorystream used as email attachment当 Memorystream 用作电子邮件附件时,ITextSharp 正在输出一个空白文档
【发布时间】:2013-11-07 18:38:42
【问题描述】:

执行以下代码时不会抛出任何错误,但作为附件生成的 pdf 为空白且文件大小为 0k。

编辑:

Dim page As Page = New Page()
Dim form As HtmlForm = New HtmlForm()
page.Controls.Add(form)

Dim bpa As UserControl_BpaReceipt = page.LoadControl("~/UserControl/BpaReceipt.ascx")
bpa._thisCart = _thisCart
form.Controls.Add(bpa)
Dim writer As StringWriter = New StringWriter()

Me.Server.Execute(page, writer, False)

结束编辑:

Dim bytes = Encoding.UTF8.GetBytes(writer.ToString())

Dim input As MemoryStream = New MemoryStream(bytes)

Dim output As MemoryStream = New MemoryStream()
''//Dim reader As TextReader = New StringReader(writer.ToString())

Dim doc As Document = New Document(PageSize.A4.Rotate, 30, 30, 30, 30)

Dim pdfWriter As PdfWriter = pdfWriter.GetInstance(doc, output)

doc.Open()

XMLWorkerHelper.GetInstance().ParseXHtml(pdfWriter, doc, input, Nothing)

email.Attachments.Add(New Attachment(output, "Quote.pdf", "application/pdf"))

Dim smtp As New SmtpClient()
smtp.Credentials = New System.Net.NetworkCredential(System.Web.Configuration.WebConfigurationManager.AppSettings("SMTPUser").ToString(), System.Web.Configuration.WebConfigurationManager.AppSettings("SMTPPassword").ToString())
smtp.Send(email)
doc.Close()

我对这个过程很陌生,任何帮助都将不胜感激。另外,为了澄清我是否输出到文件而不是流, writer.toString() 中的 html 会按预期输出。

感谢您对此事的任何想法。

谢谢,

编辑:

Dim page As Page = New Page()
Dim form As HtmlForm = New HtmlForm()
page.Controls.Add(form)

Dim bpa As UserControl_BpaReceipt = page.LoadControl("~/UserControl/BpaReceipt.ascx")
bpa._thisCart = _thisCart
form.Controls.Add(bpa)
Dim writer As StringWriter = New StringWriter()

Me.Server.Execute(page, writer, False)

email.IsBodyHtml = True


If (toValues.Value.Contains(";")) Then
    Dim toArray = toValues.Value.Split(";")
    For Each value In toArray
        email.To.Add(value)
    Next
Else
    email.To.Add(toValues.Value.ToString())
End If

email.Subject = txtSubject.Text
email.Body = "<br /><br /><br />" & writer.ToString()

email.From = New MailAddress("webadmin@managemobility.com")

Dim bytes = Encoding.UTF8.GetBytes(writer.ToString())

Dim input As MemoryStream = New MemoryStream(bytes)

Dim output As MemoryStream = New MemoryStream()
''//Dim reader As TextReader = New StringReader(writer.ToString())

Dim doc As Document = New Document(PageSize.A4.Rotate, 30, 30, 30, 30)

Dim pdfWrite As PdfWriter = PdfWriter.GetInstance(doc, output)
pdfWrite.CloseStream = False
doc.Open()

XMLWorkerHelper.GetInstance().ParseXHtml(pdfWrite, doc, input, Nothing)
doc.Close()
email.Attachments.Add(New Attachment(output, "Quote.pdf", "application/pdf"))

Dim smtp As New SmtpClient()
smtp.Credentials = New System.Net.NetworkCredential(System.Web.Configuration.WebConfigurationManager.AppSettings("SMTPUser").ToString(), System.Web.Configuration.WebConfigurationManager.AppSettings("SMTPPassword").ToString())
smtp.Send(email)
''//doc.Close()

我编辑了代码以反映您的建议,恐怕我仍然收到相同的输出空 pdf 0kb。非常感谢您的建议,我也对这个问题感到非常恼火,非常感谢您的建议。

【问题讨论】:

  • 能否添加writer的定义;问题几乎肯定是 writer.tostring()
  • 我添加了writer的定义和使用。请注意,在调试中,当悬停在 writer.toString() 上时,我可以看到 writer 的输出。再次感谢!!!!!!
  • 你在doc.Close之前使用了输出。但在关闭doc 之前,该文档并未完全创建。因此,您在阅读该文档时遇到问题也就不足为奇了。参照。 This answer.
  • 能否提供pdf结果供检查?您是否尝试过不仅邮寄 pdf 文件,而且同时将内存流存储到文件中?如果存储为文件的 pdf 与邮寄的不同,您就知道您遇到了邮寄问题。如果他们不这样做,您可以确定您遇到了 pdf 创建问题。目前,您有太多可能与问题相关的不同方面。
  • 我同意@mkl,停止尝试通过电子邮件发送文件。现在,只需尝试通过将 PDF 写入磁盘来制作 PDF。一旦你把它记下来,你就可以继续通过电子邮件发送它。你在玩太多不同的事情。

标签: .net vb.net itextsharp system.net.mail


【解决方案1】:

按照 cmets 中的建议,在开始尝试通过电子邮件发送文件之前,请确保您可以将文件保存到磁盘。一旦你可以做到这一点,然后继续附加它并发送电子邮件。下面是我之前使用 System.Net.Mail 类将 pdf 附加到电子邮件的代码 sn-p。 (它是 c#,但你明白了)

 output.Seek(0, SeekOrigin.Begin);
 System.Net.Mime.ContentType contentType = new System.Net.Mime.ContentType();
 contentType.MediaType = System.Net.Mime.MediaTypeNames.Application.Pdf;
 contentType.Name = "Quote.pdf";

 Attachment attachment = new Attachment(output, contentType);
 mail.Attachments.Add(attachment);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 2015-05-03
    • 2013-11-12
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    相关资源
    最近更新 更多