From cec68cbae7056d8156e50b980cc77f1b10e32ce3 Mon Sep 17 00:00:00 2001 From: John Whitington Date: Fri, 8 Nov 2024 15:45:28 +0000 Subject: [PATCH] More PDF/JSON work --- cpdfcommand.ml | 13 +++++++++---- cpdfmanual.pdf | Bin 442397 -> 442440 bytes cpdfmanual.tex | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/cpdfcommand.ml b/cpdfcommand.ml index d5e88ce..32aa009 100644 --- a/cpdfcommand.ml +++ b/cpdfcommand.ml @@ -1737,16 +1737,21 @@ let setreplacedictentry s = let setprintdictentry s = setop (PrintDictEntry s) () +let pdf_or_json s = + match explode s with + | 'P'::'D'::'F'::r -> Pdfread.parse_single_object (implode r) + | _ -> Cpdfjson.object_of_json (Cpdfyojson.Safe.from_string s) + let setreplacedictentryvalue s = try - let pdfobj = Cpdfjson.object_of_json (Cpdfyojson.Safe.from_string s) in + let pdfobj = pdf_or_json s in args.replace_dict_entry_value <- pdfobj with e -> error (Printf.sprintf "Failed to parse replacement value: %s\n" (Printexc.to_string e)) let setdictentrysearch s = try - let pdfobj = Cpdfjson.object_of_json (Cpdfyojson.Safe.from_string s) in + let pdfobj = pdf_or_json s in args.dict_entry_search <- Some pdfobj with e -> error (Printf.sprintf "Failed to parse search term: %s\n" (Printexc.to_string e)) @@ -1966,7 +1971,7 @@ let setreadableops () = let addeltinfo s = match String.split_on_char '=' s with | h::t -> - let pdfobj = Pdfread.parse_single_object (String.concat "" t) in + let pdfobj = pdf_or_json (String.concat "" t) in Cpdfdrawcontrol.eltinfo h pdfobj | [] -> error "addeltinfo: bad format" @@ -4684,7 +4689,7 @@ let go () = print_obj args.format_json pdf s | Some (ReplaceObj (a, b)) -> let pdf = get_single_pdf args.op false in - let pdfobj = Cpdfjson.object_of_json (Cpdfyojson.Safe.from_string b) in + let pdfobj = pdf_or_json b in replace_obj pdf a pdfobj; write_pdf false pdf | Some (Verify standard) -> diff --git a/cpdfmanual.pdf b/cpdfmanual.pdf index 314eb5d2204e2d1f7a2c296fad49033fe91dcaae..edd35f9df6b1a2ca7607086b85fa130ca942f60a 100644 GIT binary patch delta 6409 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