iText Documentation
本文关键字:Documentation iText | 更新日期: 2023-09-27 17:55:24
我有一个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);
}
我是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 操作类有待介绍。
如果您的表单是动态XFA表单,内部没有任何AcroForm技术,则需要XFA工作者将其展平。您可以在此处下载XFA工作者的试用版:http://itextsupport.com/download/xfaworker.html
在继续之前,您必须回答的第一个问题是:我有AcroForm还是XFA表单?如果您有XFA表单,则需要Adobe LiveCycle ES或XFA Workers来填写和拼合此类表单。两者都是闭源产品。我不知道有任何支持XFA扁平化的免费/开源库。
PS:如果"损坏"的意思是收到一条消息,说此文档启用了扩展功能...那么你正在破坏阅读器启用。您应该阅读"iText in Action - 第二版"的第 8 章,了解如何避免此消息。