This commit is contained in:
John Whitington 2022-01-03 15:13:03 +00:00
parent 2a3afc8f85
commit 3698f0425f
2 changed files with 28 additions and 18 deletions

View File

@ -3006,7 +3006,7 @@ let collate (names, pdfs, ranges) =
split3 (rev !nis) split3 (rev !nis)
let warn_prerotate range pdf = let warn_prerotate range pdf =
if not (Cpdfpage.allupright range pdf) then if not args.prerotate && not (Cpdfpage.allupright range pdf) then
Printf.eprintf "Some pages in the range have non-zero rotation or non (0,0)-based mediabox. \ Printf.eprintf "Some pages in the range have non-zero rotation or non (0,0)-based mediabox. \
Consider adding -prerotate or pre-processing with -upright. \ Consider adding -prerotate or pre-processing with -upright. \
To silence this warning use -no-warn-rotate\n%!" To silence this warning use -no-warn-rotate\n%!"
@ -3684,6 +3684,7 @@ let go () =
| StandardFont f -> Some f | StandardFont f -> Some f
| OtherFont f -> None (* it's in fontname *) | OtherFont f -> None (* it's in fontname *)
in in
warn_prerotate range pdf;
let pdf = let pdf =
if args.prerotate then prerotate range pdf else pdf if args.prerotate then prerotate range pdf else pdf
and filename = and filename =
@ -3757,8 +3758,16 @@ let go () =
in in
write_pdf false pdf write_pdf false pdf
| Some (CombinePages over) -> | Some (CombinePages over) ->
let underpdf = get_single_pdf args.op false in
let overpdf = pdfread_pdf_of_file None None over in
warn_prerotate (parse_pagespec underpdf "all") underpdf;
warn_prerotate (parse_pagespec overpdf "all") overpdf;
write_pdf false write_pdf false
(Cpdfpage.combine_pages args.fast (get_single_pdf args.op false) (pdfread_pdf_of_file None None over) false false true) (Cpdfpage.combine_pages
args.fast
(prerotate (parse_pagespec underpdf "all") underpdf)
(prerotate (parse_pagespec overpdf "all") overpdf)
false false true)
| Some Encrypt -> | Some Encrypt ->
let pdf = get_single_pdf args.op false in let pdf = get_single_pdf args.op false in
let pdf = Cpdfsqueeze.recompress_pdf pdf let pdf = Cpdfsqueeze.recompress_pdf pdf

View File

@ -131,21 +131,6 @@ let change_boxes f pdf page =
make_mediabox (f (Pdf.parse_rectangle page.Pdfpage.mediabox)); make_mediabox (f (Pdf.parse_rectangle page.Pdfpage.mediabox));
Pdfpage.rest = rest'} Pdfpage.rest = rest'}
(* Change a page's media box so its minimum x and y are 0, making other
operations simpler to think about. Any shift that is done is reflected in
other boxes (clip etc.) *)
let rectify_boxes ?(fast=false) pdf page =
let minx, miny, _, _ =
Pdf.parse_rectangle page.Pdfpage.mediabox
in
let f (iminx, iminy, imaxx, imaxy) =
iminx -. minx, iminy -. miny, imaxx -. minx, imaxy -. miny
in
let page = change_boxes f pdf page in
if minx <> 0. || miny <> 0.
then
begin let p, _, _ = shift_page ~fast [(-.minx),(-.miny)] pdf 1 page in p end
else page
(* Scale contents *) (* Scale contents *)
let scale_page_contents ?(fast=false) scale position pdf pnum page = let scale_page_contents ?(fast=false) scale position pdf pnum page =
@ -277,6 +262,22 @@ let transform_contents ?(fast=false) tr pdf page =
Cpdfutil.transform_annotations pdf tr page.Pdfpage.rest; Cpdfutil.transform_annotations pdf tr page.Pdfpage.rest;
Pdfpage.prepend_operators pdf [transform_op] ~fast page Pdfpage.prepend_operators pdf [transform_op] ~fast page
(* Change a page's media box so its minimum x and y are 0, making other
operations simpler to think about. Any shift that is done is reflected in
other boxes (clip etc.) *)
let rectify_boxes ?(fast=false) pdf page =
let minx, miny, _, _ =
Pdf.parse_rectangle page.Pdfpage.mediabox
in
let f (iminx, iminy, imaxx, imaxy) =
iminx -. minx, iminy -. miny, imaxx -. minx, imaxy -. miny
in
let page = change_boxes f pdf page in
if minx <> 0. || miny <> 0.
then
begin let p, _, _ = shift_page ~fast [(-.minx),(-.miny)] pdf 1 page in p end
else page
let upright ?(fast=false) range pdf = let upright ?(fast=false) range pdf =
if allupright range pdf then pdf else if allupright range pdf then pdf else
let upright_page _ pnum page = let upright_page _ pnum page =