使用iTextSharp修改PDF文件
本文关键字:文件 PDF 修改 iTextSharp 使用 | 更新日期: 2023-09-27 18:17:06
我有一个拦截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);
有谁知道我该如何解决这个问题吗?
你继续发送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);