This commit is contained in:
John Whitington 2023-05-11 19:18:14 +01:00
parent 5c05d80b6b
commit 51b1c8ffce
4 changed files with 18 additions and 17 deletions

View File

@ -4467,7 +4467,7 @@ let go () =
let ops = match !drawops with [("_MAIN", ops)] -> rev ops | _ -> error "not enough -end-xobj or -et" in
write_pdf
false
(Cpdfdraw.draw ~filename:args.original_filename ~bates:args.bates ~batespad:args.batespad args.fast range pdf ops)
(Cpdfdraw.draw ~fast:args.fast ~filename:args.original_filename ~bates:args.bates ~batespad:args.batespad args.fast range pdf ops)
| Some (Composition json) ->
let pdf = get_single_pdf args.op false in
let filesize =

View File

@ -293,39 +293,37 @@ let minimum_resource_number pdf range =
let contains_specials drawops =
List.exists (function SpecialText _ -> true | _ -> false) drawops
let draw_single ~filename ~bates ~batespad fast range pdf drawops =
let draw_single ~fast ~underneath ~filename ~bates ~batespad fast range pdf drawops =
(res ()).num <- max (res ()).num (minimum_resource_number pdf range);
let endpage = Pdfpage.endpage pdf in
let pages = Pdfpage.pages_of_pagetree pdf in
let str =
let ops =
if contains_specials drawops
then None
else Some (Pdfops.string_of_ops (ops_of_drawops pdf endpage filename bates batespad 0 (hd pages) drawops))
else Some (ops_of_drawops pdf endpage filename bates batespad 0 (hd pages) drawops)
in
let ss =
map2
(fun n p ->
if mem n range
then (match str with Some x -> x | None -> Pdfops.string_of_ops (ops_of_drawops pdf endpage filename bates batespad n p drawops))
else "")
then (match ops with Some x -> x | None -> ops_of_drawops pdf endpage filename bates batespad n p drawops)
else [])
(ilist 1 endpage)
pages
in
let pdf = ref pdf in
iter2
(fun n s -> Printf.printf "Page %i\n%!" n; if mem n range then pdf := Cpdftweak.append_page_content s false fast [n] !pdf)
(ilist 1 endpage)
ss;
let pdf = !pdf in
let pages =
map2
(fun n p -> if not (mem n range) then p else {p with Pdfpage.resources = update_resources pdf p.Pdfpage.resources})
map3
(fun n p ops ->
if not (mem n range) then p else
let page = {p with Pdfpage.resources = update_resources pdf p.Pdfpage.resources} in
(if underneath then Pdfpage.prepend_operators else Pdfpage.postpend_operators) pdf ops ~fast page)
(ilist 1 endpage)
(Pdfpage.pages_of_pagetree pdf)
ss
in
Pdfpage.change_pages true pdf pages
let draw ~filename ~bates ~batespad fast range pdf drawops =
let draw ?(fast=false) ?(underneath=false) ~filename ~bates ~batespad fast range pdf drawops =
resstack := [empty_res ()];
(res ()).time <- Cpdfstrftime.current_time ();
let pdf = ref pdf in
@ -335,7 +333,7 @@ let draw ~filename ~bates ~batespad fast range pdf drawops =
let chunks = ref (split_around (eq NewPage) drawops) in
while !chunks <> [] do
reset_state ();
if hd !chunks <> [] then pdf := draw_single ~filename ~bates ~batespad fast !range !pdf (hd !chunks);
if hd !chunks <> [] then pdf := draw_single ~fast ~underneath ~filename ~bates ~batespad fast !range !pdf (hd !chunks);
chunks := tl !chunks;
if !chunks <> [] then begin
let endpage = Pdfpage.endpage !pdf in

View File

@ -45,7 +45,9 @@ type drawops =
| RenderMode of int
| Rise of float
val draw : filename:string ->
val draw : ?fast:bool ->
?underneath:bool ->
filename:string ->
bates:int ->
batespad:int option ->
bool -> int list -> Pdf.t -> drawops list -> Pdf.t

View File

@ -15,6 +15,7 @@
%Document -open-at-page-custom
%Document -text-width
%Error handling for png /jpeg loaders
%-underneath for -draw
\documentclass{book}
% Edit here to produce cpdfmanual.pdf, cpdflibmanual.pdf, pycpdfmanual.pdf,
% dotnetcpdflibmanual.pdf, jcpdflibmanual.pdf jscpdflibmanual.pdf etc.