itextsharp打开新标签页

时间:2019-06-24 19:57:17

标签: asp.net itext eof nul

我需要在新选项卡中打开pdf,它可以正常工作并且文件显示完美,但是如果我使用notepadd ++打开File,则在EOF之后有一些NULL字符(请参见图片)enter image description here。 碰巧只有我在新选项卡中打开它并使用memorystream,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()

1 个答案:

答案 0 :(得分:0)

问题

此行中有一个问题:

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

甚至更精确地说是其最终参数mswithPage.GetBuffer().Length-您应该使用缓冲区中实际使用的 字节数,但要使用 complete 缓冲区的大小

解决方案

因此,请改用mswithPage.Length

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

...,如果MemoryStream已经关闭

如果MemoryStream已经关闭,则上面的解决方案将不再起作用,因为其Length属性只能在开放的流上使用。

ToArray方法对封闭流有效!因此,您可以改用

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

(实际上,ToArray在关闭的流上有效,但Length却不能。有趣的是,ToArray本质上返回前Length个字节的副本内部缓冲区...)