Відображення PDF-файла

29.04.2011
PDF-file display
Автор:

Стаття для тих, в кого виникає необхідність відобразити прикріплений PDF документ на сторінці перегляду вмісту. Реалізується це доволі просто. Для цього необхідно вставити фрагмент коду в потрібному нам для виводу місці:

<object width="100%" height="500px" type="application/pdf" data="path_to_pdf_file" ></object>

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

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

<object width="100%" height="800px" type="application/pdf" data="path_to_pdf_file">
<a href="path_to_pdf_file">Download PDF file</a></object>

Для виводу такої області можна написати нескладний модуль на основі 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 файл повністю на сторінці вмісту. Також є можливість настроювати параметри області відображення, що дозволяє нам "підігнати" її під необхідні розміри сторінки.

Для зручності, до статті додається вже готовий модуль для реалізації такої задачі.

3 votes, Рейтинг: 5

Також по темі

1

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

2

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

Field API - один з розділів Drupal 7 API, які дозволяють нам:

  • створювати поля, що...
3

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

4

SSH - мережевий протокол рівня сеансів, з його допомогою виконується віддалене управління операційною системою і тунелювання ТСР-з'єднань (наприклад, для передачі файлів).

...

5

Якщо ви знаєте що таке jQuery чи починаєте його вивчати, то напевне вас зацікавить знання про те, як написати свій jQuery плагін. Зробити це досить просто. Прочитавши цю статтю ви зможете...

Subscribe to our blog updates