Skip to main content

DocumentModel

Struct DocumentModel 

Source
pub struct DocumentModel {
    pub page_count: u32,
    pub path: String,
    pub url: String,
    pub page_words: Vec<Vec<String>>,
    pub info: Vec<(String, String)>,
    pub has_info: bool,
    pub fields: Vec<FieldModel>,
    pub named_destinations: Vec<(String, u32)>,
    pub annotations: Vec<AnnotModel>,
    pub calculate: bool,
}
Available on crate feature javascript only.
Expand description

Everything the Doc object answers from.

Every field has a defined answer when the caller says nothing, and that answer is the oracle’s for a document with no /Info, no /Fields and no path: empty strings, zero counts, and a page count of zero.

Fields§

§page_count: u32

Doc.numPages. The page count as the viewer knows it.

§path: String

Doc.path — the system path, with the oracle’s leading separator.

A leading / is prefixed when there is not one already, which is why path reads /myfile.pdf where URL reads a bare myfile.pdf.

§url: String

Doc.URL — the same path, unprefixed. JS_docGetFilePath().

§page_words: Vec<Vec<String>>

The words each page draws, in content order.

Installed by the caller, like everything else here: counting them needs a parsed content stream, which this model deliberately does not hold. pdfrum_text::content_words is the reader for a pdfrum page, and an empty list is the honest answer for a caller that did not supply one — getPageNumWords then answers 0, which is what an empty page gives.

§info: Vec<(String, String)>

The /Info entries, in the order the dictionary writes them.

A Vec rather than a map because Doc.info enumerates the whole dictionary after its nine fixed keys, in the file’s own order, and a sorted map would reorder what a golden pins.

§has_info: bool

Whether the document has an /Info dictionary at all.

The distinction is load-bearing and is not “is info empty”: with no /Info at all, every metadata getter and Doc.info itself throw Object no longer exists., where an /Info present but empty answers "" for each. GetPropertyInternal returns kBadObjectError the moment GetInfoDict() is null.

§fields: Vec<FieldModel>

Every terminal field, in /AcroForm /Fields order.

The list Doc.numFields counts and Doc.getNthFieldName(n) indexes, and the space FieldRef::index names.

§named_destinations: Vec<(String, u32)>

The named destinations Doc.gotoNamedDest can reach, and the page each lands on.

§annotations: Vec<AnnotModel>

Every annotation Doc.getAnnot and Doc.getAnnots can see, by page.

Pop-ups and widgets are already excluded: getAnnots skips both subtypes, so a caller that includes them would make bug_421304870’s count wrong. Filtering here rather than in the binding keeps the rule beside the /Annots walk that can see the subtypes.

§calculate: bool

Doc.calculate — whether a recalculation sweep runs at all.

true is the oracle’s initial state (CPDFSDK_InteractiveForm’s calculate_ defaults on), and a script may turn it off.

Implementations§

Source§

impl DocumentModel

Source

pub fn empty() -> DocumentModel

The model for a document with nothing in it — no pages, no fields, no /Info.

Not Default, because calculate defaults on upstream and a derived Default would say otherwise. Every other field’s zero value is already the right answer.

Source

pub fn field_at(&self, index: usize) -> Option<&FieldModel>

The field at a /Fields position.

Source

pub fn fields_named<'a>( &'a self, name: &str, ) -> impl Iterator<Item = &'a FieldModel> + 'a

Every terminal field a name reaches, in /Fields order.

CountFields(name) is this list’s length and GetField(j, name) is its jth entry, so a name that is a whole subtree answers every leaf under it rather than one — which is what makes AFSimple_Calculate('SUM', ['Group']) add a group’s fields.

Source

pub fn field_named(&self, name: &str) -> Option<usize>

The position of the field Doc.getField(name) resolves to.

§A name may be a whole subtree, and it answers the first leaf under it

The field tree has a node per name segment, not per terminal field. So a name that only names structure — one whose kids each carry their own /T — is still a node, and the answer is the first terminal field beneath it.

The object’s .name still reads the name the caller asked for rather than the field’s own, which is why the Field object carries the lookup name on the object.

A prefix that is not a whole segment matches nothing: MyFie is not a node.

Source

pub fn count_fields(&self, name: &str) -> usize

How many terminal fields sit under the node a name reaches.

Zero means Doc.getField answers undefined.

Trait Implementations§

Source§

impl Clone for DocumentModel

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DocumentModel

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for DocumentModel

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl PartialEq for DocumentModel

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for DocumentModel

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.