Added -remove-dict-entry

This commit is contained in:
John Whitington 2015-01-07 18:29:11 +00:00
parent 201538e168
commit 0f369f9584
1 changed files with 19 additions and 0 deletions

View File

@ -155,6 +155,7 @@ type op =
| RemovePageLabels | RemovePageLabels
| PrintPageLabels | PrintPageLabels
| Revisions | Revisions
| RemoveDictEntry of string
let string_of_op = function let string_of_op = function
| CopyFont _ -> "CopyFont" | CopyFont _ -> "CopyFont"
@ -256,6 +257,7 @@ let string_of_op = function
| RemovePageLabels -> "RemovePageLabels" | RemovePageLabels -> "RemovePageLabels"
| PrintPageLabels -> "PrintPageLabels" | PrintPageLabels -> "PrintPageLabels"
| Revisions -> "Revisions" | Revisions -> "Revisions"
| RemoveDictEntry _ -> "RemoveDictEntry"
(* Inputs: filename, pagespec. *) (* Inputs: filename, pagespec. *)
type input_kind = type input_kind =
@ -1328,6 +1330,9 @@ let setcpdflin s =
let setrecrypt () = let setrecrypt () =
args.recrypt <- true args.recrypt <- true
let setremovedictentry s =
args.op <- Some (RemoveDictEntry s)
(* Parse a control file, make an argv, and then make Arg parse it. *) (* Parse a control file, make an argv, and then make Arg parse it. *)
let rec make_control_argv_and_parse filename = let rec make_control_argv_and_parse filename =
control_args := !control_args @ parse_control_file filename control_args := !control_args @ parse_control_file filename
@ -1828,6 +1833,9 @@ and specs =
("-label-startval", ("-label-startval",
Arg.Int setlabelstartval, Arg.Int setlabelstartval,
" Set label start value (default 1)"); " Set label start value (default 1)");
("-remove-dict-entry",
Arg.String setremovedictentry,
" Remove an entry from all dictionaries");
(*These items are undocumented *) (*These items are undocumented *)
("-extract-fontfile", Arg.Unit (setop ExtractFontFile), ""); ("-extract-fontfile", Arg.Unit (setop ExtractFontFile), "");
("-extract-images", Arg.Unit setextractimages, ""); ("-extract-images", Arg.Unit setextractimages, "");
@ -3581,6 +3589,17 @@ let go () =
iter iter
print_string print_string
(map Pdfpagelabels.string_of_pagelabel (Pdfpagelabels.read pdf)) (map Pdfpagelabels.string_of_pagelabel (Pdfpagelabels.read pdf))
| Some (RemoveDictEntry key) ->
let pdf = get_single_pdf args.op true in
(* 1. Process all objects *)
Pdf.objselfmap
(function
(Pdf.Dictionary _ as d) | (Pdf.Stream _ as d) ->
Pdf.remove_dict_entry d key
| x -> x)
pdf;
(* FIXME: We might like to do the trailer dictionary too *)
write_pdf false pdf
let parse_argv () = let parse_argv () =
Arg.parse_argv ~current:(ref 0) Arg.parse_argv ~current:(ref 0)