填写后,Itextsharp似乎正在破坏pdf格式;在Adobe Reader for WP7中打开问题

时间:2011-09-29 22:26:25

标签: windows-phone-7 itextsharp acrobat

我正在尝试从asp.net C#应用程序动态生成pdf表单。生成表单并通过电子邮件发送给某些用户。几个月以来,人们已经能够在Adobe Reader上打开它了。

最近,有人要求用户能够在手机上阅读这些pdf附件。不幸的是,当这些人尝试在他们的手机上打开pdf时,它会说“打开文档时出错。”

我尝试在我的wp7手机上打开原始表格,但它确实有效。

我发送了一份不适用于免费pdf /验证服务的pdf副本。该服务返回时显示以下消息:

无法加载文件:错误的'startxref'参考

这让我觉得问题是Adobe Reader在打开时正在重建文档中的一些元数据/索引。由于大多数人拥有快速机器,因此重建这些指数所花费的时间可以忽略不计。但据我所知,手机版本没有此功能,所以它正在读取xstartref并失败。

以下是我的应用程序中的代码,它似乎产生了损坏的文件:

File.Copy(original, newpath);
FileStream fs = new FileStream(newpath, FileMode.Open);
PdfReader r = new PdfReader(fs);
PdfStamper stamper = new PdfStamper(r, fs);            
AcroFields af = stamper.AcroFields;

af.SetField("Event", ef.eName); af.SetField("EventType", ef.EventType);
af.SetField("eStartDate", ef.eStartDate);
af.SetField("eStartTime",ef.eStartTime);


stamper.FormFlattening = true;
stamper.FreeTextFlattening = true;
stamper.Close();

r.Close();
fs.Close();

我做错了什么?我已经读过没有正确关闭流,压模和pdfreader的地方会造成麻烦。但我认为我正在关闭它。我在俯瞰什么?

1 个答案:

答案 0 :(得分:1)

您应该将PdfReader绑定到源文档,将PdfStamper绑定到目标文档。

//Get rid of the below line completely
//File.Copy(original, newpath);
FileStream fs = new FileStream(newpath, FileMode.Open);
PdfReader r = new PdfReader(original);
PdfStamper stamper = new PdfStamper(r, fs);

否则你在写文件时正在阅读文件,这不是一个好主意。