@Override
 protected void doResetFields(List fields) {
   for (Iterator i = fields.iterator(); i.hasNext(); ) {
     PDAcroFormField field = (PDAcroFormField) i.next();
     field.reset();
     AppearanceCreatorTools.setAppearanceCreator(field.getLogicalRoot(), null);
     createAppearance(field);
   }
   recalculate();
 }
 protected void recalculateField(PDAcroFormField source, PDAcroFormField field) {
   String fieldValue = field.getValueString();
   TriggerEvent trigger = triggerCalculate(field, fieldValue, source);
   if (trigger.getRc()) {
     String newFieldValue = trigger.getValueString();
     if ((newFieldValue != null) && !newFieldValue.equals(fieldValue)) {
       field.setValueString(trigger.getValueString());
       createAppearance(field);
     }
   }
 }
 @Override
 protected void basicSetFieldValue(PDAcroFormField field, List value) {
   if (field == null) {
     return;
   }
   PDAcroFormField rootField = field.getLogicalRoot();
   COSObject oldValue = rootField.cosGetValue();
   rootField.setValueStrings(value);
   COSObject newValue = rootField.cosGetValue();
   if (changed(oldValue, newValue)) {
     createAppearance(rootField);
     recalculate(rootField);
   }
 }
 @Override
 protected void basicSetFieldValue(PDAcroFormField field, PDSignature value) {
   if (field == null) {
     return;
   }
   PDAcroFormField rootField = field.getLogicalRoot();
   if (!rootField.isTypeSig()) {
     throw new IllegalArgumentException("signature field expected"); // $NON-NLS-1$
   }
   PDAFSignatureField sigField = (PDAFSignatureField) rootField;
   COSObject oldValue = sigField.cosGetValue();
   sigField.setSignature(value);
   COSObject newValue = sigField.cosGetValue();
   if (changed(oldValue, newValue)) {
     recalculate(sigField);
   }
 }
 @Override
 protected void basicSetFieldValue(PDAcroFormField field, String value) {
   if (field == null) {
     return;
   }
   PDAcroFormField rootField = field.getLogicalRoot();
   if (isValidate()) {
     TriggerEvent trigger = triggerValidate(rootField, value);
     if (!trigger.getRc()) {
       return;
     }
     value = trigger.getValueString();
   }
   COSObject oldValue = rootField.cosGetValue();
   rootField.setValueString(value);
   COSObject newValue = rootField.cosGetValue();
   if (changed(oldValue, newValue)) {
     createAppearance(rootField);
     recalculate(rootField);
   }
 }
 protected void createAppearance(PDAcroFormField field) {
   if (field.isTypeBtn()) {
     return;
   }
   AppearanceCreatorTools.createAppearance(field.getLogicalRoot());
 }