使用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);

有谁知道我该如何解决这个问题吗?

使用iTextSharp修改PDF文件

你继续发送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);