我有一个拦截PDF文档请求的HttpModule,我想在PDF中添加一个日期并流回客户端。
到目前为止,我的代码是
context.Response.ClearContent();
using (MemoryStream ms = new MemoryStream())
{
PdfReader reader = new PdfReader(document.Url + "&a=1");
PdfStamper stamper = new PdfStamper(reader, ms);
// *** Modify PDF here
stamper.Close();
context.Response.ContentType = "application/pdf";
context.Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);
context.Response.OutputStream.Flush();
context.Response.OutputStream.Close();
context.Response.Flush();
context.Response.End();
}
HttpContext.Current.ApplicationInstance.CompleteRequest();
上面的代码工作正常,但是一旦我尝试修改PDF,我就会收到PDF文件错误“文件已损坏且无法修复”,例如
TextField textField = new TextField(stamper.Writer, new Rectangle(0, 1000, 90, 600), name);
textField.Font = FontFactory.GetFont(FontFactory.HELVETICA, DEFAULT_FONT_SIZE, Font.NORMAL).BaseFont;
textField.FontSize = DEFAULT_FONT_SIZE;
textField.Rotation = 90;
PdfFormField field = textField.GetTextField();
stamper.AddAnnotation(field, page);
有谁知道如何解决这个问题?
答案 0 :(得分:2)
您继续在pdf之后发送内容,添加
context.Response.End();
后:
context.Response.Flush();
现在您只会发送pdf而不是整个页面。这有时可以解决这个问题。
您还在阅读缓冲区两次:
context.Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);
尝试添加
byte[] bytes = ms.ToArray();
然后
context.Response.OutputStream.BinaryWrite(bytes);