You are here

public function DocRaptorPDF::render in Forena Reports 7.5

Overrides DocumentTypeBase::render

File

src/DocumentFormats/DocRaptorPDF.php, line 27
PrincePDF PDF document via Prince XML @author davidmetzler

Class

DocRaptorPDF

Namespace

Drupal\forena\DocumentFormats

Code

public function render($r, $format, $options = array()) {
  if (!$this->access) {
    drupal_set_message(t('Not Authorized to use PDF Document Generation Service!'), 'error');
    drupal_goto('<front>');
  }
  $disable_links = variable_get('forena_pdf_disable_links', TRUE);
  $html = $r->html;
  if ($disable_links) {
    $html = preg_replace('/<a href=\\"(.*?)\\">(.*?)<\\/a>/', "\\2", $html);
  }
  $link_class = $disable_links ? 'prince-disable-links' : '';
  $output = '<html><head>';
  $output .= '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>';
  $css = '';
  foreach (Frx::Skin()->stylesheets as $type => $sheets) {
    foreach ($sheets as $sheet) {
      switch ($type) {
        case 'all':
        case 'print':
        case 'screen':
        case 'pdf':
          if (strpos($sheet, 'http:') === 0 || strpos($sheet, 'https:') === 0) {
            $output .= "    <link rel='stylesheet' type='text/css' href='{$sheet}'> \n";
          }
          else {
            $css .= file_get_contents($sheet);
          }

          //echo $sheet;
          break;
      }
    }
  }
  if ($css || isset($r->rpt_xml->head->style)) {
    $output .= '<style type="text/css">';
    $output .= $css;
    if (isset($r->rpt_xml->head->style) || isset($r->rpt_xml->head->style)) {
      $sheet = (string) $r->rpt_xml->head->style;
      $output .= $sheet;
    }
    $output .= '</style>';
  }
  $output .= '<title>' . $r->title . "</title></head><body class='forena-report {$link_class}'><h1>" . $r->title . '</h1>' . $html . '</body></html>';
  $api_key = $this->api_key;
  if ($api_key) {
    $service_url = $this->url;
    $url = "{$service_url}?user_credentials={$api_key}";
    $name = 'report.pdf';
    $post_array = array(
      'doc[name]' => $name,
      'doc[document_type]' => 'pdf',
      'doc[test]' => $this->test ? 'true' : 'false',
      'doc[document_content]' => $output,
    );
    $postdata = http_build_query($post_array);
    $opts = array(
      'http' => array(
        'method' => 'POST',
        'header' => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata,
      ),
    );
    $context = stream_context_create($opts);
    $doc = file_get_contents($url, false, $context);
    return $doc;
  }
  else {
    drupal_set_message(t('No Docraptor API Key COnfiguredd'), 'error');
    return '';
  }
}