code: def _update_docinfo(self):
          
          self._pdf.docinfo  # Touch object to ensure it exists
          for uri, element, docinfo_name, converter in self.DOCINFO_MAPPING:
              qname = QName(uri, element)
              try:
                  value = self[qname]
              except KeyError:
                  if docinfo_name in self._pdf.docinfo:
                      del self._pdf.docinfo[docinfo_name]
                  continue
              if converter:
                  try:
                      value = converter.docinfo_from_xmp(value)
                  except ValueError:
                      warn(
                          "The DocumentInfo field {} could not be updated from XMP".format(
                              docinfo_name
                          )
                      )
                      value = None
              if value is None:
                  if docinfo_name in self._pdf.docinfo:
                      del self._pdf.docinfo[docinfo_name]
                  continue
              value = re_xml_illegal_chars.sub('', value)
              try:
                  # Try to save pure ASCII
                  self._pdf.docinfo[docinfo_name] = value.encode('ascii')
              except UnicodeEncodeError:
                  # qpdf will serialize this as a UTF-16 with BOM string
                  self._pdf.docinfo[docinfo_name] = value
docs: Update the PDF's DocumentInfo dictionary to match XMP metadata
  
          The standard mapping is described here:
              https://www.pdfa.org/pdfa-metadata-xmp-rdf-dublin-core/