62 lines
2.2 KiB
OCaml
62 lines
2.2 KiB
OCaml
|
open Pdfutil
|
||
|
|
||
|
(* Output information for each page *)
|
||
|
let output_page_info pdf range =
|
||
|
let pages = Pdfpage.pages_of_pagetree pdf
|
||
|
and labels = Pdfpagelabels.read pdf in
|
||
|
let getbox page box =
|
||
|
if box = "/MediaBox" then
|
||
|
match page.Pdfpage.mediabox with
|
||
|
| Pdf.Array [a; b; c; d] ->
|
||
|
Printf.sprintf "%f %f %f %f"
|
||
|
(Pdf.getnum a) (Pdf.getnum b) (Pdf.getnum c) (Pdf.getnum d)
|
||
|
| _ -> ""
|
||
|
else
|
||
|
match Pdf.lookup_direct pdf box page.Pdfpage.rest with
|
||
|
| Some (Pdf.Array [a; b; c; d]) ->
|
||
|
Printf.sprintf "%f %f %f %f"
|
||
|
(Pdf.getnum a) (Pdf.getnum b) (Pdf.getnum c) (Pdf.getnum d)
|
||
|
| _ -> ""
|
||
|
and rotation page =
|
||
|
Pdfpage.int_of_rotation page.Pdfpage.rotate
|
||
|
in
|
||
|
iter
|
||
|
(fun pnum ->
|
||
|
let page = select pnum pages in
|
||
|
Printf.printf "Page %i:\n" pnum;
|
||
|
Printf.printf "Label: %s\n"
|
||
|
(try Pdfpagelabels.pagelabeltext_of_pagenumber pnum labels with Not_found -> "");
|
||
|
Printf.printf "MediaBox: %s\n" (getbox page "/MediaBox");
|
||
|
Printf.printf "CropBox: %s\n" (getbox page "/CropBox");
|
||
|
Printf.printf "BleedBox: %s\n" (getbox page "/BleedBox");
|
||
|
Printf.printf "TrimBox: %s\n" (getbox page "/TrimBox");
|
||
|
Printf.printf "ArtBox: %s\n" (getbox page "/ArtBox");
|
||
|
Printf.printf "Rotation: %i\n" (rotation page))
|
||
|
range
|
||
|
|
||
|
let process_pages f pdf range =
|
||
|
let pages = Pdfpage.pages_of_pagetree pdf in
|
||
|
let pages', pagenumbers, matrices = (* new page objects, page number, matrix *)
|
||
|
split3
|
||
|
(map2
|
||
|
(fun n p -> if mem n range then f n p else (p, n, Pdftransform.i_matrix))
|
||
|
(ilist 1 (length pages))
|
||
|
pages)
|
||
|
in
|
||
|
Pdfpage.change_pages ~matrices:(combine pagenumbers matrices) true pdf pages'
|
||
|
|
||
|
let iter_pages f pdf range =
|
||
|
let pages = Pdfpage.pages_of_pagetree pdf in
|
||
|
iter2
|
||
|
(fun n p -> if mem n range then f n p)
|
||
|
(ilist 1 (length pages))
|
||
|
pages
|
||
|
|
||
|
let map_pages f pdf range =
|
||
|
let pages = Pdfpage.pages_of_pagetree pdf in
|
||
|
option_map2
|
||
|
(fun n p -> if mem n range then Some (f n p) else None)
|
||
|
(ilist 1 (length pages))
|
||
|
pages
|
||
|
|