///|
fn PdfDocumentPageSpecContext::select_dimensions(
self : PdfDocumentPageSpecContext,
candidates : ArrayView[Int],
portrait : Bool,
) -> Array[Int] raise @core.PdfError {
let pages = self.document.pages_of_pagetree()
let output : Array[Int] = Array(capacity=candidates.length())
for page_number in candidates {
if page_number >= 1 && page_number <= pages.length() {
let page = pages[page_number - 1]
let rectangle = self.document.parse_rectangle(page.mediabox)
let width = rectangle.max_x - rectangle.min_x
let height = rectangle.max_y - rectangle.min_y
if (portrait && width < height) || (!portrait && width > height) {
output.push(page_number)
}
}
}
output
}
///|
fn PdfDocumentPageSpecContext::select_annotated(
self : PdfDocumentPageSpecContext,
candidates : ArrayView[Int],
) -> Array[Int] raise @core.PdfError {
let pages = self.document.pages_of_pagetree()
let output : Array[Int] = Array(capacity=candidates.length())
for page_number in candidates {
if page_number >= 1 && page_number <= pages.length() {
let page = pages[page_number - 1]
match self.document.lookup_direct(pdf_page_annots_key(), page.rest) {
Some(PdfArray(annotations)) if annotations.length() > 0 =>
output.push(page_number)
_ => ()
}
}
}
output
}