devdocs-8.x-1.x-dev/devdocs_export/src/Plugin/DevdocsExportHandler/OpenPDF.php
devdocs_export/src/Plugin/DevdocsExportHandler/OpenPDF.php
<?php namespace Drupal\devdocs_export\Plugin\DevdocsExportHandler; use Symfony\Component\HttpFoundation\Response; use Dompdf\Dompdf; use Drupal\devdocs\StreamWrapper\DocsStream; use Drupal\devdocs_export\Plugin\DevdocsExportHandlerBase; use Drupal\filter\FilterProcessResult; use Michelf\MarkdownExtra; /** * PDF handler for Devdocs export. * * @DevdocsExportHandler( * id = "open_pdf", * label = @Translation("Open in PDF format"), * ) */ class OpenPDF extends DevdocsExportHandlerBase { /** * {@inheritdoc} */ public function buildOptionsForm() { return []; } /** * {@inheritdoc} */ public function handle(array $documents, array $options) { $options = [ 'format' => 'pdf', 'header' => FALSE, 'footer' => FALSE, 'filename' => 'Documentation_export_' . date('Ymd'), ]; $options = array_merge($options, $options); // $markdownParser = new \Michelf\MarkdownExtra(); $dd_base_path = DocsStream::basePath() . '/export/'; $header_html = $footer_html = $css = ''; $pages = []; // CSS. if (file_exists($dd_base_path . 'assets/inline_style.css')) { $css = '<link type="text/css" href="assets/inline_style.css" rel="stylesheet" />'; } // header. if ($options['header'] && file_exists($dd_base_path . 'assets/header.md')) { $header_markdown = file_get_contents($dd_base_path . 'assets/header.md'); $header_markdown = MarkdownExtra::defaultTransform($header_markdown); $header_html = new FilterProcessResult($header_markdown); } // Footer. if ($options['footer'] && file_exists($dd_base_path . 'assets/footer.md')) { $footer_markdown = file_get_contents($dd_base_path . 'assets/footer.md'); $footer_markdown = MarkdownExtra::defaultTransform($footer_markdown); $footer_html = new FilterProcessResult($footer_markdown); } // Generate pages. foreach ($documents as $document) { $markdown = file_get_contents($document); $markdown = MarkdownExtra::defaultTransform($markdown); $pages[] = new FilterProcessResult($markdown); } $html = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>'; $html .= $css; $html .= '</head><body>'; $html .= $header_html; $html .= $footer_html; $html .= implode('<div style="page-break-before: always;"></div>', $pages); $html .= '</body></html>'; $dompdf = new Dompdf(); $dompdf->setBasePath($dd_base_path); $dompdf->loadHtml($html); $dompdf->setPaper("A4"); $dompdf->render(); $content = $dompdf->output(['compress' => 0]); $filename = 'pdf-me.pdf'; $response = new Response($content, 200, [ 'Content-Type' => 'application/pdf', 'Cache-Control' => 'private', 'Pragma' => 'no-cache', 'Expires' => '0', 'Content-Length' => strlen($content), 'Content-Disposition' => 'inline; filename=' . rawurlencode($filename) . '; filename*=UTF-8\'\'' . rawurlencode($filename) . '\'', ]); $response->send(); } }