iText7:如何解决:一个带有两个梳子的PdfTextFormField,SetValue没有MaxLen错误

时间:2019-04-03 00:15:25

标签: c# pdf itext7

我有一个PDF文件,其中包含我要使用iText7填写的Acroform。当我尝试使用field.SetValue(“ 1234”)时,当有两个具有相同FieldName的Comb字段时出现错误。这是错误还是我错过了什么?

    iText.Kernel.PdfException: 'No /MaxLen has been set even though the Comb flag has been set.'

调用textField.GetMaxLen()显示在Acrobat(10)中设置的梳长。在调用SetValue之前调用textField.SetMaxLen(10)无效。之后,带有RegenerateField()的SetMaxLen(10)也不会调用。检查pdfObject,我看到以下内容:     {<</DA /Helv 12 Tf 0 g /FT /Tx /Ff 29360128 /Kids [28 0 R 29 0 R ] /MaxLen 10 /T CombTestField >>} 所以我看到了/ MaxLen 10条目,但仍然收到上面的错误。 这两个小部件是彼此的Ctrl-C / Ctrl-V副本。都是10个字符的梳子。

var pdf = new PdfDocument(new PdfReader(inFile), new PdfWriter(outFile));
var form = PdfAcroForm.GetAcroForm(pdf, false);

var field = form.GetField("CombTestField");

if (field is PdfTextFormField textField)
{
    var maxLen = textField.GetMaxLen();
    if (maxLen == 10)
    {
        textField.SetValue("1234");
    }
}

所以我遇到2个梳状小部件的错误。我删除了其中一个,问题就消失了。我正在使用客户的表单,因此不能简单地删除第二个小部件。任何修复甚至解决方法都将受到欢迎。

编辑:这是有问题的文件。 http://www.filedropper.com/combtest EDIT2:iText 7.7.1.5

1 个答案:

答案 0 :(得分:1)

这是一个已知的错误,最近已得到修复。包含此修复程序的快照版本已可用(7.1.6-SNAPSHOT)。尽管应该存在替代性解决方法,但我不建议您将它们视为解决方案,因为自7.1.5版以来,表单处理的其他一些问题也得到了改进。因此,请尝试快照:)