More sensible combine_pages done

This commit is contained in:
John Whitington 2016-11-25 17:38:19 +00:00
parent a0446f7f1c
commit 060ae4d851

43
cpdf.ml
View File

@ -2384,21 +2384,16 @@ let equalize_pages under over =
else else
under, over under, over
let combine_pages (fast : bool) under over scaletofit swap equalize = let combine_pages fast under over scaletofit swap equalize =
let debug_combine_pages = false in (* DEBUG *) let debug_combine_pages = false in
let debug_pdf pdf n = let debug_pdf pdf n =
if debug_combine_pages then if debug_combine_pages then
begin begin Pdf.remove_unreferenced pdf; Pdfwrite.pdf_to_file pdf n end
Pdf.remove_unreferenced pdf;
Pdfwrite.pdf_to_file pdf n
end
in in
Pdfpage.add_prefix over (Pdfpage.shortest_unused_prefix under); Pdfpage.add_prefix over (Pdfpage.shortest_unused_prefix under);
let marks_under = Pdfmarks.read_bookmarks under in let marks_under, marks_over = Pdfmarks.read_bookmarks under, Pdfmarks.read_bookmarks over in
let marks_over = Pdfmarks.read_bookmarks over in
let under, over = if equalize then equalize_pages under over else under, over in let under, over = if equalize then equalize_pages under over else under, over in
let under_length = Pdfpage.endpage under in let under_length, over_length = Pdfpage.endpage under, Pdfpage.endpage over in
let over_length = Pdfpage.endpage over in
if under_length <> over_length then if under_length <> over_length then
raise (Pdf.PDFError "combine_pages: not of equal length") raise (Pdf.PDFError "combine_pages: not of equal length")
else else
@ -2416,26 +2411,18 @@ let combine_pages (fast : bool) under over scaletofit swap equalize =
map2 map2
(fun o u -> (fun o u ->
do_stamp do_stamp
false fast (BottomLeft 0.) false false scaletofit (not swap) false fast (BottomLeft 0.) false false scaletofit (not swap) merged o u over)
merged o u over)
over_pages under_pages over_pages under_pages
in in
(* we use new_pages @ new_pages here to preserve the number of pages (* Build the changes. 123456 -> 123123 *)
* so that Pdfpage.change_pages can do its renumbering properly. let changes =
* Otherwise things like outlines are lost. TODO: Fix let len = List.length new_pages in
* Pdfpage.change_pages properly. For now, we just use combine (ilist 1 (len * 2)) (let x = ilist 1 len in x @ x)
* Pdfpage.pdf_of_pages afterward to chop it. *) in
(* See also combine_pages below *) let changed = Pdfpage.change_pages ~changes true merged new_pages in
let changed = Pdfpage.change_pages ~is_combine_pages:true true merged new_pages in let r = Pdfmarks.add_bookmarks (marks_under @ marks_over) changed in
debug_pdf changed "changed.pdf"; debug_pdf r "final.pdf";
let cut = r
Pdfpage.pdf_of_pages ~retain_numbering:true changed (ilist 1 (length new_pages))
in
debug_pdf cut "cut.pdf";
(* Now shorten to just new_pages *)
let r = Pdfmarks.add_bookmarks (marks_under @ marks_over) cut in
debug_pdf r "final.pdf";
r
let nobble_page pdf _ page = let nobble_page pdf _ page =
let minx, miny, maxx, maxy = let minx, miny, maxx, maxy =