public function PostRenderSubscriber::postRender in Entity Print 8
Same name and namespace in other branches
- 8.2 src/EventSubscriber/PostRenderSubscriber.php \Drupal\entity_print\EventSubscriber\PostRenderSubscriber::postRender()
Alter the HTML after it has been rendered.
This is a temporary workaround for a core issue.
Parameters
\Drupal\entity_print\Event\PdfHtmlAlterEvent $event: The event object.
See also
https://drupal.org/node/1494670
File
- src/
EventSubscriber/ PostRenderSubscriber.php, line 54
Class
- PostRenderSubscriber
- The PostRenderSubscriber class.
Namespace
Drupal\entity_print\EventSubscriberCode
public function postRender(PdfHtmlAlterEvent $event) {
// We only apply the fix to PHP Wkhtmltopdf because the other implementations
// allow us to specify a base url.
if ($this->configFactory
->get('entity_print.settings')
->get('pdf_engine') !== 'phpwkhtmltopdf') {
return;
}
$html_string =& $event
->getHtml();
$html5 = new HTML5();
$document = $html5
->loadHTML($html_string);
// Define a function that will convert root relative uris into absolute urls.
$transform = function ($tag, $attribute) use ($document) {
$base_url = $this->requestStack
->getCurrentRequest()
->getSchemeAndHttpHost();
foreach ($document
->getElementsByTagName($tag) as $node) {
$attribute_value = $node
->getAttribute($attribute);
// Handle protocol agnostic URLs as well.
if (Unicode::substr($attribute_value, 0, 2) === '//') {
$node
->setAttribute($attribute, $base_url . Unicode::substr($attribute_value, 1));
}
elseif (Unicode::substr($attribute_value, 0, 1) === '/') {
$node
->setAttribute($attribute, $base_url . $attribute_value);
}
}
};
// Transform stylesheets, links and images.
$transform('link', 'href');
$transform('a', 'href');
$transform('img', 'src');
// Overwrite the HTML.
$html_string = $html5
->saveHTML($document);
}