GeneratePdf.php in PDF using mPDF 8
File
src/Controller/GeneratePdf.php
View source
<?php
namespace Drupal\pdf_using_mpdf\Controller;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\Entity\EntityTypeManager;
use Drupal\Core\Render\Renderer;
use Drupal\Core\Session\AccountInterface;
use Drupal\node\NodeInterface;
use Drupal\pdf_using_mpdf\Conversion\ConvertToPdf;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Access\AccessResult;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
class GeneratePdf extends ControllerBase implements ContainerInjectionInterface {
protected $convert;
protected $entityTypeManager;
protected $renderer;
protected $configFactory;
public static function create(ContainerInterface $container) {
return new static($container
->get('pdf_using_mpdf.conversion'), $container
->get('entity_type.manager'), $container
->get('renderer'), $container
->get('config.factory'));
}
public function __construct(ConvertToPdf $convert, EntityTypeManager $entityTypeManager, Renderer $renderer, ConfigFactoryInterface $configFactory) {
$this->convert = $convert;
$this->entityTypeManager = $entityTypeManager;
$this->renderer = $renderer;
$this->configFactory = $configFactory;
}
public function checkAccess(AccountInterface $account) {
return AccessResult::allowedIf($account
->hasPermission('generate pdf using mpdf') && $this
->checkContentTypeEnabled());
}
protected function checkContentTypeEnabled() {
$node = \Drupal::routeMatch()
->getParameter('node');
if ($node instanceof NodeInterface) {
$config = $this->configFactory
->getEditable('pdf_using_mpdf.settings')
->get('pdf_using_mpdf');
if (in_array($node
->getType(), $config['enabled_content_types'])) {
return TRUE;
}
}
return FALSE;
}
public function generate(NodeInterface $node) {
$build = $this->entityTypeManager
->getViewBuilder('node')
->view($node, 'pdf_using_mpdf');
$fileContent = $this->convert
->convertToString($this->renderer
->render($build));
$response = new Response($fileContent);
$disposition = $response->headers
->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $this->convert
->getFilename());
$response->headers
->set('Content-Disposition', $disposition);
$response->headers
->set('Content-type', 'application/pdf');
return $response;
}
}