docs: def _draw_string(self, cs):
          """
          Draw string object to reportlabs canvas.
  
          Canvas Parameter changes (applied if set values differ from string object values)
          1. Font name
          2. Font size
          3. Font fill color & opacity
          4. X and Y position
  
          :param cs: CanvasString object
          """
          # 1. Font name
          if self.can._fontname != cs.font:
              self.can.setFont(cs.font, cs.size)
  
          # 2. Font size
          elif self.can._fontsize != cs.size:
              self.can.setFontSize(cs.size)
  
          # 3. Font file color
          self.can.setFillColor(cs.color, cs.opacity)
  
          # 4. X and Y positions
          # X and Y are both centered
          if cs.y_centered and cs.x_centered:
              # Check if text_width is greater than the canvas page width
              if text_width(cs.string, cs.font, cs.size) > self.can._pagesize[0]:
                  str1, str2 = split_str(cs.string)
                  self.can.drawString(x=center_str(str1, cs.font, cs.size, offset=0), y=cs.size, text=str1)
                  self.can.drawString(x=center_str(str2, cs.font, cs.size, offset=0), y=-cs.size, text=str2)
                  return
              else:
                  x = center_str(cs.string, cs.font, cs.size, offset=0)
                  y = 0
  
          # Y is centered and X is not
          elif cs.y_centered and not cs.x_centered:
              x = cs.x
              y = 0
  
          # X is centered and Y is not
          elif cs.x_centered and not cs.y_centered:
              x = center_str(cs.string, cs.font, cs.size, offset=0)
              y = cs.y
          else:
              x = cs.x
              y = cs.y
          self.can.drawString(x=x, y=y, text=cs.string)
          return