1<?php 2 3class FeatureAutomargins { 4 var $_top_margin; 5 var $_bottom_margin; 6 7 function FeatureAutomargins() { 8 $this->_top_margin = 0; 9 $this->_bottom_margin = 0; 10 } 11 12 function handle_before_page_heights($params) { 13 $pipeline =& $params['pipeline']; 14 $document =& $params['document']; 15 $media =& $params['media']; 16 17 $boxes = $pipeline->reflow_margin_boxes(0, $media); 18 19 $this->_top_margin = max($boxes[CSS_MARGIN_BOX_SELECTOR_TOP]->get_real_full_height(), 20 $boxes[CSS_MARGIN_BOX_SELECTOR_TOP_LEFT_CORNER]->get_real_full_height(), 21 $boxes[CSS_MARGIN_BOX_SELECTOR_TOP_LEFT]->get_real_full_height(), 22 $boxes[CSS_MARGIN_BOX_SELECTOR_TOP_CENTER]->get_real_full_height(), 23 $boxes[CSS_MARGIN_BOX_SELECTOR_TOP_RIGHT]->get_real_full_height(), 24 $boxes[CSS_MARGIN_BOX_SELECTOR_TOP_RIGHT_CORNER]->get_real_full_height()); 25 $this->_bottom_margin = max($boxes[CSS_MARGIN_BOX_SELECTOR_BOTTOM]->get_real_full_height(), 26 $boxes[CSS_MARGIN_BOX_SELECTOR_BOTTOM_LEFT_CORNER]->get_real_full_height(), 27 $boxes[CSS_MARGIN_BOX_SELECTOR_BOTTOM_LEFT]->get_real_full_height(), 28 $boxes[CSS_MARGIN_BOX_SELECTOR_BOTTOM_CENTER]->get_real_full_height(), 29 $boxes[CSS_MARGIN_BOX_SELECTOR_BOTTOM_RIGHT]->get_real_full_height(), 30 $boxes[CSS_MARGIN_BOX_SELECTOR_BOTTOM_RIGHT_CORNER]->get_real_full_height()); 31 32 $media->margins['top'] = $this->_top_margin / mm2pt(1); 33 $media->margins['bottom'] = $this->_bottom_margin / mm2pt(1); 34 35 $pipeline->output_driver->update_media($media); 36 $pipeline->_setupScales($media); 37 } 38 39 function install(&$pipeline, $params) { 40 $dispatcher =& $pipeline->get_dispatcher(); 41 $dispatcher->add_observer('before-page-heights', array(&$this, 'handle_before_page_heights')); 42 } 43} 44 45?>