Scaffolding for -output-json
This commit is contained in:
parent
232312faef
commit
2165d10862
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
||||||
# Build the cpdf command line tools and top level
|
# Build the cpdf command line tools and top level
|
||||||
MODS = tjutil tjutf16 tjllist tjparserMonad tjjson \
|
MODS = tjutil tjutf16 tjllist tjparserMonad tjjson \
|
||||||
xmlm \
|
xmlm \
|
||||||
cpdfstrftime cpdfcoord cpdf cpdfcommand
|
cpdfwriteJSON cpdfstrftime cpdfcoord cpdf cpdfcommand
|
||||||
|
|
||||||
SOURCES = $(foreach x,$(MODS),$(x).ml $(x).mli) cpdfcommandrun.ml
|
SOURCES = $(foreach x,$(MODS),$(x).ml $(x).mli) cpdfcommandrun.ml
|
||||||
|
|
||||||
|
|
|
@ -189,6 +189,7 @@ type op =
|
||||||
| TrimMarks
|
| TrimMarks
|
||||||
| Prepend of string
|
| Prepend of string
|
||||||
| Postpend of string
|
| Postpend of string
|
||||||
|
| OutputJSON
|
||||||
|
|
||||||
let string_of_op = function
|
let string_of_op = function
|
||||||
| CopyFont _ -> "CopyFont"
|
| CopyFont _ -> "CopyFont"
|
||||||
|
@ -311,6 +312,7 @@ let string_of_op = function
|
||||||
| TrimMarks -> "TrimMarks"
|
| TrimMarks -> "TrimMarks"
|
||||||
| Prepend _ -> "Prepend"
|
| Prepend _ -> "Prepend"
|
||||||
| Postpend _ -> "Postpend"
|
| Postpend _ -> "Postpend"
|
||||||
|
| OutputJSON -> "OutputJSON"
|
||||||
|
|
||||||
(* Inputs: filename, pagespec. *)
|
(* Inputs: filename, pagespec. *)
|
||||||
type input_kind =
|
type input_kind =
|
||||||
|
@ -433,7 +435,8 @@ type args =
|
||||||
mutable merge_add_bookmarks_use_titles : bool;
|
mutable merge_add_bookmarks_use_titles : bool;
|
||||||
mutable createpdf_pages : int;
|
mutable createpdf_pages : int;
|
||||||
mutable createpdf_pagesize : Pdfpaper.t;
|
mutable createpdf_pagesize : Pdfpaper.t;
|
||||||
mutable removeonly : string option}
|
mutable removeonly : string option;
|
||||||
|
mutable jsonparsecontentstreams : bool}
|
||||||
|
|
||||||
let args =
|
let args =
|
||||||
{op = None;
|
{op = None;
|
||||||
|
@ -529,7 +532,8 @@ let args =
|
||||||
merge_add_bookmarks_use_titles = false;
|
merge_add_bookmarks_use_titles = false;
|
||||||
createpdf_pages = 1;
|
createpdf_pages = 1;
|
||||||
createpdf_pagesize = Pdfpaper.a4;
|
createpdf_pagesize = Pdfpaper.a4;
|
||||||
removeonly = None}
|
removeonly = None;
|
||||||
|
jsonparsecontentstreams = false}
|
||||||
|
|
||||||
let reset_arguments () =
|
let reset_arguments () =
|
||||||
args.op <- None;
|
args.op <- None;
|
||||||
|
@ -614,7 +618,8 @@ let reset_arguments () =
|
||||||
args.merge_add_bookmarks_use_titles <- false;
|
args.merge_add_bookmarks_use_titles <- false;
|
||||||
args.createpdf_pages <- 1;
|
args.createpdf_pages <- 1;
|
||||||
args.createpdf_pagesize <- Pdfpaper.a4;
|
args.createpdf_pagesize <- Pdfpaper.a4;
|
||||||
args.removeonly <- None
|
args.removeonly <- None;
|
||||||
|
args.jsonparsecontentstreams <- false
|
||||||
(* Do not reset original_filename or cpdflin or was_encrypted or
|
(* Do not reset original_filename or cpdflin or was_encrypted or
|
||||||
* was_decrypted_with_owner or recrypt or producer or creator or
|
* was_decrypted_with_owner or recrypt or producer or creator or
|
||||||
* path_to_ghostscript or gs_malformed or gs_quiet, since we want these to work across
|
* path_to_ghostscript or gs_malformed or gs_quiet, since we want these to work across
|
||||||
|
@ -674,7 +679,7 @@ let banned banlist = function
|
||||||
| SetAuthor _|SetTitle _|SetSubject _|SetKeywords _|SetCreate _
|
| SetAuthor _|SetTitle _|SetSubject _|SetKeywords _|SetCreate _
|
||||||
| SetModify _|SetCreator _|SetProducer _|RemoveDictEntry _ | SetMetadata _
|
| SetModify _|SetCreator _|SetProducer _|RemoveDictEntry _ | SetMetadata _
|
||||||
| ExtractText | ExtractImages | ExtractFontFile
|
| ExtractText | ExtractImages | ExtractFontFile
|
||||||
| AddPageLabels | RemovePageLabels
|
| AddPageLabels | RemovePageLabels | OutputJSON
|
||||||
-> false (* Always allowed *)
|
-> 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? *)
|
||||||
|
@ -1450,6 +1455,9 @@ let setdraftremoveonly s =
|
||||||
let setgsquiet () =
|
let setgsquiet () =
|
||||||
args.gs_quiet <- true
|
args.gs_quiet <- true
|
||||||
|
|
||||||
|
let setjsonparsecontentstreams () =
|
||||||
|
args.jsonparsecontentstreams <- true
|
||||||
|
|
||||||
let whingemalformed () =
|
let whingemalformed () =
|
||||||
prerr_string "Command line must be of exactly the form\ncpdf <infile> -gs <path> -gs-malformed-force -o <outfile>\n";
|
prerr_string "Command line must be of exactly the form\ncpdf <infile> -gs <path> -gs-malformed-force -o <outfile>\n";
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -2082,6 +2090,8 @@ and specs =
|
||||||
(* Just for error reporting *)
|
(* Just for error reporting *)
|
||||||
("-gs-malformed-force", Arg.Unit whingemalformed, "");
|
("-gs-malformed-force", Arg.Unit whingemalformed, "");
|
||||||
(* These items are undocumented *)
|
(* These items are undocumented *)
|
||||||
|
("-output-json", Arg.Unit (setop OutputJSON), "");
|
||||||
|
("-output-json-parse-content-streams", Arg.Unit setjsonparsecontentstreams, "");
|
||||||
("-remove-unused-resources", Arg.Unit (setop RemoveUnusedResources), "");
|
("-remove-unused-resources", Arg.Unit (setop RemoveUnusedResources), "");
|
||||||
("-stay-on-error", Arg.Unit setstayonerror, "");
|
("-stay-on-error", Arg.Unit setstayonerror, "");
|
||||||
("-extract-fontfile", Arg.Unit (setop ExtractFontFile), "");
|
("-extract-fontfile", Arg.Unit (setop ExtractFontFile), "");
|
||||||
|
@ -3535,6 +3545,17 @@ let trim_marks_page pdf n page =
|
||||||
let trim_marks range pdf =
|
let trim_marks range pdf =
|
||||||
Cpdf.process_pages (trim_marks_page pdf) pdf range
|
Cpdf.process_pages (trim_marks_page pdf) pdf range
|
||||||
|
|
||||||
|
let write_json output pdf =
|
||||||
|
match output with
|
||||||
|
| NoOutputSpecified ->
|
||||||
|
error "-output-json: no output name specified"
|
||||||
|
| Stdout ->
|
||||||
|
CpdfwriteJSON.write stdout args.jsonparsecontentstreams pdf
|
||||||
|
| File filename ->
|
||||||
|
let f = open_out_bin filename in
|
||||||
|
CpdfwriteJSON.write f args.jsonparsecontentstreams pdf;
|
||||||
|
close_out f
|
||||||
|
|
||||||
(* Main function *)
|
(* Main function *)
|
||||||
let go () =
|
let go () =
|
||||||
match args.op with
|
match args.op with
|
||||||
|
@ -4420,6 +4441,9 @@ let go () =
|
||||||
let range = parse_pagespec pdf (get_pagespec ()) in
|
let range = parse_pagespec pdf (get_pagespec ()) in
|
||||||
let before = match x with Prepend _ -> true | _ -> false in
|
let before = match x with Prepend _ -> true | _ -> false in
|
||||||
write_pdf false (Cpdf.append_page_content s before args.fast range pdf)
|
write_pdf false (Cpdf.append_page_content s before args.fast range pdf)
|
||||||
|
| Some OutputJSON ->
|
||||||
|
let pdf = get_single_pdf args.op false in
|
||||||
|
write_json args.out pdf
|
||||||
|
|
||||||
let parse_argv () =
|
let parse_argv () =
|
||||||
if args.debug then
|
if args.debug then
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
let write fh parse_content pdf = ()
|
|
@ -0,0 +1 @@
|
||||||
|
val write : out_channel -> bool -> Pdf.t -> unit
|
Loading…
Reference in New Issue