Asp.net web api 在web api中生成pdf(ItextSharp 5.5.13)
我需要在web api的内存中复制一个PDF文件并发送它我确实复制了PDF,web api发送了它,但我一收到就无法打开它 我将PDF转换为字节数组,如下所示: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
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;