我有一个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);
}
答案 0 :(得分:0)
我是iText文档的作者。如果您有静态表单,则可以使用本章中描述的方法填写表单:http://www.manning.com/lowagie2/samplechapter6.pdf
阅读第6.3.5节,了解如何填写使用Open Office创建的表单。但是,看起来您使用的是使用Adobe LiveCycle创建的表单(类似topmostSubform[0].Page1[0].f1_01_0_[0]
的字段名称是XFA表单的典型名称)。
第6.3.5节的结论如下:
"关于表格还有很多话要说,但我们不能进一步说明 细节,直到我们谈到注释。另外,我还没有说 关于不同类型的PDF表单的任何内容:有表格 基于AcroForm技术(就像您使用Open创建的表单一样) Office),还有XFA表单(使用Adobe Designer创建)。这个 将不得不等到第8章,因为我们还有一组 PDF操作类留待覆盖。"
如果您的表单是一个没有任何AcroForm技术的动态XFA表单,则需要XFA Worker来展平它。您可以在此处下载试用版的XFA工作人员:http://itextsupport.com/download/xfaworker.html
在继续之前,您必须回答的第一个问题是:我有AcroForm还是XFA表格?如果您有XFA表单,则需要Adobe LiveCycle ES或XFA Worker来填充和展平此类表单。两者都是封闭源产品。我不知道任何支持XFA展平的免费/开源库。
PS:如果受到损坏"你的意思是你收到一条消息说This document enabled extended features...然后你打破了阅读器启用。你应该阅读第34章" iText in Action - Second Edition"找出如何避免这个消息。