diff --git a/cpdfmetadata.ml b/cpdfmetadata.ml index 0bd4a2a..e061ea6 100644 --- a/cpdfmetadata.ml +++ b/cpdfmetadata.ml @@ -196,21 +196,21 @@ let output_info ?(json=ref [("none", `Null)]) encoding pdf = if notjson then Printf.printf "Pages: %i\n" (Pdfpage.endpage pdf); json =| ("Pages", `Int (Pdfpage.endpage pdf)); if notjson then Printf.printf "Title: %s\n" (getstring "/Title"); - json =| ("Title", `String (getstring "/Title")); + json =| ("Title", if getstring "/Title" = "" then `Null else `String (getstring "/Title")); if notjson then Printf.printf "Author: %s\n" (getstring "/Author"); - json =| ("Author", `String (getstring "/Author")); + json =| ("Author", if getstring "/Author" = "" then `Null else `String (getstring "/Author")); if notjson then Printf.printf "Subject: %s\n" (getstring "/Subject"); - json =| ("Subject", `String (getstring "/Subject")); + json =| ("Subject", if getstring "/Subject" = "" then `Null else `String (getstring "/Subject")); if notjson then Printf.printf "Keywords: %s\n" (getstring "/Keywords"); - json =| ("Keywords", `String (getstring "/Keywords")); + json =| ("Keywords", if getstring "/Keywords" = "" then `Null else `String (getstring "/Keywords")); if notjson then Printf.printf "Creator: %s\n" (getstring "/Creator"); - json =| ("Creator", `String (getstring "/Creator")); + json =| ("Creator", if getstring "/Creator" = "" then `Null else `String (getstring "/Creator")); if notjson then Printf.printf "Producer: %s\n" (getstring "/Producer"); - json =| ("Producer", `String (getstring "/Producer")); + json =| ("Producer", if getstring "/Producer" = "" then `Null else `String (getstring "/Producer")); if notjson then Printf.printf "Created: %s\n" (getstring "/CreationDate"); - json =| ("Created", `String (getstring "/CreationDate")); + json =| ("Created", if getstring "/CreationDate" = "" then `Null else `String (getstring "/CreationDate")); if notjson then Printf.printf "Modified: %s\n" (getstring "/ModDate"); - json =| ("Modified", `String (getstring "/ModDate")); + json =| ("Modified", if getstring "/ModDate" = "" then `Null else `String (getstring "/ModDate")); if notjson then Printf.printf "Trapped: %s\n" (getstring "/Trapped"); json =| ("Trapped", `Bool (bool_of_string (String.lowercase_ascii (getstring "/Trapped")))); if notjson then Printf.printf "PageMode: %s\n" (get_catalog_item "/PageMode" pdf); @@ -326,7 +326,7 @@ let rec get_data_for namespace name = function PDF/VT: PDF/VT-1 PDF/UA: 1 PDF/X: PDF/X-4 (Fallback DID /GTS_PDFXVersion) *) -let determine_subformat pdf = +let determine_subformats pdf = let formats = ref [] in let fallback_pdfx () = match Pdf.lookup_direct pdf "/Info" pdf.Pdf.trailerdict with @@ -340,7 +340,7 @@ let determine_subformat pdf = match get_metadata pdf with | None -> fallback_pdfx (); - combine_with_commas !formats + !formats | Some metadata -> let _, tree = xmltree_of_bytes metadata in (* PDF/E *) @@ -374,7 +374,7 @@ let determine_subformat pdf = | Some s -> formats =| s | None -> () end; - combine_with_commas !formats + !formats let output_xmp_info ?(json=ref [("none", `Null)]) encoding pdf = let notjson = !json = [("none", `Null)] in @@ -390,7 +390,9 @@ let output_xmp_info ?(json=ref [("none", `Null)]) encoding pdf = else json =| (title, `String data) in - Printf.printf "Subformats: %s\n" (determine_subformat pdf); + if notjson + then Printf.printf "Subformats: %s\n" (combine_with_commas (determine_subformats pdf)) + else json =| ("Subformats", `List (map (fun x -> `String x) (determine_subformats pdf))); match get_metadata pdf with None -> () | Some metadata ->