readCSS($pipeline->get_current_css_state()); return $box; } // Note that IFRAME width is NOT determined by its content, thus we need to override 'get_min_width' and // 'get_max_width'; they should return the constrained frame width. function get_min_width(&$context) { return $this->get_max_width($context); } function get_max_width(&$context) { return $this->get_width(); } function IFrameBox(&$root, $pipeline) { $this->InlineBlockBox(); // If NO src attribute specified, just return. if (!$root->has_attribute('src') || trim($root->get_attribute('src')) == '') { return; }; // Determine the fullly qualified URL of the frame content $src = $root->get_attribute('src'); $url = $pipeline->guess_url($src); $data = $pipeline->fetch($url); /** * If framed page could not be fetched return immediately */ if (is_null($data)) { return; }; /** * Render only iframes containing HTML only * * Note that content-type header may contain additional information after the ';' sign */ $content_type = $data->get_additional_data('Content-Type'); $content_type_array = explode(';', $content_type); if ($content_type_array[0] != "text/html") { return; }; $html = $data->get_content(); // Remove control symbols if any $html = preg_replace('/[\x00-\x07]/', "", $html); $converter = Converter::create(); $html = $converter->to_utf8($html, $data->detect_encoding()); $html = html2xhtml($html); $tree = TreeBuilder::build($html); // Save current stylesheet, as each frame may load its own stylesheets // $pipeline->pushCSS(); $css =& $pipeline->get_current_css(); $css->scan_styles($tree, $pipeline); $frame_root = traverse_dom_tree_pdf($tree); $box_child =& create_pdf_box($frame_root, $pipeline); $this->add_child($box_child); // Restore old stylesheet // $pipeline->pop_css(); $pipeline->pop_base_url(); } } ?>