按流合并PDF
问题描述:
我遇到了一个.ashx
问题,它应该合并一些PDF存储流,在一个最简单的情况下,输出只有一个流,输出PDF流已损坏,但当我调用另一个ashx哪一个输出中只有单个流可以工作,我在下面的代码中错过了什么?按流合并PDF
我收集内存流:
Dim streamDocument As MemoryStream = FumForm.CreatePdfDocument(context, _fumForm, _formTemplate, _match)
lReader.Add(New PdfReader(streamDocument))
那么我想追加所有的PDF页面在其他的PDF:
Dim document As Document = New Document(PageSize.A4, 0, 0, 0, 0)
Dim writer As PdfWriter = PdfWriter.GetInstance(document, context.Response.OutputStream)
document.Open()
For Each r As PdfReader In lReader
For i As Integer = 1 To r.NumberOfPages
Dim page As PdfImportedPage = writer.GetImportedPage(r, i)
document.Add(Image.GetInstance(page))
Next
Next
Dim filename = String.Format("{0}{1}.pdf", "pippo", "test")
document.Close()
context.Response.Clear()
context.Response.ContentType = "application/pdf"
context.Response.AppendHeader("content-disposition", "inline; filename=""" & filename & """")
context.Response.Flush()
context.Response.Close()
context.Response.End()
CreatePdfDocument
效果很好,并有此签名
static public MemoryStream CreatePdfDocument(HttpContext context,
FumForm form,
FumFormTemplate formTemplate,
Match match)
任何帮助将非常感谢
答
代码首先整个PDF写入context.Response.OutputStream
Dim document As Document = New Document(PageSize.A4, 0, 0, 0, 0)
Dim writer As PdfWriter = PdfWriter.GetInstance(document, context.Response.OutputStream)
...
document.Close()
和此后清除和改变的context.Response
context.Response.Clear()
context.Response.ContentType = "application/pdf"
context.Response.AppendHeader("content-disposition", "inline; filename=""" & filename & """")
头才能正常工作,所有响应对象清算和头部的操作有在数据写入响应流之前完成。
我认为在整个PDF已经写入'context.Response.OutputStream'之后,清除并更改'context.Response'的标题是一个非常糟糕的主意。 – mkl 2014-10-09 14:44:15
@mkl该死的,你是对的:)请添加你的答案 – InferOn 2014-10-09 14:56:34
@AlexisPigeon ty Alex我会提炼字符串格式,bwt字符串不是问题;) – InferOn 2014-10-09 14:57:43