2
我有一個攔截PDF文檔請求的HttpModule,我想向PDF添加一個日期並將其返回給客戶端。使用iTextSharp修改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);
有誰知道我該如何解決這個問題?
感謝您的建議,試過了,但並仍然得到同樣的錯誤 – Dave
同樣的錯誤,當使用您的字節代碼太 – Dave
我知道你說,它didn不工作,但我只是想確保清楚你**從不**在'MemoryStream'上使用'GetBuffer()'並且總是**使用'ToArray()'代替。前者返回額外的未初始化字節,就PDF呈現器而言,該字節將被視爲垃圾。後者只給你「使用過的」字節。 http://msdn.microsoft.com/en-us/library/system.io.memorystream.getbuffer.aspx#remarksToggle –