mirror of
				https://github.com/johnwhitington/cpdf-source.git
				synced 2025-06-05 22:09:39 +02:00 
			
		
		
		
	Scaffolding for -output-json
This commit is contained in:
		
							
								
								
									
										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 | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								cpdfwriteJSON.ml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								cpdfwriteJSON.ml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | let write fh parse_content pdf = () | ||||||
							
								
								
									
										1
									
								
								cpdfwriteJSON.mli
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								cpdfwriteJSON.mli
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | val write : out_channel -> bool -> Pdf.t -> unit | ||||||
		Reference in New Issue
	
	Block a user