如何使用iTextSharp将pdf字节数组转换为可下载文件

18

大家好,我有一个字节数组,我想将其转换为PDF并使其可以下载。有人知道如何做吗?

这是我的Action Controller:

public ActionResult DownloadLabTestResult(string labTestResultID)
{
            PdfReader pdfReader = new PdfReader("Xue_Tang.pdf");

            MemoryStream stream = new MemoryStream();
            PdfStamper stamper = new PdfStamper(pdfReader, stream);

            pdfReader.Close();
            stamper.Close();
            stream.Flush();
            stream.Close();
            byte[] pdfByte = stream.ToArray();

            // So i got the byte array of the original pdf at this point. Now how do i convert this
            // byte array to a downloadable pdf? i tried the method below but to no avail.

            MemoryStream ms = new MemoryStream(pdfByte);

            Response.ContentType = "application/pdf";
            Response.AddHeader("content-disposition", "attachment;filename=labtest.pdf");
            Response.Buffer = true;
            Response.Clear();
            Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);
            Response.OutputStream.Flush();
            Response.End();

            return new FileStreamResult(Response.OutputStream, "application/pdf");

 }

如果您在磁盘上有PDF文件,您可以使用FileStream直接读取它。 - Albin Sunnanbo
即使您需要PdfStamper,看起来您有太多的流,您不应该需要"ms"流,"stream"流应该足够了,但在使用它之前不应该关闭它,您可以尝试在将其添加到OutputStream之前执行"ms.Seek(0, SeekOrigin.Begin);"。 - Albin Sunnanbo
哦,当然我可以直接从本地磁盘读取,但我只是在这里模拟一些东西,我只提供了字节数组,我的工作是将其转换为可下载的文件,不太清楚该怎么做呢,哈哈 =p - Ari
1个回答

33

我正在使用类似的代码,但有一些不同:

Response.Clear();
MemoryStream ms = new MemoryStream(pdfByte);
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=labtest.pdf");
Response.Buffer = true;
ms.WriteTo(Response.OutputStream);
Response.End();
  1. 提前调用 Response.Clear()。
  2. 使用 MemoryStream.WriteTo 写入到 Response.OutputStream。

编辑:对不起,我没有看到你正在使用 ASP.NET MVC,上面的代码是在 WebForms aspx 页面中。

对于 ASP.NET MVC,你只需执行以下操作:

return new FileStreamResult(ms, "application/pdf");


其实,是的,你可以这样做。我把事情想复杂了哈哈。不过还有一个问题,是否可能将字节数组(不知道它是pdf、doc还是txt)转换为正确的格式,而不指定它是pdf、txt还是doc?我现在卡在这个问题上了。 - Ari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接