lib/hexapdf/document/metadata.rb in hexapdf-0.41.0 vs lib/hexapdf/document/metadata.rb in hexapdf-0.44.0
- old
+ new
@@ -159,10 +159,11 @@
@document = document
@namespaces = PREDEFINED_NAMESPACES.dup
@properties = PREDEFINED_PROPERTIES.transform_values(&:dup)
@default_language = document.catalog[:Lang] || 'x-default'
@metadata = Hash.new {|h, k| h[k] = {} }
+ @custom_metadata = []
write_info_dict(true)
write_metadata_stream(true)
@document.register_listener(:complete_objects, &method(:write_metadata))
parse_metadata
end
@@ -246,10 +247,20 @@
else
ns[property] = value
end
end
+ # Adds the given +data+ string as custom metadata to the XMP document.
+ #
+ # The +data+ string must contain a fully valid 'rdf:Description' element.
+ #
+ # Using this method allows adding metadata like PDF/A schema definitions for which there is no
+ # direct support by HexaPDF.
+ def custom_metadata(data)
+ @custom_metadata << data
+ end
+
# :call-seq:
# metadata.delete
# metadata.delete(ns_prefix)
# metadata.delete(ns_prefix, name)
#
@@ -467,10 +478,10 @@
def xmp_packet(data)
<<~XMP
<?xpacket begin="\u{FEFF}" id="#{SecureRandom.uuid.tr('-', '')}"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
- #{data}
+ #{data}#{@custom_metadata.empty? ? '' : "\n#{@custom_metadata.join("\n")}"}
</rdf:RDF>
</x:xmpmeta>
<?xpacket end="r"?>
XMP
end