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, 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);
   }
 }