Отображение PDF-файла

29.04.2011
Share on FacebookShare on TwitterShare on GooglePlusShare on Linkedin
Автор:

Статья для тех, кто возможно столкнется с необходимостью отобразить прикрепленный PDF документ на странице просмотра содержимого. Реализуется это довольно просто: достаточно вставить фрагмент кода в нужном для вывода месте:

Ширину (width) и высоту (height) области необходимо выставить в соответствии с параметрами страницы.

Если в браузере не установлен плагин для просмотра PDF, то отображение не будет доступным. Для того чтобы дать пользователю возможность увидеть прикрепленный файл, необходимо в середине тега object добавить ссылку на файл, при чем появляться она будет лишь в том случае, когда просмотр невозможен.


Download PDF file

Для вывода такой области можно написать несложный модуль на основе Field API, который для типа данных file создаст новый формат отображения. Выбор формата осуществляется в разделе Manage Display типа содержимого.

Для этого нам понадобится 4 хука:

  • hook_field_formatter_info() - определяет новый формат;
  • hook_field_formatter_settings_form() - создает форму для настройки;
  • hook_field_formatter_settings_summary() - отображение указанных настроек;
  • hook_field_formatter_view() - вывод поля на странице содержимого.
Первым делом веб разработчику нужно создать новый формат. Укажем, что он будет доступный для типа данных file, а также будет содержать 3 параметра для настройки - ширина и высота области, а кроме того - текст, который будет отображаться в качестве ссылки на скачивание файла:
/**
 * Implements hook_field_formatter_info().
 */
function field_pdfdisplay_field_formatter_info() {
  return array(
    'pdf_formatter' => array(
      'label'       => t('Display PDF'),
      'field types' => array('file'),
      'settings'    => array(
        'pdf_width'  => '100%',
        'pdf_height' => '450',
        'pdf_alt'    => t('Download PDF file'),
      )
    ),
  );
}

Далее, создадим елементы формы, необходимые для определения и изменения вышеуказанных параметров:

/**
 * Implements hook_field_formatter_settings_form().
 */
function field_pdfdisplay_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
  $display = $instance['display'][$view_mode];
  $settings = $display['settings'];
  $element = array();
  $element['pdf_width'] = array(
    '#type'           => 'textfield',
    '#title'          => t('Object width'),
    '#description'    => t('Specify the width of the field to display a pdf file (use % or px)'),
    '#default_value'  => $settings['pdf_width'],
    '#required'       => TRUE,
  );
  $element['pdf_height'] = array(
    '#type'           => 'textfield',
    '#title'          => t('Object height'),
    '#description'    => t('Specify the height of the field to display a pdf file (use % or px)'),
    '#default_value'  => $settings['pdf_height'],
    '#required'       => TRUE,
  );
  $element['pdf_alt'] = array(
    '#type'           => 'textfield',
    '#title'          => t('Text for download'),
    '#description'    => t('Specify the text that will appear to download the file'),
    '#default_value'  => $settings['pdf_alt'],
    '#required'       => TRUE,
  );
  return $element;
}

Следующим шагом является вывод сообщения, в котором будет содержаться информация о наших настройках:

/**
 * Implements hook_field_formatter_settings_summary().
 */
function field_pdfdisplay_field_formatter_settings_summary($field, $instance, $view_mode) {
  $display  = $instance['display'][$view_mode];
  $settings = $display['settings'];
  $summary  = t('Region of @width to @height, and text at download link - "@alt"', array(
    '@width'  => $settings['pdf_width'],
    '@height' => $settings['pdf_height'],
    '@alt'    => $settings['pdf_alt'],
  ));
  return $summary;
}

И в завершении, самый главный момент - генерация вывода файла:

/**
 * Implements hook_field_formatter_view().
 */
function field_pdfdisplay_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  global $base_url;  
  $settings = $display['settings'];
  $element  = array();
  $width    = $settings['pdf_width'];
  $height   = $settings['pdf_height'];
  $alt      = $settings['pdf_alt'];
  $path     = $base_url . '/' . variable_get('file_public_path') . substr($items[0]['uri'], 8);
  $object   = '

';
  $element[0]['#markup'] = $object;
  return $element;
}
После этого у нас появиться новый формат просмотра, который будет отображать pdf файл целиком на странице содержимого. Также есть возможность настраивать параметры области отображения, что позволит нам "подгонять" её под нужные размеры страницы.
Для удобства, к статье прилагается уже готовый модуль для реализации такой задачи.
1 vote, Rating: 5
Share on FacebookShare on TwitterShare on GooglePlusShare on Linkedin

Также по теме

1

Пакетные операции дают возможность обрабатывать формы в ходе нескольких запросов. Таким образом предупреждается обрыв обработки из-за тайм-аута РНР. 

2

В этой статье я расскажу и распишу как оперировать основными хуками из раздела Field API.

Field API – один из разделов Drupal 7 API, которые позволяют нам:

  • создавать настраиваемые...
3

Скорость загрузки страницы в браузере у конечного пользователя - один из ключевых факторов популярности вашего сайта. При длительной загрузке пользователь может не дождаться окончания и уйти на...

4

SSH — сетевой протокол сеансового уровня, c помощью которого производится удалённое управление...

5

Если вам известно, что такое jQuery, или вы только начинаете его изучать, в любом случае рано или поздно вы заинтересуетесь тем, как написать свой jQuery плагин.  А сделать это довольно...

Need a quote? Let's discuss the project

Are you looking for someone to help you with your Drupal Web Development needs? Let’s get in touch and discuss the requirements of your project. We would love to hear from you.

Join to peoples who already subscribe