我正在使用iTextSharp(5.5.6)来填充一些Acroform,我注意到一些奇怪的行为:

  • 在某些情况下,如果我填写AcroForm iTextSharp将文本放在TextBox字段中然后我展平表单,如果与相同的AcroForm填充槽Acrobat相比,该字段的文本在与TextBox基线不同的距离处“渲染”读者;

  • 如果我填入一个带有匹配值的复选框(以“检查”它),然后我展平表单,生成的PDF将使用不同的“检查”符号进行渲染 .

这是我用来填充和压平AcroForm的代码:

private string fill_form(string output_file)
    {
        using (PdfReader _pdfReader = new PdfReader(FormPath))
        {
            using (PdfStamper _pdfStamper = new PdfStamper(_pdfReader, new FileStream(output_file, FileMode.Create)))
            {
                _pdfStamper.AcroFields.GenerateAppearances = true;

                foreach (var _field in _pdfStamper.AcroFields.Fields)
                    foreach (TemplateField _spField in _lstFields)
                    {
                        if (_field.Key.Equals(_spField.Name))
                        {
                            switch (_spField.Type )
                            {
                                case TemplateFieldType.Text:
                                    _pdfStamper.AcroFields.SetField(_field.Key, _spField.Value);
                                    break;

                                case TemplateFieldType.Checkbox:
                                    if (_spField.Value == _spField.OnValue)
                                        _pdfStamper.AcroFields.SetField(_field.Key, _spField.OnValue);
                                    else
                                        _pdfStamper.AcroFields.SetField(_field.Key, _spField.OffValue);
                                    break;
                            }
                        }
                    }

                _pdfStamper.FormFlattening = true;
            }
        }

        return output_file;
    }

哪里我错了?