mirror of
https://github.com/johnwhitington/cpdf-source.git
synced 2025-02-16 20:00:41 +01:00
More sensible combine_pages done
This commit is contained in:
parent
a0446f7f1c
commit
060ae4d851
43
cpdf.ml
43
cpdf.ml
@ -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 =
|
||||||
|
Loading…
x
Reference in New Issue
Block a user