docs: def get_full_page_box_assigning_media_and_crop(page):
      """This returns whatever PDF box was selected (by the user option
      '--fullPageBox') to represent the full page size.  All cropping is done
      relative to this box.  The default selection option is the MediaBox
      intersected with the CropBox so multiple crops work as expected.  The
      argument page should be a pyPdf page object.  This function also by default
      sets the MediaBox and CropBox to the full-page size and saves the old values
      in the same page namespace, and so it should only be called once for each
      page.  It returns a RectangleObject box."""
  
      # Find the page rotation angle (degrees).
      # Note rotation is clockwise, and four values are allowed: 0 90 180 270
      try:
          rotation = page["/Rotate"].getObject() # this works, needs try
          #rotation = page.get("/Rotate", 0) # from the PyPDF2 source, default 0
      except KeyError:
          rotation = 0
      while rotation >= 360: rotation -= 360
      while rotation < 0: rotation += 360
  
      # Save the rotation value in the page's namespace so we can restore it later.
      page.rotationAngle = rotation
  
      # Un-rotate the page, leaving it with an rotation of 0.
      page.rotateClockwise(-rotation)
  
      # Save copies of some values in the page's namespace, to possibly restore later.
      page.originalMediaBox = page.mediaBox
      page.originalCropBox = page.cropBox
  
      first_loop = True
      for box_string in args.fullPageBox:
          if box_string == "m": f_box = page.mediaBox
          if box_string == "c": f_box = page.cropBox
          if box_string == "t": f_box = page.trimBox
          if box_string == "a": f_box = page.artBox
          if box_string == "b": f_box = page.bleedBox
  
          # Take intersection over all chosen boxes.
          if first_loop:
              full_box = f_box
          else:
              full_box = intersect_boxes(full_box, f_box)
  
          first_loop = False
  
      # Do any absolute pre-cropping specified for the page (after modifying any
      # absolutePreCrop arguments to take into account rotations to the page).
      a = mod_box_for_rotation(args.absolutePreCrop, rotation)
      full_box = RectangleObject([float(full_box.lowerLeft[0]) + a[0],
                                  float(full_box.lowerLeft[1]) + a[1],
                                  float(full_box.upperRight[0]) - a[2],
                                  float(full_box.upperRight[1]) - a[3]])
  
      page.mediaBox = full_box
      page.cropBox = full_box
  
      return full_box