Added -show-boxes command
This commit is contained in:
parent
293af1ed9f
commit
cf66fa3d72
|
@ -185,6 +185,7 @@ type op =
|
||||||
| BookmarksOpenToLevel of int
|
| BookmarksOpenToLevel of int
|
||||||
| CreatePDF
|
| CreatePDF
|
||||||
| RemoveAllText
|
| RemoveAllText
|
||||||
|
| ShowBoxes
|
||||||
|
|
||||||
let string_of_op = function
|
let string_of_op = function
|
||||||
| CopyFont _ -> "CopyFont"
|
| CopyFont _ -> "CopyFont"
|
||||||
|
@ -303,6 +304,7 @@ let string_of_op = function
|
||||||
| BookmarksOpenToLevel _ -> "BookmarksOpenToLevel"
|
| BookmarksOpenToLevel _ -> "BookmarksOpenToLevel"
|
||||||
| CreatePDF -> "CreatePDF"
|
| CreatePDF -> "CreatePDF"
|
||||||
| RemoveAllText -> "RemoveAllText"
|
| RemoveAllText -> "RemoveAllText"
|
||||||
|
| ShowBoxes -> "ShowBoxes"
|
||||||
|
|
||||||
(* Inputs: filename, pagespec. *)
|
(* Inputs: filename, pagespec. *)
|
||||||
type input_kind =
|
type input_kind =
|
||||||
|
@ -653,7 +655,8 @@ let banned banlist = function
|
||||||
| ListBookmarks | ImageResolution _ | MissingFonts
|
| ListBookmarks | ImageResolution _ | MissingFonts
|
||||||
| PrintPageLabels | Clean | Compress | Decompress
|
| PrintPageLabels | Clean | Compress | Decompress
|
||||||
| RemoveUnusedResources | ChangeId | CopyId _ | ListSpotColours | Version
|
| RemoveUnusedResources | ChangeId | CopyId _ | ListSpotColours | Version
|
||||||
| DumpAttachedFiles | RemoveMetadata | EmbedMissingFonts | BookmarksOpenToLevel _ | CreatePDF -> false (* Always allowed *)
|
| DumpAttachedFiles | RemoveMetadata | EmbedMissingFonts | BookmarksOpenToLevel _ | CreatePDF
|
||||||
|
| ShowBoxes -> false (* Always allowed *)
|
||||||
(* Combine pages is not allowed because we would not know where to get the
|
(* Combine pages is not allowed because we would not know where to get the
|
||||||
-recrypt from -- the first or second file? *)
|
-recrypt from -- the first or second file? *)
|
||||||
| ExtractText | ExtractImages | ExtractFontFile
|
| ExtractText | ExtractImages | ExtractFontFile
|
||||||
|
@ -1822,6 +1825,9 @@ and specs =
|
||||||
("-hard-box",
|
("-hard-box",
|
||||||
Arg.String sethardbox,
|
Arg.String sethardbox,
|
||||||
" Hard crop specified pages to the given box");
|
" Hard crop specified pages to the given box");
|
||||||
|
("-show-boxes",
|
||||||
|
Arg.Unit (setop ShowBoxes),
|
||||||
|
" Show boxes by adding rectangles to pages");
|
||||||
("-remove-crop",
|
("-remove-crop",
|
||||||
Arg.Unit (setop RemoveCrop),
|
Arg.Unit (setop RemoveCrop),
|
||||||
" Remove cropping on specified pages");
|
" Remove cropping on specified pages");
|
||||||
|
@ -3633,6 +3639,52 @@ let remove_all_text range pdf =
|
||||||
pagenums;
|
pagenums;
|
||||||
Pdfpage.change_pages true !pdf (rev !pages')
|
Pdfpage.change_pages true !pdf (rev !pages')
|
||||||
|
|
||||||
|
(* Add rectangles on top of pages to show Media, Crop, Art, Trim, Bleed boxes.
|
||||||
|
*
|
||||||
|
* We use different dash lengths and colours to help distinguish coincident
|
||||||
|
* boxes The sequence of operators is postpended to the page content,
|
||||||
|
* appropriately protected to prevent pollution of matrices.
|
||||||
|
*
|
||||||
|
* /MediaBox: Solid red line
|
||||||
|
* /CropBox: Dashed 7 on 7 off green line
|
||||||
|
* /ArtBox: Dashed 5 on 5 off blue line
|
||||||
|
* /TrimBox: Dashed 3 on 3 off orange line
|
||||||
|
* /BleedBox: Dashed 2 on 2 off pink line *)
|
||||||
|
let get_rectangle pdf page box =
|
||||||
|
if box = "/MediaBox" then
|
||||||
|
match page.Pdfpage.mediabox with
|
||||||
|
Pdf.Array [a; b; c; d] as r -> Some (Pdf.parse_rectangle r)
|
||||||
|
| _ -> None
|
||||||
|
else
|
||||||
|
match Pdf.lookup_direct pdf box page.Pdfpage.rest with
|
||||||
|
Some (Pdf.Array [a; b; c; d] as r) -> Some (Pdf.parse_rectangle r)
|
||||||
|
| _ -> None
|
||||||
|
|
||||||
|
let show_boxes_page pdf _ page =
|
||||||
|
let make_ops (r, g, b) on off boxname =
|
||||||
|
match get_rectangle pdf page boxname with
|
||||||
|
Some (r1, r2, r3, r4) ->
|
||||||
|
[Pdfops.Op_q;
|
||||||
|
Pdfops.Op_RG (r /. 255., g /. 255., b /. 255.);
|
||||||
|
Pdfops.Op_w 1.;
|
||||||
|
Pdfops.Op_d ((if on = 0. && off = 0. then [] else [on; off]), 0.);
|
||||||
|
Pdfops.Op_re (r1, r2, r3 -. r1, r4 -. r2);
|
||||||
|
Pdfops.Op_S;
|
||||||
|
Pdfops.Op_Q]
|
||||||
|
| None -> []
|
||||||
|
in
|
||||||
|
let ops =
|
||||||
|
make_ops (255., 0., 0.) 0. 0. "/MediaBox"
|
||||||
|
@ make_ops (0., 255., 0.) 7. 7. "/CropBox"
|
||||||
|
@ make_ops (0., 0., 255.) 5. 5. "/ArtBox"
|
||||||
|
@ make_ops (255.,150.,0.) 3. 3. "/TrimBox"
|
||||||
|
@ make_ops (255.,9.,147.) 2. 2. "/BleedBox"
|
||||||
|
in
|
||||||
|
Pdfpage.postpend_operators pdf ops ~fast:args.fast page
|
||||||
|
|
||||||
|
let show_boxes range pdf =
|
||||||
|
Cpdf.process_pages (show_boxes_page pdf) pdf range
|
||||||
|
|
||||||
(* Main function *)
|
(* Main function *)
|
||||||
let go () =
|
let go () =
|
||||||
match args.op with
|
match args.op with
|
||||||
|
@ -4498,6 +4550,10 @@ let go () =
|
||||||
let pdf = get_single_pdf args.op false in
|
let pdf = get_single_pdf args.op false in
|
||||||
let range = parse_pagespec pdf (get_pagespec ()) in
|
let range = parse_pagespec pdf (get_pagespec ()) in
|
||||||
write_pdf false (remove_all_text range pdf)
|
write_pdf false (remove_all_text range pdf)
|
||||||
|
| Some ShowBoxes ->
|
||||||
|
let pdf = get_single_pdf args.op false in
|
||||||
|
let range = parse_pagespec pdf (get_pagespec ()) in
|
||||||
|
write_pdf false (show_boxes range pdf)
|
||||||
|
|
||||||
let parse_argv () =
|
let parse_argv () =
|
||||||
if args.debug then
|
if args.debug then
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
%FIXME: Explain fast more / better and list things it works on
|
%FIXME: Explain fast more / better and list things it works on
|
||||||
%FIXME: Document new -draft-remove-only functionality for deleting images
|
%FIXME: Document new -draft-remove-only functionality for deleting images
|
||||||
%FIXME: Document that -decompress may need -no-preserve-objstm
|
%FIXME: Document that -decompress may need -no-preserve-objstm
|
||||||
|
%FIXME: Document new -show-boxes, -trim-marks, -registation-marks operations.
|
||||||
|
|
||||||
\documentclass{book}
|
\documentclass{book}
|
||||||
\usepackage{palatino}
|
\usepackage{palatino}
|
||||||
|
|
Loading…
Reference in New Issue