diff options
Diffstat (limited to 'src/utils.rs')
| -rw-r--r-- | src/utils.rs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/utils.rs b/src/utils.rs new file mode 100644 index 0000000..7ff4e41 --- /dev/null +++ b/src/utils.rs @@ -0,0 +1,49 @@ +use lopdf::{Dictionary, Object}; + +bitflags! { + pub struct FieldFlags: u32 { + const READONLY = 0x1; + const REQUIRED = 0x2; + } +} + +bitflags! { + pub struct ButtonFlags: u32 { + const NO_TOGGLE_TO_OFF = 0x8000; + const RADIO = 0x10000; + const PUSHBUTTON = 0x20000; + const RADIO_IN_UNISON = 0x4000000; + + } +} + +bitflags! { + pub struct ChoiceFlags: u32 { + const COBMO = 0x20000; + const EDIT = 0x40000; + const SORT = 0x80000; + const MULTISELECT = 0x200000; + const DO_NOT_SPELLCHECK = 0x800000; + const COMMIT_ON_CHANGE = 0x8000000; + } +} + +pub fn is_read_only(field: &Dictionary) -> bool { + let flags = FieldFlags::from_bits_truncate(get_field_flags(field)); + + flags.intersects(FieldFlags::READONLY) +} + +pub fn is_required(field: &Dictionary) -> bool { + let flags = FieldFlags::from_bits_truncate(get_field_flags(field)); + + flags.intersects(FieldFlags::REQUIRED) +} + +pub fn get_field_flags(field: &Dictionary) -> u32 { + field + .get(b"Ff") + .unwrap_or(&Object::Integer(0)) + .as_i64() + .unwrap() as u32 +} |
