= 0.7. $tool_path = dirname($pdf_tool[1]) . '/../autoload.inc.php'; if (file_exists($tool_path)) { require_once $tool_path; } else { watchdog('print_pdf', 'Configured PDF tool does not exist at path: %path', array('%path' => $tool_path), WATCHDOG_ERROR); throw new Exception("Configured PDF tool does not exist, unable to generate PDF."); } $dompdf = new \Dompdf\Dompdf(); $unicode = TRUE; if (variable_get('print_pdf_autoconfig', PRINT_PDF_AUTOCONFIG_DEFAULT)) { $dompdf->set_option('enable_php', FALSE); $dompdf->set_option('enable_remote', TRUE); $dompdf->set_option('temp_dir', file_directory_temp()); $dompdf->set_option('enable_font_subsetting', $font_subsetting); $dompdf->set_option('font_cache', drupal_realpath('public://print_pdf/print_pdf_dompdf/fonts/')); } } // Try to use local file access for image files. $html = _print_access_images_via_file($html, $images_via_file); // Remove all scripts due to security concerns. $html = preg_replace('!(.*?)!is', '', $html); // Spaces in img URLs must be replaced with %20, when using external access. if (!$images_via_file) { $pattern = '!<(img\s[^>]*?)>!is'; $html = preg_replace_callback($pattern, '_print_replace_spaces', $html); } // It seems dompdf has problems with something in system.css, don't use it. $html = preg_replace('!!', '', $html); $url_array = parse_url($meta['url']); $protocol = $url_array['scheme'] . '://'; $host = $url_array['host']; $path = dirname($url_array['path']) . '/'; $dompdf->set_base_path($path); $dompdf->set_host($host); $dompdf->set_paper(drupal_strtolower($paper_size), $page_orientation); $dompdf->set_protocol($protocol); // It seems dompdf can't handle footers cleanly, so disable the following. /* $html = theme('print_pdf_dompdf_footer', array('html' => $html)); */ // If dompdf Unicode support is disabled, try to convert to ISO-8859-1 and // then to HTML entities. if (!$unicode) { // Convert the euro sign to an HTML entity. $html = str_replace('€', '€', $html); // Convert from UTF-8 to ISO 8859-1 and then to HTML entities. if (function_exists('utf8_decode')) { $html = utf8_decode($html); } // iconv fails silently when it encounters something that it doesn't know, // so don't use it. /* else if (function_exists('iconv')) { $html = iconv('UTF-8', 'ISO-8859-1', $html); } */ elseif (function_exists('mb_convert_encoding')) { $html = mb_convert_encoding($html, 'ISO-8859-1', 'UTF-8'); } elseif (function_exists('recode_string')) { $html = recode_string('UTF-8..ISO_8859-1', $html); } $html = htmlspecialchars_decode(htmlentities($html, ENT_NOQUOTES, 'ISO-8859-1'), ENT_NOQUOTES); } else { // Otherwise, ensure the content is properly formatted Unicode. $html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'); } // Must get rid of tbody (dompdf goes into recursion). $html = preg_replace('!]*?>|!i', '', $html); $dompdf->load_html($html); $dompdf->render(); return $dompdf->output(); } /** * Format the dompdf footer contents. * * @param array $vars * An associative array containing: * - $html: contents of the body of the HTML from the original node. * * @return string * customized HTML text * * @ingroup themeable * @ingroup print_themeable */ function theme_print_pdf_dompdf_footer($vars) { preg_match('!!si', $vars['html'], $tpl_footer); if (isset($tpl_footer[1])) { $html = str_replace($tpl_footer[0], '', $vars['html']); $text = ''; return str_replace("", "" . $text, $html); } else { return $vars['html']; } }