【问题标题】:Itextsharp open new tab ISSUEItextsharp 打开新标签 问题
【发布时间】:2019-06-24 19:57:17
【问题描述】:

我需要在新选项卡中打开 pdf,它可以正常工作并且文件显示完美,但是如果我使用 notepadd++ 打开文件,在 EOF 之后会有一些 NULL 字符(参见图片)。 只有我在新选项卡中打开它并使用内存流才会发生这种情况,EOF 之后的字符串在客户端的解析器中产生了一些问题,这是怎么回事?。

这是代码:

 Dim mswithPage As New MemoryStream()
        Dim SessValue As String = Request.QueryString("s")
        Dim NOrder As String = Request.QueryString("odv")
        mswithPage = CType(Session(SessValue), MemoryStream)


        Response.Clear()
        Response.ContentType = "Application/pdf"
        Response.AddHeader("content-disposition", "inline;filename=" & NOrder & ".pdf")

        Response.OutputStream.Write(mswithPage.GetBuffer(), 0, mswithPage.GetBuffer().Length)
        Response.OutputStream.Flush()
        Response.OutputStream.Close()
        Response.End()

【问题讨论】:

  • 问题似乎是 Response.OutputStream....我需要在新标签中打开文件 pdf。

标签: asp.net itext eof nul


【解决方案1】:

问题

这一行有一个问题:

 Response.OutputStream.Write(mswithPage.GetBuffer(), 0, mswithPage.GetBuffer().Length)

更准确地说,它的最后一个参数mswithPage.GetBuffer().Length - 您应该使用缓冲区中实际使用字节的数量,但您使用的是完整缓冲区的大小。

解决方案

因此,请改用mswithPage.Length

 Response.OutputStream.Write(mswithPage.GetBuffer(), 0, mswithPage.Length)

...如果MemoryStream 已经关闭

如果MemoryStream 已经关闭,则上述解决方案不再适用,因为它的Length 属性只能用于打开的流。

不过,在封闭流上起作用的是ToArray 方法!因此,您可以改为使用

 Response.OutputStream.Write(mswithPage.ToArray())

(实际上很有趣,ToArray 可以在封闭的流上工作,但 Length 不能。毕竟,ToArray 本质上返回了第一个 Length 内部缓冲区许多字节的副本...)

【讨论】:

  • 我得到一个异常“无法访问已关闭的流”
  • 然后在检索其内容之前不要关闭MemoryStream(由于您已将问题标记为itext,您可能需要更改writer.CloseStream 属性您的PdfWriterPdfStamper.Writer,请参阅this answer。)
  • 我使用此页面打开新标签页 pdf,如您所见,我只传递到此页面的内存流,我还没有写。
  • 如果你不使用 iText,为什么还要使用 itext 标签?尽管如此,如果您得到“无法访问关闭的流”,那么您有一个关闭的MemoryStream,如果您想访问流的内部缓冲区和使用的缓冲区大小,这是不合适的。但是,如果您不必使用内部缓冲区,请改用ToArray
  • 你说得对,我的错误不是 itext 而是 itextsharp,我现在更正。所以我尝试继续:我用 itextsharp 创建 pdf,然后在 memorystream 中转换 pdfdoc,将 memorystream 作为会话变量传递给其他页面,最后我在新选项卡中显示它,代码你可以在上面看到。所以你建议使用 ToArray 你能提供一些代码吗?
猜你喜欢
  • 2022-11-18
  • 1970-01-01
  • 2013-05-03
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
  • 2015-10-18
  • 1970-01-01
相关资源
最近更新 更多