You are here

pdf_reader.module in PDF Reader 7.2

Same filename and directory in other branches
  1. 8 pdf_reader.module
  2. 7 pdf_reader.module

pdf reader module file.

File

pdf_reader.module
View source
<?php

/**
 * @file
 * pdf reader module file.
 */

/**
 * Implements hook_permission().
 */
function pdf_reader_permission() {
  return array(
    'administer pdf reader' => array(
      'title' => t('Administer PDF Reader'),
      'description' => t('Perform maintenance tasks for PDF Reader'),
    ),
    'download pdf files' => array(
      'title' => t('Download PDF files'),
      'description' => t('Allow to download PDF files'),
    ),
  );
}

/**
 * Implement hook_field_formatter_info().
 */
function pdf_reader_field_formatter_info() {
  return array(
    'pdf_reader_file' => array(
      'label' => t('PDF Reader'),
      'field types' => array(
        'file',
        'text',
      ),
      'settings' => array(
        'pdf_width' => 600,
        'pdf_height' => 780,
        'renderer' => 'google',
        'download' => FALSE,
        'colorbox' => FALSE,
        'colorbox_link_text' => '',
        'link_placement' => 'top',
      ),
    ),
  );
}

/**
 * Implements hook_libraries_info().
 */
function pdf_reader_libraries_info() {
  $libraries = array();
  $libraries['pdf.js'] = array(
    'name' => 'pdf.js',
    'vendor url' => 'http://mozilla.github.io/pdf.js/',
    'download url' => 'http://mozilla.github.io/pdf.js/getting_started/#download',
    'version arguments' => array(
      'file' => 'build/pdf.js',
      'pattern' => '/ersion\\s=\\s\'(.*)\'/',
      'lines' => 32,
    ),
    'files' => array(
      'js' => array(
        'build/pdf.js',
      ),
    ),
    'variants' => array(
      'viewer' => array(
        'files' => array(
          'js' => array(
            'build/pdf.js',
            'web/viewer.js',
          ),
        ),
      ),
      // DEV.
      'textlayer' => array(
        'files' => array(
          'js' => array(
            'build/pdf.js',
            'web/pdf_find_bar.js',
            'web/pdf_find_controller.js',
            'web/ui_utils.js',
            'web/text_layer_builder.js',
          ),
        ),
      ),
    ),
  );
  return $libraries;
}

/**
 * Implements hook_field_formatter_settings_form().
 */
function pdf_reader_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
  $display = $instance['display'][$view_mode];
  $settings = $display['settings'];
  $element['pdf_width'] = array(
    '#title' => t('Width'),
    '#type' => 'textfield',
    '#default_value' => $settings['pdf_width'],
  );
  $element['pdf_height'] = array(
    '#title' => t('Height'),
    '#type' => 'textfield',
    '#default_value' => $settings['pdf_height'],
  );
  $element['renderer'] = array(
    '#title' => t('Renderer'),
    '#type' => 'select',
    '#options' => array(
      'google' => t('Google Viewer'),
      'ms' => t('MS Viewer'),
      'direct' => t('Direct Embed'),
      'pdf-js' => t('pdf.js'),
    ),
    '#default_value' => $settings['renderer'],
  );
  $element['download'] = array(
    '#title' => t('Show download link'),
    '#type' => 'checkbox',
    '#default_value' => $settings['download'],
  );
  $element['link_placement'] = array(
    '#title' => t('Show Link'),
    '#type' => 'select',
    '#options' => array(
      'top' => t('Top'),
      'bottom' => t('Bottom'),
    ),
    '#default_value' => $settings['link_placement'],
    '#states' => [
      'invisible' => [
        'input[name="fields[field_filrv_imagr][settings_edit_form][settings][download]"]' => [
          'checked' => FALSE,
        ],
      ],
    ],
  );
  if (module_exists('colorbox')) {
    variable_set('colorbox_inline', 1);
  }
  $element['colorbox'] = array(
    '#title' => t('Display in colorbox (colorbox module must be installed).'),
    '#type' => 'checkbox',
    '#disabled' => !module_exists('colorbox'),
    '#default_value' => $settings['colorbox'],
  );
  $element['colorbox_link_text'] = array(
    '#title' => t('Colorbox link'),
    '#type' => 'textfield',
    '#disabled' => !module_exists('colorbox'),
    '#default_value' => $settings['colorbox_link_text'],
  );
  return $element;
}

/**
 * Implements hook_field_formatter_settings_summary().
 */
function pdf_reader_field_formatter_settings_summary($field, $instance, $view_mode) {
  $renderers = array(
    'google' => 'Google Viewer',
    'direct' => 'Direct Embed',
    'ms' => 'MS Viewer',
    'pdf-js' => 'pdf.js',
  );
  $display = $instance['display'][$view_mode];
  $settings = $display['settings'];
  $summary = 'Size: ' . $settings['pdf_width'] . 'x' . $settings['pdf_height'] . ' Using: ' . $renderers[$settings['renderer']] . '<br> Download Link: ' . ($settings['download'] == 1 ? 'YES' : 'NO') . ' Use colorbox: ' . ($settings['colorbox'] == 1 ? 'YES' : 'NO') . ' Colorbox link text: ' . $settings['colorbox_link_text'];
  return $summary;
}

/**
 * Implements hook_field_formatter_view().
 */
function pdf_reader_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $settings = $display['settings'];
  $element = array();
  switch ($display['type']) {
    case 'pdf_reader_file':
      foreach ($items as $delta => $item) {
        $element[$delta]['#type'] = 'markup';
        $element[$delta]['#markup'] = theme('pdf_reader', array(
          'file' => $item,
          'settings' => $settings,
        ));
      }
      break;
  }
  return $element;
}

/**
 * Implements hook_theme().
 *
 * Use our theme function.
 */
function pdf_reader_theme($existing, $type, $theme, $path) {
  return array(
    'pdf_reader' => array(
      'variables' => array(
        'file' => NULL,
        'settings' => NULL,
      ),
    ),
    'pdf_js' => array(
      'variables' => array(
        'file' => NULL,
        'settings' => NULL,
      ),
    ),
  );
}

/**
 * Theme the field with pdf reader
 */
function theme_pdf_reader($variables) {
  $file_url = isset($variables['file']['uri']) ? file_create_url($variables['file']['uri']) : $variables['file']['value'];
  switch ($variables['settings']['renderer']) {
    case 'google':
      $output = '<iframe id="pdf_reader" src="//docs.google.com/viewer?embedded=true&url=' . urlencode($file_url) . '" width="' . $variables['settings']['pdf_width'] . '" height="' . $variables['settings']['pdf_height'] . '" scrolling="no' . '" style="border: none;"></iframe>';
      break;
    case 'ms':
      $output = '<iframe id="pdf_reader" src="https://view.officeapps.live.com/op/embed.aspx?src=' . urlencode($file_url) . '" width="' . $variables['settings']['pdf_width'] . '" height="' . $variables['settings']['pdf_height'] . '" scrolling="no' . '" style="border: none;"></iframe>';
      break;
    case 'direct':
      $download_link = '';
      if (user_access('download pdf files')) {
        $download_link = t('or') . ' ' . l(t('click here to download the PDF file.'), $file_url);
      }
      $output = '<object id="pdf_reader" data="' . $file_url . '#view=Fit' . '" ' . 'type="application/pdf' . '" ' . 'width="' . $variables['settings']['pdf_width'] . '" ' . 'height="' . $variables['settings']['pdf_height'] . '">' . '<embed src="' . $file_url . '#view=Fit' . '"' . 'width="' . $variables['settings']['pdf_width'] . '" ' . 'height="' . $variables['settings']['pdf_height'] . '" ' . 'type="application/pdf">' . '<p>' . t('It appears your Web browser is not configured to display PDF files. ') . l(t('Download adobe Acrobat '), 'http://www.adobe.com/products/reader.html') . ' ' . $download_link . '</p>' . '</embed></object>';
      break;
    case 'pdf-js':
      $output = theme('pdf_js', array(
        'file' => $variables['file'],
        'settings' => $variables['settings'],
      ));
      break;
  }
  if ($variables['settings']['download'] == TRUE && user_access('download pdf files')) {
    $path = drupal_get_path('module', 'pdf_reader');
    if ($variables['settings']['link_placement'] == 'top' && !empty($variables['settings']['link_placement'])) {
      $top = l(t('Click here to download the PDF file.'), $file_url, array(
        'attributes' => array(
          'class' => 'pdf-reader-download-link',
        ),
      ));
      $output = $top . $output;
    }
    else {
      $output .= l(t('Click here to download the PDF file.'), $file_url, array(
        'attributes' => array(
          'class' => 'pdf-reader-download-link',
        ),
      ));
    }
    drupal_add_css("{$path}/css/pdf_reader-viewer.css");
  }
  if ($variables['settings']['colorbox'] == TRUE) {
    $html = $output;
    $options = array(
      'attributes' => array(
        'class' => array(
          'colorbox-inline',
          'show',
        ),
      ),
      'query' => array(
        'width' => $variables['settings']['pdf_width'],
        'height' => $variables['settings']['pdf_height'],
        'inline' => 'true',
      ),
      'fragment' => 'pdf_reader',
    );
    $output = l(t($variables['settings']['colorbox_link_text']), $file_url, $options);
    $output .= '<div style="display:none">' . $html . '</div>';
  }
  return $output;
}
function theme_pdf_js($variables) {
  $library = libraries_load('pdf.js');
  if ($library['loaded'] == FALSE) {
    drupal_set_message($library['error message'], 'error');
    return 'Please download and install ' . l($library['name'], $library['download url']) . '!';
  }
  $file_url = isset($variables['file']['uri']) ? file_create_url($variables['file']['uri']) : $variables['file']['value'];
  $library_path = libraries_get_path('pdf.js');
  $iframe_src = file_create_url($library_path . '/web/viewer.html') . '?file=' . rawurlencode($file_url);
  $html = array(
    '#type' => 'html_tag',
    '#tag' => 'iframe',
    '#value' => $file_url,
    '#attributes' => array(
      'class' => array(
        'pdf-reader',
      ),
      'webkitallowfullscreen' => '',
      'mozallowfullscreen' => '',
      'allowfullscreen' => '',
      'frameborder' => 'no',
      'width' => $variables['settings']['pdf_width'],
      'height' => $variables['settings']['pdf_height'],
      'src' => $iframe_src,
      'data-src' => $file_url,
    ),
  );
  return render($html);
}