Is it possible to use Drupal Pagination without doing any query???

The answer is YES!, if you are creative enough even a field formatter can have a pagination just by invoking a few line of code!.

In this example we assume that you already prepare an array of data or markup.


// In this example we use a field display formatter and display the renderable arrays
// using theme function. Lets call our module "pagination_special"
/**
 * Implement hook_theme()
 */
function pagination_special_theme() {
  return array(
    'pagination_special_wrapper' => array(
       'template' => 'templates/pagination-special-wrapper',
       'render element'  => 'element',
    ),
  );
}
/**
 * Implements hook_field_formatter_info().
 * Register our custom formatter
 */
function pagination_special_field_formatter_info() {
  return array(
    'pagination_special_formatter' => array(
      'label' => t('Example of pagination in field formatter'),
      'field types' => array('image'),
      /** if we need settings
      'settings'  => array( //Array of the settings we'll create
        'imagestyle' => 'medium',
      ),
      **/
    ),
  );
}

/**
 * Implements hook_field_formatter_view().
 * This function will create a new field formatter
 */
function wallpaper_image_manager_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {

  $element = array(); // Initialize the var
  // get the settings, you can create configuration page by invoking hook_field_formatter_settings_form()
 // not covered in this tutorial
  $settings = $display['settings']; 

  // begin pagination magic
  // pager_find_page() will return the current page number
  $page = pager_find_page();
  
  // set our maximum item per page
  $num_per_page = 15;
  
  // build the offset variable
  $offset = $num_per_page * $page;

  // initialize our pager
  pager_default_initialize(count($items), $num_per_page);

  // heck where is the theme('pager')???
  // theme('pager') will be invoked in our template preprocess function

  // $items is the all the field items, if you set the field to have unlimited data
  // and insert lots of data row, $items will be an array containing that data keyed with delta
  $newitems = array_slice($items, $page, $num_per_page);

  // build our renderable arrays
  $element = array(
  	'0' => array(
      'content' => array(
        '#child' => $newitems,
        '#theme' => 'pagination_special_wrapper',
        /**'#setting' => $settings, **/ // if you need settings
        '#entity' => $entity,
      ),
     /**
      '#attached' => array(
        'css' => array('path_to_css'),
      ),
     **/ // if you need to attach custom css
    ),
  );

  return $element;
}

/**
 * Implement Preprocess Function
 * Preprocess our renderable arrays
 *
 * @param array $variables
 */
function template_preprocess_pagination_special_wrapper(&$variables) {
  if (!empty($variables['element']) && !empty($variables['element']['#child'])) {
    $items = $variables['element']['#child'];
    $settings = $variables['element']['#setting'];
    $variables['content'] = '';

    // looping to each image and theme it
    foreach ($items as $item) {
      $variables['content'] .= theme('image', array('path' => $item['uri'], 'width' => '100px', 'height' => '100px'));
    }
    // HECK this is where the theme pager is :)
    // add our pager
    $variables['content'] .= theme('pager');
  }
}


// are we done yet???
// Last step is to create pagination-special-wrapper.tpl.php in your_module/templates directory with these as content


<?php print $content; ?>

Note this module sample is very very basic, it is just showing the posiblity to use pagination with renderable arrays plus printing the pager controller theme('pager') in another function or theme function. Don't complain if it is not working, I'm just showing the sample of possibility not a "paste and work" code. Feel free if you think you can enhances the sample by posting a better code in the comment. Now can we do pagination without query.........????