             lineBreak: false
             ellipsis: true
           x += colWidth
+          futureY = Math.max futureY, @y
+        # Set x position to the beginning of the page.
         x = @page.margins.left
+        # Adjust y position so that even after empty cells in the table
+        #  the proper row height is taken into account.
+        @y = futureY
+        # Draw a closing line for the table.
         @line()
-      [@x, @y] = [@page.margins.left, @y + FONT_SIZE / 2]
+      [@x, @y] = [@page.margins.left, futureY + FONT_SIZE / 2]
       @moveDown SMALL_MARGIN
     ###*
      * Pack images ratio on a single row.

      y = (@y += FONT_SIZE / 2)
      @font('Helvetica', 'Helvetica-Bold', BOLD_SIZE).text theadLabel, x, y
      @text label, (x += colWidth), y for label in labels
      # Create tables's body
      [x, y] = [@page.margins.left, @y]
      @line()
      for row in rows
        y = (@y += FONT_SIZE / 2)
        for value, idx in row
          if idx is 0
            @font 'Helvetica', 'Helvetica-Bold', BOLD_SIZE
          else

                    @formatter tlabel),
                  # Iterate over each rows
                  _.map (_.rest keys), (rowName) =>
                    _.flatten [
                      (@formatter rowName)
                      _.map (_.pluck innerData, rowName), (innerLabel) =>
                        @formatter innerLabel
                    ]
                # Nullify value: printing is already ensured in the loops.
                value = null
              # The data type is an unnamed sub-Schema
