addField method
Adds a new field to the AcroForm and optionally to a specific page (as a Widget).
Implementation
void addField(PdfAcroField field, PdfObject? page) {
final root = document.catalog.params;
PdfDict acroForm;
if (root.containsKey(PdfNameTokens.acroForm)) {
final val = root[PdfNameTokens.acroForm];
acroForm = _resolveDict(val) ?? PdfDict();
} else {
acroForm = PdfDict();
root[PdfNameTokens.acroForm] = acroForm;
}
PdfArray fieldsArray;
if (acroForm.containsKey(PdfNameTokens.fields)) {
fieldsArray = _resolveArray(acroForm[PdfNameTokens.fields]) ?? PdfArray();
} else {
fieldsArray = PdfArray();
acroForm[PdfNameTokens.fields] = fieldsArray;
}
// Ensure field is an indirect object so it can be referenced
PdfIndirect fieldRef;
if (field.indirectReference != null) {
fieldRef = field.indirectReference!;
} else {
final obj = PdfObject(document, params: field.dictionary);
fieldRef = obj.ref();
}
fieldsArray.add(fieldRef);
_fields[field.name] = field;
_fieldsLoaded = true;
if (page != null) {
if (page.params is PdfDict) {
final pageDict = page.params as PdfDict;
PdfArray annots;
if (pageDict.containsKey(PdfNameTokens.annots)) {
annots = _resolveArray(pageDict[PdfNameTokens.annots]) ?? PdfArray();
} else {
annots = PdfArray();
pageDict[PdfNameTokens.annots] = annots;
}
annots.add(fieldRef);
}
}
}