我使用itexsharp生成pdf。 我正在创建MemoryStream,然后当我尝试将MemoryStream字节写入响应但没有运气。当我在我的控制器中执行此代码时,pdf没有响应。内存流正确普及我可以在调试器中看到这一点,但由于某种原因,这些数量的节点没有响应。
这是我的代码:
HttpContext.Current.Response.ContentType = "application/pdf";
...
using (Stream inputPdfStream = new FileStream(pdfFilePath, FileMode.Open, FileAccess.Read, FileShare.Read))
using (Stream outputPdfStream = new MemoryStream())
{
PdfReader reader = new PdfReader(inputPdfStream);
PdfStamper stamper = new PdfStamper(reader, outputPdfStream);
....
//try one
outputPdfStream.WriteTo(HttpContext.Current.Response.OutputStream); // NOT POPULATING Response
//try two
HttpContext.Current.Response.BinaryWrite(outputPdfStream.ToArray()); // NOT POPULATING Response Too
HttpContext.Current.Response.End();
}
可能有人有任何想法吗?
答案 0 :(得分:3)
你能否使用
Response.ContentType = "application/pdf"
Response.AddHeader("Content-Type", "application/pdf")
Response.WriteFile(pdfFilePath)
Response.End()
答案 1 :(得分:1)
您应该使用FileContentResult Controller.File(byte[] content, string contentType)
方法:
public ActionResult GeneratePDF()
{
var outputStream = new MemoryStream(); // This will hold the pdf you want to send in the response
/*
* ... code here to create the pdf in the outputStrem
*/
return File(outputStream.ToArray(), "application/pdf");
}
答案 2 :(得分:0)
可能内存流仍设置在最后写入字节之后的位置。它将从当前位置写入所有字节(没有)。如果你执行outputPdfStream.Seek(0)
,它会将位置设置回第一个字节,并将整个流的内容写入响应输出。
无论如何,就像Dean说的那样,你应该使用Reponse.WriteFile
方法。