assertNoHeadersSent(); Environment::raiseMemoryLimit('512M'); Environment::raiseExecutionTime(300); $viewRenderer = $controller->getHelper('viewRenderer'); $viewRenderer->postDispatch(); $layoutHelper = $controller->getHelper('layout'); $oldLayout = $layoutHelper->getLayout(); $layout = $layoutHelper->setLayout('pdf'); $layout->content = $controller->getResponse(); $html = $layout->render(); // Restore previous layout and reset content, to properly show errors $controller->getResponse()->clearBody($viewRenderer->getResponseSegment()); $layoutHelper->setLayout($oldLayout); $imgDir = Url::fromPath('img'); $html = preg_replace( '~src="' . $imgDir . '/~', 'src="' . Icinga::app()->getBootstrapDirectory() . '/img/', $html ); $request = $controller->getRequest(); if (Hook::has('Pdfexport')) { $pdfexport = Hook::first('Pdfexport'); $pdfexport->streamPdfFromHtml($html, sprintf( '%s-%s-%d', $request->getControllerName(), $request->getActionName(), time() )); return; } $tmpDir = FileCache::instance()->directory('legacy_pdf'); if ($tmpDir === false) { throw new Exception('Could not create temporary directory for PDF rendering'); } $options = new Options(); $options->set('defaultPaperSize', 'A4'); $options->set('fontDir', $tmpDir); $options->set('fontCache', $tmpDir); $options->set('tempDir', $tmpDir); $options->set('chroot', $tmpDir); $dompdf = new Dompdf($options); $dompdf->loadHtml($html); $dompdf->render(); $dompdf->stream( sprintf( '%s-%s-%d', $request->getControllerName(), $request->getActionName(), time() ) ); } }