I have a process to stream a SSRS report to a browser. After creating (saving) the report to a PDF file I send the file to the asp.net function below. It works perfectly in every browser except Microsoft Edge. When I run it in Edge it gives me the error page text below.
Couldn't open PDF
Something's keeping this PDF from opening.
Some additional information as I found out that the failure is occurring prior to the MergePDFs function noted below. It is failing in the process to stream the PDF using error and code below.
The process cannot access the file '\\lifedev2012\Apps\LifeTime\OfficeDocs\Export\ARAgingReport1136.pdf' because it is being used by another process.
Dim result As Byte() = Nothing Dim stream As FileStream ...more code here to generate report result = rs.Render(format, devInfo, extension, encoding, mimeType, warnings, streamIDs) execInfo = rs.GetExecutionInfo() 'is failing on line below stream = File.Create(strFullPath, result.Length)
If I open the file from Windows Explorer it opens perfectly in Adobe Reader. Any ideas?
Public Shared Sub MergePDFs(ByVal files As List(Of String), ByVal filename As String) 'Gets a list of full path files and merges into one memory stream 'and outputs it to a browser response. Dim MemStream As New System.IO.MemoryStream Dim doc As New iTextSharp.text.Document Dim reader As iTextSharp.text.pdf.PdfReader Dim numberOfPages As Integer Dim currentPageNumber As Integer Dim writer As iTextSharp.text.pdf.PdfWriter = iTextSharp.text.pdf.PdfWriter.GetInstance(doc, MemStream) doc.Open() Dim cb As iTextSharp.text.pdf.PdfContentByte = writer.DirectContent Dim page As iTextSharp.text.pdf.PdfImportedPage Dim strError As String = "" For Each strfile As String In files reader = New iTextSharp.text.pdf.PdfReader(strfile) numberOfPages = reader.NumberOfPages currentPageNumber = 0 Do While (currentPageNumber < numberOfPages) currentPageNumber += 1 doc.SetPageSize(reader.GetPageSizeWithRotation(currentPageNumber)) doc.NewPage() page = writer.GetImportedPage(reader, currentPageNumber) cb.AddTemplate(page, 0, 0) Loop Next doc.Close() doc.Dispose() If MemStream Is Nothing Then HttpContext.Current.Response.Write("No Data is available for output") Else HttpContext.Current.Response.Clear() HttpContext.Current.Response.ContentType = "application/pdf" HttpContext.Current.Response.AppendHeader("Content-Disposition", "inline; filename=" + filename) HttpContext.Current.Response.BinaryWrite(MemStream.ToArray) HttpContext.Current.Response.OutputStream.Flush() HttpContext.Current.Response.OutputStream.Close() HttpContext.Current.Response.OutputStream.Dispose() MemStream.Close() MemStream.Dispose() End If End Sub