set_debug_boxes(false);
$this->set_filename($this->mk_filename());
$this->set_show_page_border(false);
$this->setFootnoteAreaHeight(0);
$this->setFootnoteCount(0);
$this->_postponed = array();
$this->anchors = array();
}
function postpone(&$box) {
$this->_postponed[] =& $box;
}
function show_postponed() {
$size = count($this->_postponed);
for ($i=0; $i<$size; $i++) {
$box =& $this->_postponed[$i];
$this->save();
$box->_setupClip($this);
$box->show_postponed($this, true);
$this->restore();
};
}
function show_postponed_in_absolute() {
$size = count($this->_postponed);
for ($i=0; $i<$size; $i++) {
$box =& $this->_postponed[$i];
if ($box->hasAbsolutePositionedParent()) {
$this->save();
$box->_setupClip($this);
$box->show_postponed($this, true);
$this->restore();
};
};
}
function show_postponed_in_fixed() {
$size = count($this->_postponed);
for ($i=0; $i<$size; $i++) {
$box =& $this->_postponed[$i];
if ($box->hasFixedPositionedParent()) {
$this->save();
$box->_setupClip($this);
$box->show_postponed($this, true);
$this->restore();
};
};
}
function next_page($old_page_height) {
$this->setFootnoteAreaHeight(0);
$this->setFootnoteCount(0);
$this->setPageHeight(mm2pt($this->media->real_height()));
$this->_postponed = array();
$this->current_page ++;
}
function setPageHeight($value) {
$this->_page_height = $value;
}
function getPageHeight() {
return $this->_page_height;
}
function getPageMaxHeight() {
return round(mm2pt($this->media->real_height()),2);
}
function getPageWidth() {
return round(mm2pt($this->media->real_width()),2);
}
function getPageLeft() {
return round(mm2pt($this->media->margins['left']),2);
}
function getPageTop() {
return round($this->offset + mm2pt($this->media->height() - $this->media->margins['top']),2);
}
function getPageBottom() {
return $this->getPageTop() - $this->getPageHeight();
}
function getFootnoteTop() {
return round($this->offset +
mm2pt($this->media->margins['bottom']) +
$this->getFootnoteAreaHeight(),
2);
}
function getFootnoteAreaHeight() {
return $this->_footnote_area_height;
}
function setFootnoteAreaHeight($value) {
$this->_footnote_area_height = $value;
}
function setFootnoteCount($value) {
$this->_footnote_count = $value;
}
function getFootnoteCount() {
return $this->_footnote_count;
}
function error_message() {
return $this->error_message;
}
/**
* Checks if a given box should be drawn on the current page.
* Basically, box should be drawn if its top or bottom edge is "inside" the page "viewport"
*
* @param GenericBox $box Box we're using for check
* @return boolean flag indicating of any part of this box should be placed on the current page
*/
function contains(&$box) {
return $this->willContain($box, 0);
}
function willContain(&$box, $footnote_height) {
/**
* These two types of boxes are not visual and
* may have incorrect position
*/
if (is_a($box, 'TableSectionBox')) { return true; };
if (is_a($box, 'TableRowBox')) { return true; };
$top = round($box->get_top(),2);
$bottom = round($box->get_bottom(),2);
$vp_top = $this->getPageTop();
$vp_bottom = max($this->getFootnoteTop() + $footnote_height,
$this->getPageTop() - $this->getPageHeight());
return ($top > $vp_bottom &&
$bottom <= $vp_top);
}
function draw_page_border() {
$this->setlinewidth(1);
$this->setrgbcolor(0,0,0);
$this->moveto($this->left, $this->bottom + $this->offset);
$this->lineto($this->left, $this->bottom + $this->height + $this->offset);
$this->lineto($this->left + $this->width, $this->bottom + $this->height + $this->offset);
$this->lineto($this->left + $this->width, $this->bottom + $this->offset);
$this->closepath();
$this->stroke();
}
function get_expected_pages() {
return $this->expected_pages;
}
function mk_filename() {
// Check if we can use tempnam to create files (so, we have PHP version
// with fixed bug it this function behaviour and open_basedir/environment
// variables are not maliciously set to move temporary files out of open_basedir
// In general, we'll try to create these files in ./temp subdir of current
// directory, but it can be overridden by environment vars both on Windows and
// Linux
$filename = tempnam(WRITER_TEMPDIR,WRITER_FILE_PREFIX);
$filehandle = @fopen($filename, "wb");
// Now, if we have had any troubles, $filehandle will be
if ($filehandle === false) {
// Note: that we definitely need to unlink($filename); - tempnam just created it for us!
// but we can't ;) because of open_basedir (or whatelse prevents us from opening it)
// Fallback to some stupid algorithm of filename generation
$tries = 0;
do {
$filename = WRITER_TEMPDIR.DIRECTORY_SEPARATOR.WRITER_FILE_PREFIX.md5(uniqid(rand(), true));
// Note: "x"-mode prevents us from re-using existing files
// But it require PHP 4.3.2 or later
$filehandle = @fopen($filename, "xb");
$tries++;
} while (!$filehandle && $tries < WRITER_RETRIES);
};
if (!$filehandle) {
die(WRITER_CANNOT_CREATE_FILE);
};
// Release this filehandle - we'll reopen it using some gzip wrappers
// (if they are available)
fclose($filehandle);
// Remove temporary file we've just created during testing
unlink($filename);
return $filename;
}
function get_filename() {
return $this->filename;
}
function &get_font_resolver() {
global $g_font_resolver_pdf;
return $g_font_resolver_pdf;
}
function is_debug_boxes() {
return $this->debug_boxes;
}
function is_show_page_border() {
return $this->show_page_border;
}
function rect($x, $y, $w, $h) {
$this->moveto($x, $y);
$this->lineto($x + $w, $y);
$this->lineto($x + $w, $y + $h);
$this->lineto($x, $y + $h);
$this->closepath();
}
function set_debug_boxes($debug) {
$this->debug_boxes = $debug;
}
function set_expected_pages($num) {
$this->expected_pages = $num;
}
function set_filename($filename) {
$this->filename = $filename;
}
function set_show_page_border($show) {
$this->show_page_border = $show;
}
function setup_clip() {
if (!$GLOBALS['g_config']['debugnoclip']) {
$this->moveto($this->left, $this->bottom + $this->height + $this->offset);
$this->lineto($this->left + $this->width, $this->bottom + $this->height + $this->offset);
$this->lineto($this->left + $this->width, $this->bottom + $this->height + $this->offset - $this->getPageHeight());
$this->lineto($this->left, $this->bottom + $this->height + $this->offset - $this->getPageHeight());
$this->clip();
};
}
function prepare() {
}
function reset(&$media) {
$this->update_media($media);
$this->_postponed = array();
$this->offset = 0;
$this->offset_delta = 0;
$this->expected_pages = 0;
$this->current_page = 0;
}
function &get_media() {
return $this->media;
}
function update_media(&$media) {
$this->media =& $media;
$this->width = mm2pt($media->width() - $media->margins['left'] - $media->margins['right']);
$this->height = mm2pt($media->height() - $media->margins['top'] - $media->margins['bottom']);
$this->left = mm2pt($media->margins['left']);
$this->bottom = mm2pt($media->margins['bottom']);
$this->setPageHeight(mm2pt($media->real_height()));
}
}
?>