ITextSharp:从表单字段中删除字符限制
我正在尝试从表单字段中删除字符限制,然后使用iTextSharp进行设置 . 我可以使用Adobe Acrobat手动执行此操作,但我们正在处理大量PDF文档,我们使用iTextSharp动态标记表单字段 . 我们没有构建这些PDF文档,我们只是将它们用作我们填充数据的模板 . 我想知道是否有办法使用api删除表单字段的字符限制,所以我们不必手动检查每个字段的字符限制 .
我猜这可以用SetFieldProperty方法完成,但我不确定如何 .
提前致谢
回答(2)
我能够使用Chris提供的信息来解决这个问题 . 我试图在设置值之前删除任何字段上的任何最大长度限制 .
//TargetObject is an AcroFields object
AcroFields.Item item = TargetObject.GetFieldItem({FieldName});
if (item != null)
{
foreach (var i in item.merged)
{
if (i.GetType() == typeof(PdfDictionary))
{
PdfDictionary dictionary = (PdfDictionary)i;
if (dictionary.Contains(PdfName.MAXLEN))
{
dictionary.Remove(PdfName.MAXLEN);
}
break; //no need to continue once we find the dictionary and remove max length
}
}
}
2 years ago
如果您了解PDF格式的内部结构,这很容易!下面的代码与code I wrote for a different type of PDF annotation here几乎相同 . 该页面将更详细地解释一些内容,并为您提供一些参考 . 但基本上诀窍是遍历每个页面,然后遍历每个页面的注释(表单字段属于此类别等),然后查找设置了最大长度的文本字段,并删除该限制 . 所有这些工作都是在一个只读的
PdfReader
对象上完成的,所以一旦我们完成,我们需要再次循环并使用某种PdfWriter
将其写回 .下面是一个完整的C#2010 WinForms应用程序,目标是iTextSharp 5.2.1,它显示了所有这些 . 有关更多详细信息,请参阅代码中的注释 .