code: public float[] getWidths(float left, float totalWidth) {
          // for x columns, there are x+1 borders
          float[] w = new float[columns + 1];
          float wPercentage;
          if (locked) {
          	wPercentage = 100 * width / totalWidth;
          }
          else {
          	wPercentage = width;
          }
          // the border at the left is calculated
          switch(alignment) {
              case Element.ALIGN_LEFT:
                  w[0] = left;
                  break;
              case Element.ALIGN_RIGHT:
                  w[0] = left + (totalWidth * (100 - wPercentage)) / 100;
                  break;
              case Element.ALIGN_CENTER:
              default:
                  w[0] = left + (totalWidth * (100 - wPercentage)) / 200;
          }
          // the total available width is changed
          totalWidth = (totalWidth * wPercentage) / 100;
          // the inner borders are calculated
          for (int i = 1; i < columns; i++) {
              w[i] = w[i - 1] + (widths[i - 1] * totalWidth / 100);
          }
          // the border at the right is calculated
          w[columns] = w[0] + totalWidth;
          return w;
      }
docs: Gets an array with the positions of the borders between every column.
  <P>
  This method translates the widths expressed in percentages into the
  x-coordinate of the borders of the columns on a real document.
  
  @param       left            this is the position of the first border at the left (cellpadding not included)
  @param       totalWidth      this is the space between the first border at the left
  and the last border at the right (cellpadding not included)
  @return      an array with border positions