java response pdf_由Adobe Reader丢失的Response.Stream输出(PDF)

在ASP.NET应用程序中,我使用iTextSharp(主要是PdfStamper)来填充PDF上的一些内容并将其发送给用户 . 以下代码位于OnClick事件中:

PdfReader r = new PdfReader(

new RandomAccessFileOrArray(Request.MapPath(compatiblePdf)), null

);

ps = new PdfStamper(r, Response.OutputStream);

AcroFields af = ps.AcroFields;

af.SetField("ContactInfo[0]", o.mallName);

af.SetField("ClientName", string.Format("{0} {1}", c.firstName, c.lastName));

af.SetField("ClientEmail", c.emailAddress);

ps.FormFlattening = true;

Response.ContentType = "application/pdf";

Response.AddHeader("Content-Disposition", "attachment; filename=Form.pdf");

ps.Close();

Response.End();

因此,基本上,PdfReader获取文件,PdfStamper将PdfReader作为参数,并将其完成的PDF推送到Response.OutputStream .

问题是,使用IE和Adobe Reader,如果从文件对话框中选择“打开”,Adobe Reader会抛出错误提示“无法找到文件” . 用户可以“保存”文件,甚至可以再次开始下载(在被问到时再次单击“打开”)似乎可以正常工作 . 但是在一台永远不会下载文件的新机器上,Adobe Reader似乎错误地将文件放在临时文件或IE之间 .

我现在只能想象一件事: Response.End() ,或许应该是 Response.Close() ,或者也许整个事情应该在它之前有 Response.Flush() . 但我不会让问题变得更糟,而且我已经下载了一次文件,错误不再被抛出了 .

可能解决问题吗?我在 Headers 中有什么问题吗?或者我还应该对Response / PdfStamper对象做些什么呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值