PostRenderSubscriber.php in Entity Print 8
File
src/EventSubscriber/PostRenderSubscriber.php
View source
<?php
namespace Drupal\entity_print\EventSubscriber;
use Drupal\Component\Utility\Unicode;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\entity_print\Event\PdfEvents;
use Drupal\entity_print\Event\PdfHtmlAlterEvent;
use Masterminds\HTML5;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
class PostRenderSubscriber implements EventSubscriberInterface {
protected $configFactory;
protected $requestStack;
public function __construct(ConfigFactoryInterface $config_factory, RequestStack $request_stack) {
$this->configFactory = $config_factory;
$this->requestStack = $request_stack;
}
public function postRender(PdfHtmlAlterEvent $event) {
if ($this->configFactory
->get('entity_print.settings')
->get('pdf_engine') !== 'phpwkhtmltopdf') {
return;
}
$html_string =& $event
->getHtml();
$html5 = new HTML5();
$document = $html5
->loadHTML($html_string);
$transform = function ($tag, $attribute) use ($document) {
$base_url = $this->requestStack
->getCurrentRequest()
->getSchemeAndHttpHost();
foreach ($document
->getElementsByTagName($tag) as $node) {
$attribute_value = $node
->getAttribute($attribute);
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('link', 'href');
$transform('a', 'href');
$transform('img', 'src');
$html_string = $html5
->saveHTML($document);
}
public static function getSubscribedEvents() {
return [
PdfEvents::POST_RENDER => 'postRender',
];
}
}