From 5c7dcfcf30e0e96b39473fbc48cc87fa5959113b Mon Sep 17 00:00:00 2001 From: John Whitington Date: Tue, 9 Jul 2019 15:03:53 +0100 Subject: [PATCH] twoup/twoup-stack now support fast/slow speed and protection --- cpdf.ml | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/cpdf.ml b/cpdf.ml index 581702d..49a38ce 100644 --- a/cpdf.ml +++ b/cpdf.ml @@ -3139,11 +3139,19 @@ let twoup_pages_inner isstack fast pdf = function Pdfops.Op_W; Pdfops.Op_n] in - let ops = Pdfops.parse_operators pdf resources' contents in - Pdfops.stream_of_ops - ([Pdfops.Op_q] @ [Pdfops.Op_cm transform] @ clipops @ ops @ [Pdfops.Op_Q]) + (* If fast, no q/Q protection and no parsing of operators. *) + if fast then + let before = Pdfops.stream_of_ops (Pdfops.Op_q::Pdfops.Op_cm transform::clipops) in + let after = Pdfops.stream_of_ops [Pdfops.Op_Q] in + [before] @ contents @ [after] + else + (* If slow, use protect from Pdfpage. *) + let ops = Pdfpage.protect pdf resources' contents @ Pdfops.parse_operators pdf resources' contents in + [Pdfops.stream_of_ops + ([Pdfops.Op_q] @ [Pdfops.Op_cm transform] @ clipops @ ops @ [Pdfops.Op_Q])] in - map2 + List.flatten + (map2 (fun p -> transform_stream (match Pdf.lookup_direct pdf "/CropBox" p.Pdfpage.rest with @@ -3151,7 +3159,7 @@ let twoup_pages_inner isstack fast pdf = function | Some box -> box) p.Pdfpage.content) pages - (take (((if isstack then twoup_stack_transforms else twoup_transforms) h.Pdfpage.mediabox)) (length pages)) + (take (((if isstack then twoup_stack_transforms else twoup_transforms) h.Pdfpage.mediabox)) (length pages))) in {Pdfpage.mediabox = if isstack then