public bool RemoveField(String name, int page) {
Item item = GetFieldItem(name);
if (item == null)
return false;
PdfDictionary acroForm = (PdfDictionary)PdfReader.GetPdfObject(reader.Catalog.Get(PdfName.ACROFORM), reader.Catalog);
if (acroForm == null)
return false;
PdfArray arrayf = acroForm.GetAsArray(PdfName.FIELDS);
if (arrayf == null)
return false;
for (int k = 0; k < item.Size; ++k) {
int pageV = item.GetPage(k);
if (page != -1 && page != pageV)
continue;
PdfIndirectReference refi = item.GetWidgetRef(k);
PdfDictionary wd = item.GetWidget( k );
PdfDictionary pageDic = reader.GetPageN(pageV);
PdfArray annots = pageDic.GetAsArray(PdfName.ANNOTS);
if (annots != null) {
if (RemoveRefFromArray(annots, refi) == 0) {
pageDic.Remove(PdfName.ANNOTS);
MarkUsed(pageDic);
}
else
MarkUsed(annots);
}
PdfReader.KillIndirect(refi);
PdfIndirectReference kid = refi;
while ((refi = wd.GetAsIndirectObject(PdfName.PARENT)) != null) {
wd = wd.GetAsDict( PdfName.PARENT );
PdfArray kids = wd.GetAsArray(PdfName.KIDS);
if (RemoveRefFromArray(kids, kid) != 0)
break;
kid = refi;
PdfReader.KillIndirect(refi);
}
if (refi == null) {
RemoveRefFromArray(arrayf, kid);
MarkUsed(arrayf);
}
if (page != -1) {
item.Remove( k );
--k;
}
}
if (page == -1 || item.Size == 0)
fields.Remove(name);
return true;
}