From 4bd79e01bbd79465eab7023adc52789634f78eaa Mon Sep 17 00:00:00 2001 From: John Whitington Date: Fri, 24 Mar 2023 17:00:17 +0000 Subject: [PATCH] Beginning xobject experiment --- cpdfpage.ml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/cpdfpage.ml b/cpdfpage.ml index 9bc350d..219e70d 100644 --- a/cpdfpage.ml +++ b/cpdfpage.ml @@ -83,7 +83,26 @@ let hard_box pdf range boxname mediabox_if_missing fast = pdf range +(* Convert a page to a Form XObject *) +let xobject_of_page pdf page = + let concatted_streams = + let streams = map (Pdf.direct pdf) page.Pdfpage.content in + iter (Pdfcodec.decode_pdfstream pdf) streams; + let bytess = + map (function Pdf.Stream {contents = (_, Got x)} -> x | _ -> raise (Pdf.PDFError "xobject_of_page")) streams + in + Pdfops.concat_bytess bytess + in + Pdf.Stream + {contents = + (Pdf.Dictionary [("/Type", Pdf.Name "/XObject"); + ("/Subtype", Pdf.Name "/Form"); + ("/Resources", page.Pdfpage.resources); + ("/BBox", page.Pdfpage.mediabox)], + Got concatted_streams)} + let shift_page ?(fast=false) dxdylist pdf pnum page = + let xobj = xobject_of_page pdf page in let dx, dy = List.nth dxdylist (pnum - 1) in let transform_op = Pdfops.Op_cm (Pdftransform.matrix_of_op (Pdftransform.Translate (dx, dy)))