///|
/// Apply a cpdf-style page callback to selected pages.
///
/// The callback returns the replacement page, the page serial whose destinations
/// should be transformed, and the transform matrix. Page numbers outside the
/// document are ignored, matching cpdf's range-membership behavior.
pub fn PdfDocument::process_pages(
self : PdfDocument,
page_numbers : ArrayView[Int],
process : (Int, @page.PdfPage) -> (
@page.PdfPage,
Int,
@geometry.TransformMatrix,
) raise @core.PdfError,
) -> PdfDocument raise @core.PdfError {
let pages = self.pages_of_pagetree()
let selected_pages = @core.pdf_number_set(page_numbers)
let rewritten : Array[@page.PdfPage] = Array(capacity=pages.length())
let matrices : Array[(Int, @geometry.TransformMatrix)] = Array(
capacity=pages.length(),
)
for index in 0.. (
@page.PdfPage,
Int,
@geometry.TransformMatrix,
) raise @core.PdfError,
) -> PdfDocument raise @core.PdfError {
document.process_pages(page_numbers, process)
}
///|
/// Compatibility wrapper matching cpdfpage's `process_pages` argument order.
pub fn pdf_process_pages_cpdf_order(
process : (Int, @page.PdfPage) -> (
@page.PdfPage,
Int,
@geometry.TransformMatrix,
) raise @core.PdfError,
document : PdfDocument,
page_numbers : ArrayView[Int],
) -> PdfDocument raise @core.PdfError {
document.process_pages(page_numbers, process)
}
///|
/// Iterate over selected pages in document order.
///
/// Page numbers outside the document are ignored.
pub fn PdfDocument::iter_pages(
self : PdfDocument,
page_numbers : ArrayView[Int],
process : (Int, @page.PdfPage) -> Unit raise @core.PdfError,
) -> Unit raise @core.PdfError {
let pages = self.pages_of_pagetree()
let selected_pages = @core.pdf_number_set(page_numbers)
for index in 0.. Unit raise @core.PdfError,
) -> Unit raise @core.PdfError {
document.iter_pages(page_numbers, process)
}
///|
/// Compatibility wrapper matching cpdfpage's `iter_pages` argument order.
pub fn pdf_iter_pages_cpdf_order(
process : (Int, @page.PdfPage) -> Unit raise @core.PdfError,
document : PdfDocument,
page_numbers : ArrayView[Int],
) -> Unit raise @core.PdfError {
document.iter_pages(page_numbers, process)
}
///|
/// Map selected pages in document order.
///
/// Page numbers outside the document are ignored.
pub fn[T] PdfDocument::map_pages(
self : PdfDocument,
page_numbers : ArrayView[Int],
process : (Int, @page.PdfPage) -> T raise @core.PdfError,
) -> Array[T] raise @core.PdfError {
let pages = self.pages_of_pagetree()
let selected_pages = @core.pdf_number_set(page_numbers)
let output : Array[T] = Array(capacity=page_numbers.length())
for index in 0.. T raise @core.PdfError,
) -> Array[T] raise @core.PdfError {
document.map_pages(page_numbers, process)
}
///|
/// Compatibility wrapper matching cpdfpage's `map_pages` argument order.
pub fn[T] pdf_map_pages_cpdf_order(
process : (Int, @page.PdfPage) -> T raise @core.PdfError,
document : PdfDocument,
page_numbers : ArrayView[Int],
) -> Array[T] raise @core.PdfError {
document.map_pages(page_numbers, process)
}