我试图根据从ASP.net Web服务接收到的二进制数据在我的ASP.net页面中显示PDF文件。以下是代码。虽然我从Web服务获取数据出于某种原因,如果我在页面加载时运行下面提到的代码,我收到了上述错误。该文件已损坏,无法修复
请帮
Response.Buffer = True
Response.ContentType = "application/pdf"
Response.AddHeader("Content-Disposition", "Inline")
Dim ws As New imageGenService.Service1
Dim imagebyte As Byte() = Nothing
imagebyte = ws.generateSamplePDF()
If imagebyte IsNot Nothing Then
'"attachment; filename=Whatever.pdf"
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
reader = New iTextSharp.text.pdf.PdfReader(imagebyte)
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
If MemStream Is Nothing Then
Response.Write("No Data is available for output")
Else
Response.BinaryWrite(MemStream.GetBuffer())
End If
End If
当我在下面一个记事本打开该PDF下面我看到:
%PDF-1.4
%âãÏÓ
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
Untitled Page
</title></head>
<body>
<form name="form1" method="post" action="ShowPDF.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGQpkGvp7bYOLIE6xshhcZ2kYd2baA==" />
</div>
<div>
</div>
</form>
</body>
</html>
+1看起来像对我的解释。 – 2010-03-14 16:20:48
Dexter,放入response.end后我仍然得到相同的错误,如果我在记事本中打开PDF,我会看到下面的%PDF-1.4%粤ICP备案号: – acadia 2010-03-14 16:49:57
@acadia - 确实增加了对doc.Call的调用。 – Dexter 2010-03-16 04:06:10