我有一个PDF文档,它有许多填充字段(文本和复选框)。如何引用这些对象,以便我可以操作它的值,然后将更新的PDF推送到用户可以保存到他们想要的位置。我找不到任何关于如何做这件事的好文件。
如果你能给我任何信息,我将不胜感激。
现在我正在使用下面的代码,但是当我打开它时,我的PDF阅读器告诉我它已经损坏或损坏了。
String srcPath = Server.MapPath("~/App_Data/w9.pdf");
String dstPath = Server.MapPath("~/App_Data/w9_" + Session.SessionID + "_updated.pdf");
if (File.Exists(dstPath)) {
File.Delete(dstPath);
}
File.Copy(srcPath, dstPath);
PdfReader reader = new PdfReader(dstPath);
try
{
PdfStamper stamper = new PdfStamper(reader, Response.OutputStream);
stamper.FormFlattening = true;
stamper.AcroFields.SetField("topmostSubform[0].Page1[0].f1_01_0_[0]", "Homer J Simpson");
Response.ContentType = "application/pdf";
Response.BufferOutput = true;
Response.AppendHeader("Content-Disposition", "attachment; filename=W9_" +Session.SessionID + "_Complete.pdf");
Response.TransmitFile(dstPath);
}
catch (Exception ex)
{
Response.Write(ex.Message);
}发布于 2013-01-23 09:45:18
我是iText文档的作者。如果您有静态表单,则可以使用本章中描述的方法来填写表单:http://www.manning.com/lowagie2/samplechapter6.pdf。
阅读第6.3.5节,了解如何填写使用Open Office创建的表单。但是,看起来您使用的是用Adobe创建的表单(像LiveCycle这样的字段名对于XFA表单来说是典型的)。
第6.3.5节最后评论如下:
“关于表单还有很多要说的,但在我们谈到注解之前,我们不能进一步详细讨论。此外,我还没有提到不同类型的PDF表单:有一些基于AcroForm技术的表单(比如您使用Office创建的表单),还有XFA表单(用Adobe创建)。这将不得不等到第8章,因为我们还有另外一组PDF操作类需要讨论。”
如果您的表单是一个动态的XFA表单,而内部没有任何AcroForm技术,则需要XFA工作人员将其扁平化。您可以在这里下载XFA Worker的试用版:http://itextsupport.com/download/xfaworker.html
在继续之前,您必须回答的第一个问题是:我有AcroForm还是XFA表单?如果您有XFA表单,您将需要Adobe或LiveCycle工作人员来填充和扁平这样的表单。两者都是封闭的源产品。我不知道有任何支持XFA扁平化的免费/开放源代码库。
PS:如果你所说的“损坏”意味着你收到了一条写着此文档启用了扩展功能..。的消息,那么你就是破坏了阅读器的功能。您应该阅读"iText in Action -第二版“的第8章,以了解如何避免这条消息。
https://stackoverflow.com/questions/14469999
复制相似问题