Itextsharp открыть новую вкладку ВЫПУСК - PullRequest
0 голосов
/ 24 июня 2019

Мне нужно открыть pdf в новой вкладке, она работает и файл отлично отображается, но если я открою File с notepadd ++, после EOF будет несколько символов NULL (см. Фото) enter image description here.Это происходит только тогда, когда я открываю его в новой вкладке и использую поток памяти, строка после 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 голосов
/ 25 июня 2019

Проблема

Проблема в этой строке:

 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 много байтов внутреннего буфера ...)

...