Asp.net web api 在web api中生成pdf(ItextSharp 5.5.13)

Asp.net web api 在web api中生成pdf(ItextSharp 5.5.13),asp.net-web-api,itext,Asp.net Web Api,Itext,我需要在web api的内存中复制一个PDF文件并发送它我确实复制了PDF,web api发送了它,但我一收到就无法打开它 我将PDF转换为字节数组,如下所示: private byte[] createPDF() { MemoryStream memStream = new MemoryStream(); byte[] pdfBytes; Document doc = new Document(iTextSharp.text.PageS

我需要在web api的内存中复制一个PDF文件并发送它我确实复制了PDF,web api发送了它,但我一收到就无法打开它

我将PDF转换为字节数组,如下所示:

private byte[] createPDF()
    {
        MemoryStream memStream = new MemoryStream();
        byte[] pdfBytes;

        Document doc = new Document(iTextSharp.text.PageSize.LETTER);
        PdfWriter wri = PdfWriter.GetInstance(doc, memStream);
        doc.AddTitle("test");
        doc.AddCreator("I am");

        doc.Open();//Open Document to write
        Paragraph paragraph = new Paragraph("This is my first line using Paragraph.");
        Phrase pharse = new Phrase("This is my second line using Pharse.");
        Chunk chunk = new Chunk(" This is my third line using Chunk.");
        doc.Add(paragraph);
        doc.Add(pharse);
        doc.Add(chunk);
        pdfBytes = memStream.ToArray();
        doc.Close(); //Close 
        return pdfBytes;
    }
此方法由发送PDF的web api中的方法调用,如下所示:

 [HttpGet]
    public HttpResponseMessage GetFiniquitopdf()
    {
        try
        {
            byte[] buffer = createPDF();

            response = new HttpResponseMessage();
            response.StatusCode = HttpStatusCode.OK;
            response.Content = new StreamContent(new MemoryStream(buffer));

            response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
            response.Content.Headers.ContentLength = buffer.Length;
            response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
            {
                FileName = "myFirstPDF.pdf"
            };

        }
        catch (Exception e)
        {
            response = Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e.Message);
        }

        return response;
    }
问题是当下载PDF时,它是无用的,无法打开,我不明白为什么不能打开PDF,我认为这是windows10的安全问题,所以下载后我会将其作为安全文件进行检查,但它无论如何都不会打开 我猜我发送它的方式有问题,或者我在创建PDF文件时缺少一些东西


提前感谢

您在关闭文档之前从内存流中检索字节:

    pdfBytes = memStream.ToArray();
    doc.Close(); //Close 
    return pdfBytes;
但是,在文档关闭之前,内存流中的pdf是不完整的。因此,只需切换指令顺序:

    doc.Close(); //Close 
    pdfBytes = memStream.ToArray();
    return pdfBytes;