Adds -shift-boxes

This commit is contained in:
John Whitington 2024-01-22 16:36:37 +00:00
parent 415c172354
commit 15842dbd36
3 changed files with 21 additions and 1 deletions

View File

@ -20,6 +20,7 @@ o Build PDF files from JBIG2 streams, including globals
o Reprocess images within PDFs to further compress them o Reprocess images within PDFs to further compress them
o Extract streams to disk o Extract streams to disk
o Explore PDFs by printing objects o Explore PDFs by printing objects
o Shift page boxes with -shift-boxes
Extended features: Extended features:

View File

@ -118,6 +118,7 @@ type op =
| PadMultiple of int | PadMultiple of int
| PadMultipleBefore of int | PadMultipleBefore of int
| Shift | Shift
| ShiftBoxes
| Scale | Scale
| ScaleToFit | ScaleToFit
| ScaleContents of float | ScaleContents of float
@ -260,6 +261,7 @@ let string_of_op = function
| PadMultiple _ -> "PadMultiple" | PadMultiple _ -> "PadMultiple"
| PadMultipleBefore _ -> "PadMultipleBefore" | PadMultipleBefore _ -> "PadMultipleBefore"
| Shift -> "Shift" | Shift -> "Shift"
| ShiftBoxes -> "ShiftBoxes"
| Scale -> "Scale" | Scale -> "Scale"
| ScaleToFit -> "ScaleToFit" | ScaleToFit -> "ScaleToFit"
| ScaleContents _ -> "ScaleContents" | ScaleContents _ -> "ScaleContents"
@ -907,7 +909,7 @@ let banned banlist = function
| Rotateby _ | Upright | VFlip | HFlip | Impose _ | Chop _ -> | Rotateby _ | Upright | VFlip | HFlip | Impose _ | Chop _ ->
mem Pdfcrypt.NoAssemble banlist mem Pdfcrypt.NoAssemble banlist
| TwoUp|TwoUpStack|RemoveBookmarks|AddRectangle|RemoveText| | TwoUp|TwoUpStack|RemoveBookmarks|AddRectangle|RemoveText|
Draft|Shift|Scale|ScaleToFit|RemoveAttachedFiles| Draft|Shift|ShiftBoxes | Scale|ScaleToFit|RemoveAttachedFiles|
RemoveAnnotations|RemoveFonts|Crop|RemoveCrop|Trim|RemoveTrim|Bleed|RemoveBleed|Art|RemoveArt| RemoveAnnotations|RemoveFonts|Crop|RemoveCrop|Trim|RemoveTrim|Bleed|RemoveBleed|Art|RemoveArt|
CopyBox|MediaBox|HardBox _|SetTrapped|SetUntrapped|Presentation| CopyBox|MediaBox|HardBox _|SetTrapped|SetUntrapped|Presentation|
BlackText|BlackLines|BlackFills|CopyFont _|StampOn _|StampUnder _|StampAsXObject _| BlackText|BlackLines|BlackFills|CopyFont _|StampOn _|StampUnder _|StampAsXObject _|
@ -1201,6 +1203,10 @@ let setshift s =
setop Shift (); setop Shift ();
args.coord <- s args.coord <- s
let setshiftboxes s =
setop ShiftBoxes ();
args.coord <- s
let setscale s = let setscale s =
setop Scale (); setop Scale ();
args.coord <- s args.coord <- s
@ -2171,6 +2177,9 @@ and specs =
("-shift", ("-shift",
Arg.String setshift, Arg.String setshift,
" -shift \"dx dy\" shifts the chosen pages"); " -shift \"dx dy\" shifts the chosen pages");
("-shift-boxes",
Arg.String setshiftboxes,
" -shift \"dx dy\" shifts the chosen pages");
("-rotate", ("-rotate",
Arg.Int setrotate, Arg.Int setrotate,
" Set rotation of pages to 0, 90, 180, 270"); " Set rotation of pages to 0, 90, 180, 270");
@ -4183,6 +4192,15 @@ let go () =
let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in
let dxdylist = Cpdfcoord.parse_coordinates pdf args.coord in let dxdylist = Cpdfcoord.parse_coordinates pdf args.coord in
write_pdf false (Cpdfpage.shift_pdf ~fast:args.fast dxdylist pdf range) write_pdf false (Cpdfpage.shift_pdf ~fast:args.fast dxdylist pdf range)
| Some ShiftBoxes ->
let pdf = get_single_pdf args.op false in
let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in
let dxdylist = Cpdfcoord.parse_coordinates pdf args.coord in
let dx, dy = match dxdylist with (a, b)::_ -> a, b | _ -> 0.0, 0.0 in
Printf.printf "dx = %f, dy = %f\n" dx dy;
let f (xmin, xmax, ymin, ymax) = (xmin +. dx, xmax +. dx, ymin +. dy, ymax +. dy) in
let fpage _ p = Cpdfpage.change_boxes f pdf p in
write_pdf false (Cpdfpage.process_pages (Pdfpage.ppstub fpage) pdf range)
| Some Scale -> | Some Scale ->
let pdf = get_single_pdf args.op false in let pdf = get_single_pdf args.op false in
let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in let range = parse_pagespec_allow_empty pdf (get_pagespec ()) in

View File

@ -16,6 +16,7 @@
%Document -extract-stream - check enc %Document -extract-stream - check enc
%Document -obj - check enc %Document -obj - check enc
%Document -merge-no-struct-trees in merge and collate %Document -merge-no-struct-trees in merge and collate
%Document -shift-boxes
\documentclass{book} \documentclass{book}
% Edit here to produce cpdfmanual.pdf, cpdflibmanual.pdf, pycpdfmanual.pdf, % Edit here to produce cpdfmanual.pdf, cpdflibmanual.pdf, pycpdfmanual.pdf,
% dotnetcpdflibmanual.pdf, jcpdflibmanual.pdf jscpdflibmanual.pdf etc. % dotnetcpdflibmanual.pdf, jcpdflibmanual.pdf jscpdflibmanual.pdf etc.