Progress towards -mark-as
This commit is contained in:
parent
29ca08432c
commit
7e71f1b4f7
|
@ -56,11 +56,6 @@ let xmp_template =
|
|||
|
||||
<?xpacket end='r'?>|}
|
||||
|
||||
let pdfua_marker =
|
||||
{|<rdf:Description rdf:about="" xmlns:pdfuaid="http://www.aiim.org/pdfua/ns/id/">
|
||||
<pdfuaid:part>1</pdfuaid:part>
|
||||
</rdf:Description>"|}
|
||||
|
||||
(* Set or replace metadata *)
|
||||
let set_metadata_from_bytes keepversion data pdf =
|
||||
let metadata_stream =
|
||||
|
@ -318,11 +313,11 @@ let bytes_of_xmltree t =
|
|||
Cpdfxmlm.output_doc_tree frag o t;
|
||||
bytes_of_string (Buffer.contents buf)
|
||||
|
||||
(*let rec string_of_xmltree = function
|
||||
let rec string_of_xmltree = function
|
||||
D d ->
|
||||
Printf.sprintf "DATA {%s}" d
|
||||
Printf.sprintf "D {%s}" d
|
||||
| E (tag, trees) ->
|
||||
Printf.sprintf "ELT (%s, %s)"
|
||||
Printf.sprintf "E (%s, %s)"
|
||||
(string_of_tag tag)
|
||||
(string_of_xmltrees trees)
|
||||
|
||||
|
@ -340,7 +335,7 @@ and string_of_attributes attrs =
|
|||
|
||||
and string_of_xmltrees trees =
|
||||
fold_left
|
||||
(fun a b -> a ^ " " ^ b) "" (map string_of_xmltree trees)*)
|
||||
(fun a b -> a ^ " " ^ b) "" (map string_of_xmltree trees)
|
||||
|
||||
let adobe = "http://ns.adobe.com/pdf/1.3/"
|
||||
let xmp = "http://ns.adobe.com/xap/1.0/"
|
||||
|
|
|
@ -104,3 +104,7 @@ type xmltree =
|
|||
val xmltree_of_bytes : Pdfio.bytes -> Cpdfxmlm.dtd * xmltree
|
||||
|
||||
val get_data_for : string -> string -> xmltree -> string option
|
||||
|
||||
val string_of_xmltree : xmltree -> string
|
||||
|
||||
val bytes_of_xmltree : Cpdfxmlm.dtd * xmltree -> Pdfio.bytes
|
||||
|
|
29
cpdfua.ml
29
cpdfua.ml
|
@ -287,9 +287,34 @@ let test_matterhorn_json pdf =
|
|||
`Assoc [("name", `String name); ("section", `String section); ("error", `String error); ("extra", extra)])
|
||||
(test_matterhorn pdf))
|
||||
|
||||
let pdfua_marker =
|
||||
Cpdfmetadata.(E (((rdf, "Description"), [((rdf, "about"), ""); (("xmlns", "pdfuaid"), pdfuaid)]), [E (((pdfuaid, "part"), []), [D "1"])]))
|
||||
|
||||
(*{|<rdf:Description rdf:about="" xmlns:pdfuaid="http://www.aiim.org/pdfua/ns/id/">
|
||||
<pdfuaid:part>1</pdfuaid:part>
|
||||
</rdf:Description>"|}*)
|
||||
|
||||
let mark pdf =
|
||||
let pdf2 = if Cpdfmetadata.get_metadata pdf = None then Cpdfmetadata.create_metadata pdf else pdf in
|
||||
pdf.Pdf.objects <- pdf2.Pdf.objects;
|
||||
pdf.Pdf.trailerdict <- pdf2.Pdf.trailerdict;
|
||||
pdf.Pdf.root <- pdf.Pdf.root;
|
||||
()
|
||||
pdf.Pdf.root <- pdf2.Pdf.root;
|
||||
match Cpdfmetadata.get_metadata pdf with
|
||||
| Some metadata ->
|
||||
let dtd, tree = Cpdfmetadata.xmltree_of_bytes metadata in
|
||||
(*Printf.printf "string_of_metadata: %s\n" (Cpdfmetadata.string_of_xmltree tree);*)
|
||||
begin match Cpdfmetadata.get_data_for Cpdfmetadata.pdfuaid "part" tree with
|
||||
| Some _ -> () (* Already so marked. *)
|
||||
| None ->
|
||||
(* If not, add our pdfua_marker to the list *)
|
||||
let newtree = tree in
|
||||
(*Cpdfmetadata.(match tree with
|
||||
| E (("rdf"*)
|
||||
let newbytes = Cpdfmetadata.bytes_of_xmltree (dtd, newtree) in
|
||||
(* Write the metadata stream back. *)
|
||||
let pdf3 = Cpdfmetadata.set_metadata_from_bytes true newbytes pdf in
|
||||
pdf.Pdf.objects <- pdf3.Pdf.objects;
|
||||
pdf.Pdf.trailerdict <- pdf3.Pdf.trailerdict;
|
||||
pdf.Pdf.root <- pdf3.Pdf.root
|
||||
end
|
||||
| None -> assert false
|
||||
|
|
Loading…
Reference in New Issue