我有一个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);
}
1 回答
我是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节的结论如下:
如果您的表单是一个没有任何AcroForm技术的动态XFA表单,则需要XFA Worker来展平它 . 您可以在此处下载XFA Worker的试用版:http://itextsupport.com/download/xfaworker.html
在继续之前,您必须回答的第一个问题是:我是否有AcroForm或XFA表格?如果您有XFA表单,则需要Adobe LiveCycle ES或XFA Worker来填充和展平此类表单 . 两者都是封闭源产品 . 我不知道任何支持XFA展平的免费/开源库 .
PS:如果通过"damaged"你的意思是你得到一条消息说This document enabled extended features...那么你打破了读取器启用 . 您应该阅读"iText in Action - Second Edition"的第8章,了解如何避免此消息 .