///|
fn get_or_add_id(pdf : @pdf.Pdf) -> (String, @pdf.Pdf) raise {
  match pdf.lookup_direct("/ID", pdf.trailerdict) {
    Some(PdfArray([PdfString(s), _])) => (s, pdf)
    _ => {
      let stamp = @env.now().to_string()
      let id = stamp
      let idobj = @pdf.PdfObject::PdfArray([PdfString(id), PdfString(id)])
      pdf.trailerdict = pdf.trailerdict.add_entry("/ID", idobj)
      (id, pdf)
    }
  }
}