19 declare(strict_types=1);
    36                                         <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />    39                                 <body>$content_html</body>    51         if (!is_string($content_html) || !strlen(trim($content_html))) {
    58         if (!@$dom->loadHTML($html)) {
    62         $invalid_elements = [];
    64         $script_elements = $dom->getElementsByTagName(
'script');
    65         foreach ($script_elements as $elm) {
    66             $invalid_elements[] = $elm;
    69         foreach ($invalid_elements as $elm) {
    70             $elm->parentNode->removeChild($elm);
    74         $domX = 
new DomXPath($dom);
    75         foreach ($domX->query(
"//*[contains(@class, 'noprint')]") as $node) {
    76             $node->parentNode->removeChild($node);
    79         $dom->encoding = 
'UTF-8';
    81         $content_to_replace = $this->generateImageDataSrces($dom);
    83         $cleaned_html = $dom->saveHTML();
    89         if ($content_to_replace === null) {
    93         return str_replace(array_keys($content_to_replace), array_values($content_to_replace), $cleaned_html);
    96     private function generateImageDataSrces(
DOMDocument $dom): ?array
    98         $content_to_replace = null;
   100         $image_file_names = [];
   101         foreach ($dom->getElementsByTagName(
'img') as $elm) {
   103             $src = $elm->getAttribute(
'src');
   104             $original_content = $dom->saveHTML($elm);
   106             if (array_key_exists($src, $sources)) {
   107                 $replacement_content = preg_replace(
'/src=[^\s]*/', 
"src='{$sources[$src]}'", $original_content);
   108                 $content_to_replace[$original_content] = $replacement_content;
   112             if (stripos($src, ILIAS_HTTP_PATH) !== 
false   113                 && stripos($src, 
'templates') === 
false) {
   118                 $image_raw_content = file_get_contents($src);
   120                 file_put_contents($image_file_names[$src], $image_raw_content);
   121                 $image_content = base64_encode($image_raw_content);
   122                 $file_info = finfo_open(FILEINFO_MIME_TYPE);
   123                 $mime_type = finfo_file($file_info, $image_file_names[$src]);
   124                 $image_data = 
"data:{$mime_type};base64,{$image_content}";
   125                 $sources[$src] = $image_data;
   126                 $replacement_content = preg_replace(
'/src=[^\s]*/', 
"src='{$image_data}'", $original_content);
   127                 $content_to_replace[$original_content] = $replacement_content;
   133         foreach ($image_file_names as $image_file_name) {
   134             unlink($image_file_name);
   137         return $content_to_replace;
   155             $fname = 
"./Customizing/global/skin/" .
   159         if ($fname == 
"" || !file_exists($fname)) {
   160             $fname = 
"./" . $module_path . 
"templates/default/" . basename($a_filename);
   167         $css_content = file_get_contents($this->
getTemplatePath(
'delos.css', 
''));
   168         $css_content .= 
' html, body { overflow: auto; } body { padding: 1rem; }';
 
getTemplatePath($a_filename, $module_path='Modules/Test/')
 
makeHtmlDocument($content_html, $style_html)
 
generateHTML(string $content, string $filename)
 
static getCurrentSkin()
get the current skin use always this function instead of getting the account's skin the current skin ...
 
Class that handles PDF generation for test and assessment. 
 
static ilTempnam(?string $a_temp_path=null)
Returns a unique and non existing Path for e temporary file or directory. 
 
static signFile(string $path_to_file)
 
preprocessHTML(string $html)
 
buildHtmlDocument($content_html, $style_html)