' First set up the response and let the browser know a PDF is coming
Response.Buffer = True
Response.ContentType = "application/pdf"
Response.AddHeader("Content-Disposition", "inline")
' Second, some setup stuff
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 rotation As Integer
' Third, append all the PDFs--THIS IS THE MAGIC PART
Do While dr.Read
If Not IsDBNull(dr("Report_pdf")) Then
Dim sqlbytes() As Byte
sqlbytes = dr("Report_pdf")
reader = New iTextSharp.text.pdf.PdfReader(sqlbytes)
numberOfPages = reader.NumberOfPages
currentPageNumber = 0
Do While (currentPageNumber < numberOfPages)
currentPageNumber += 1
doc.SetPageSize(PageSize.LETTER)
doc.NewPage()
page = writer.GetImportedPage(reader, currentPageNumber)
rotation = reader.GetPageRotation(currentPageNumber)
If (rotation = 90) Or (rotation = 270) Then
cb.AddTemplate(page, 0, -1.0F, 1.0F, 0, 0, reader.GetPageSizeWithRotation(currentPageNumber).Height)
Else
cb.AddTemplate(page, 1.0F, 0, 0, 1.0F, 0, 0)
End If
Loop
End If
Loop
' Finally Spit the stream out
If MemStream Is Nothing Then
Response.Write("No Data is available for output")
Else
Response.OutputStream.Write(MemStream.GetBuffer(), 0, MemStream.GetBuffer().Length)
Response.OutputStream.Flush()
Response.OutputStream.Close()
MemStream.Close()
End If