| Server IP : 198.244.165.102 / Your IP : 216.73.216.218 [ Web Server : nginx/1.24.0 System : Linux modovh-ub-01 6.8.0-138-generic #138-Ubuntu SMP PREEMPT_DYNAMIC Fri Jul 31 22:41:49 UTC 2026 x86_64 User : colleary ( 1011) PHP Version : 8.3.23 Disable Function : NONE Domains : 2 Domains MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/sfpcplanning/public_html/lib/ |
Upload File : |
<?php
/**
* APrint.php
*
* Simple class for printing text
*
* $Header: d:\cvs/classistd/aprint/aprint.php,v 1.15 2005/02/13 20:29:29 Darvin Exp $
*
* @author Andrioli Darvin
* @version 1.4.0
*
* @copyright
* Copyright (C) 2003-2005 Andrioli Darvin <darvin@andrioli.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
/**
* Print using courier new, with predefined size, weight 400 (normal)
* @const AP_NORMAL_FONT
* @access public
*/
define('AP_NORMAL_FONT',0); // print using NORMAL FONT
/**
* Print using courier new, with predefined size, weight 800 (bold)
* @const AP_BOLD_FONT
* @access public
*/
define('AP_BOLD_FONT',1); // print using bold font
/**
* Small font used to print the page's footer
* @const AP_FOOTER_FONT
* @access public
*/
define('AP_FOOTER_FONT',2);
/**
* left text align.
* @const AP_LEFT
* @access public
* @see text()
*/
define('AP_LEFT',0);
/**
* center text align.
* @const AP_CENTER
* @access public
* @see text()
*/
define('AP_CENTER',1);
/**
* right text align.
* @const AP_RIGHT
* @access public
* @see text()
*/
define('AP_RIGHT',2);
/**
* class APrint
*
*/
class APrint {
/**
* Selected printer (Windows name)
*
* @var string $PrinterName
*/
var $PrinterName;
/**
* I've already established a connection to the printer?
* (TRUE/FALSE)
* @var bool $ConnectionOpened
*/
var $ConnectionOpened;
/**
* printer handler
*
* @var resource
*/
var $hPrinter;
/**
* Current row
* @var integer
*/
var $row;
/**
* Orizontal resolution
* @var integer
*/
var $Res_X;
/**
* Vertical resolution
* @var integer
*/
var $Res_Y;
/**
* Value for the font height
* @var integer
*/
var $FontH;
/**
* Value for the font width
*
*/
var $FontW;
/**
* Page counter
*
*/
var $NPag;
/**
* handler of current selected font
*/
var $CurrentFont;
/**
* Paper hight
*
*/
var $PaperDimX;
/**
* Paper width
*
*/
var $PaperDimY;
/**
* Margins, size of the top margin
*/
var $MarginTop;
/**
* Margins, size of the bottom margin
*/
var $MarginBottom;
/**
* Margins, size of the left margin
*/
var $MarginLeft;
/**
* Margins, size of the right margin
*/
var $MarginRight;
/**
* array with all created font
* @var array $FontTable
* @see CreateFont()
*/
var $FontTable;
/**
* Job name
* @var string $JobTitle
* @see _OpenPrinter()
*/
var $JobTitle;
var $ScriptId;
/**
* Callbacks array. Ths index holdsall callback defined.
* Each index map to a particular function that supports the callback
* The supported call back are:
* 'newpage' -> Call the function each time just before execute the
* 'NewPage' function code
*
* @var array
* @see NewPage()
* @see SetCallBack();
* @see $CallBacksParm
*/
var $CallBacks;
/**
* Parameters for the callbacks functions
* @var array
* @see $CallBacks
*/
var $CallBacksParm;
/**
* Array holding the supported callbacks
* @var array
* @see SetCallBack()
*/
var $ValidCallbacks=array('newpage');
/**
* Should this module print its own page footer. If set to
* false, you may supply your custom footer using TextFooter
* and 'newpage' callback
* @var boolean
* @see NewPage()
* @see TextFooter()
* @see SetPrintFooter()
*/
var $PrintPageFooter=TRUE;
/**
* Array holding the supported unit of measure used by movement
* function.
* @var array
* @see MvRelativePos()
* @see MvAbsolutePos()
*/
var $ValidMeasure=array('row','mm','inch','twip');
/**
* Array containing texts to print as header into each page
* Also, into the array are stored the font id request to print the text
* You may set different font to each row.
* @var array
* @see SetNewPageHeader()
*/
var $NewPageHeader;
/**
* @var boolean
* @see SetAutoNewPage()
*/
var $AutoNewPage;
/**
* Initialize this class. It doesn not attempt to
* establish the connection to the printer
* This class will perform this job at the first time that you send any text
* @param string $TitleText document title
* @param string $ScriptId script identification
* @access public
*/
function APrint($TitleText="",$ScriptId="") {
$this->PrinterName="HP LaserJet 5100 PCL 6 (LPT3)"; // If no choice, use the default printer
$this->ConnectionOpened=false;
$this->row=10;
$this->NPag=0;
// Margins default settings
$this->MarginTop=400;
$this->MarginBottom=400;
$this->MarginLeft=40;
$this->MarginRight=40;
// Start with an empty array
$this->FontTable=array();
// Initial value for paper size. I'll set the correct value after I'll open the connection
// to the printer
$this->PaperDimX=-1;
$this->PaperDimY=-1;
$this->JobTitle=$TitleText;
$this->ScriptId=$ScriptId;
$this->CallBacks=array();
$this->CallBacksParm=array();
$this->NewPageHeader=array();
$this->SetAutoNewPage(TRUE);
}
/**
* inizialize all parameter about the page size
* Require a printer handler.
* Unit used: twip,
* 1 inch = 1440 twip
* 1 mm = 56.7 twip
* @access private
*/
function _DefinePageSize()
{
$PaperType=printer_get_option($this->hPrinter, PRINTER_PAPER_FORMAT);
switch($PaperType)
{
case PRINTER_FORMAT_CUSTOM:
// custom paper width in mm
$this->PaperDimX=printer_get_option($this->hPrinter, PRINTER_PAPER_WIDTH)*56.7;
$this->PaperDimY=printer_get_option($this->hPrinter, PRINTER_PAPER_LENGTH)*56.7;
break;
case PRINTER_FORMAT_LETTER:
$this->PaperDimX=8.5*1440;
$this->PaperDimY=11*1440;
break;
case PRINTER_FORMAT_LEGAL:
$this->PaperDimX=8.5*1440;
$this->PaperDimY=14*1440;
break;
case PRINTER_FORMAT_A3:
$this->PaperDimX=297*56.7;
$this->PaperDimY=420*56.7;
break;
case PRINTER_FORMAT_A4:
$this->PaperDimX=8*1440;
$this->PaperDimY=11.69*1440;
break;
case PRINTER_FORMAT_A5:
$this->PaperDimX=148*56.7;
$this->PaperDimY=210*56.7;
break;
case PRINTER_FORMAT_B4:
$this->PaperDimX=250*56.7;
$this->PaperDimY=354*56.7;
break;
case PRINTER_FORMAT_B5:
$this->PaperDimX=182*56.7;
$this->PaperDimY=257*56.7;
break;
case PRINTER_FORMAT_FOLIO:
$this->PaperDimX=8.5*1440;
$this->PaperDimY=13*1440;
break;
default:
$this->PaperDimX=8.27*1440;
$this->PaperDimY=11.69*1440;
break;
// trigger_error("Paper format type:".$PaperType." not supported",E_USER_ERROR);
}
// Now that I know the size of the page, I check tha value for margins
$this->_CheckMarginValue();
}
/**
* Check the value for the margin. They should be >0 and
* less then the page size
*
* @access private
*/
function _CheckMarginValue()
{
if($this->MarginTop<0)
trigger_error("Top margin is < 0. It should be greater or equal to 0",E_USER_ERROR);
if($this->PaperDimY>0 && $this->MarginTop>$this->PaperDimY)
trigger_error("Top margin bigger then paper size",E_USER_ERROR);
#
if($this->MarginBottom<0)
trigger_error("Bottom margin is < 0. It should be greater or equal to 0",E_USER_ERROR);
if($this->PaperDimY>0 && $this->MarginBottom>$this->PaperDimY)
trigger_error("Bottom margin bigger then paper size",E_USER_ERROR);
if($this->PaperDimY>0 && ($this->MarginBottom+$this->MarginTop)>$this->PaperDimY)
trigger_error("No rows to write left. Bottom margin + top margin bigger then paper size",E_USER_ERROR);
if($this->MarginLeft<0)
trigger_error("Left margin is < 0. It should be greater or equal to 0",E_USER_ERROR);
if($this->PaperDimX>0 && $this->MarginLeft>$this->PaperDimX)
trigger_error("Left margin bigger then paper width",E_USER_ERROR);
if($this->MarginRight<0)
trigger_error("Right margin is < 0. It should be greater or equal to 0",E_USER_ERROR);
if($this->PaperDimX>0 && $this->MarginRight>$this->PaperDimX)
trigger_error("Right margin bigger then paper width",E_USER_ERROR);
if($this->PaperDimX>0 && ($this->MarginLeft+$this->MarginRight)>$this->PaperDimX)
trigger_error("No columns to write left. Left margin + right margin bigger then paper width",E_USER_ERROR);
}
/**
* Set the callback function
* @param string $callback which callback apply the function
* @param mixed $func function name or array holding object and method
* (see call_uzer_func_array manual page for more detail)
* @param array $parm parameters to pass to the function
* @access public
* @see $ValidCallbacks
* @see $CallBacks
*/
function SetCallBack($callback,$func,$parm)
{
if(!in_array($callback,$this->ValidCallbacks))
trigger_error('Callback '. $callback. ' does not supported',E_USER_ERROR);
$this->CallBacks[$callback]=$func;
$this->CallBacksParm[$callback]=$parm;
}
/**
* Useful function to setup all margins with one function
* use -1 to skip the parameter
*
* @param integer $top top margin size
* @param integer $bottom bottom margin size
* @param integer $left left margiclass
* @param integer $right right margin size
* @access public
*/
function SetMargin($top,$bottom=-1,$left=-1,$right=-1)
{
if(!($top<0))
$this->MarginTop=$top;
if(!($bottom<0))
$this->MarginBottom=$bottom;
if(!($left<0))
$this->MarginLeft=$left;
if(!($right<0))
$this->MarginRight=$right;
$this->_CheckMarginValue();
}
/**
* Set the size for the top margin
* @param integer
* @access public
*/
function SetTopMargin($value)
{
$this->MarginTop=$value;
$this->_CheckMarginValue();
}
/**
* Set the size for the bottom margin
* @param integer
* @access public
*/
function SetBottomMargin($value)
{
$this->MarginBottom=$value;
$this->_CheckMarginValue();
}
/**
* Set the size for the left margin
* @param integer
* @access public
*/
function SetLeftMargin($value)
{
$this->MarginLeft=$value;
$this->_CheckMarginValue();
}
/**
* Set the size for the right margin
* @param integer
* @access public
*/
function SetRightMargin($value)
{
$this->MarginRight=$value;
$this->_CheckMarginValue();
}
/**
* Specifiy which printer I'll use. If you don't give any printer, the default printer
* will be used.
* @param string $Name printer name as defined in Window
* @access public
*/
function SetPrinter($Name)
{
if($this->ConnectionOpened)
trigger_error("Set the printer name before send any text (or title)",E_USER_ERROR);
$this->PrinterName=$Name;
}
/**
* Set if the module should print its own footer or not.
* @param bool $print TRUE=print its own page footer
* @access public
*/
function SetPrintFooter($print)
{
$this->PrintPageFooter=$print;
}
/**
* Setup the text to print on each page.
* The text, passed as array, allow you to pass many rows
* ( 1 row = 1 item).
* @var array text to print. Due to compatibility toward previous version
* text may be a string, in that case font will be ignored
* @var array font to use to print each row
* @var bool Should I print the header on the first page?
* @access public
*/
function SetPageHeader($Text,$fontArray=array(),$OnFirstPage=true)
{
$this->PageHeader=$Text;
// Each call will destroy the previous values
$this->NewPageHeader=array();
if(is_array($Text))
{
// new parameters version aprint >= 1.2
foreach($Text as $Key => $Value)
{
if(array_key_exists($Key,$fontArray))
$txtFont=$fontArray[$Key];
else
$txtFont="";
$this->NewPageHeader[]=array('Text'=>$Value,
'Font'=>$txtFont);
}
}
else
{
// 1.0 version, $Text only one string
$this->NewPageHeader[]=array('Text'=>$Text,
'Font'=>"");
}
if($OnFirstPage&&$this->NPag==1)
$this->PrintPageHeader();
}
/**
* Set the AutoNewPage flag. If set to true, the module call the functionNewPage
* automatically at the end of the page, if set to off, the user must call the
* NewPage function
* @param boolean
* @return boolean The function returns the old value
* @see NewPage()
*/
function SetAutoNewPage($bool)
{
$old=$this->AutoNewPage;
$this->AutoNewPage=$bool;
return($old);
}
/**
* Write an header at the top of the first page.
* @param string Text to print
* @param integer $hFont font handle returned by CreateFont
* @access public
* @see CreateFont();
*/
function HeaderText($TitleText,$hFont=-1)
{
if(!$this->ConnectionOpened) $this->_OpenPrinter();
$this->Text("----------------------------------------------------------",AP_NORMAL_FONT);
$font=($hFont==-1)?AP_BOLD_FONT:$hFont;
$this->Text($TitleText,$font);
$this->Text("----------------------------------------------------------",AP_NORMAL_FONT);
}
/**
* Skip a row, left a blank row.
* @access public
*
*/
function BlankRow()
{
if(!$this->ConnectionOpened) $this->_OpenPrinter();
$this->Text(" ");
}
/**
* printout the text
* @param string $text text to printout
* @param integer $hFont Handle to the font to use. Handle returned by CreateFont
* @param integer $align text alignment
* @param integer $col Orizontal position where start to print the text. This value
* will be added to the left margin.
* @access public
* @see CreateFont()
* @see TextFooter()
*/
function Text($text,$hFont=-1,$align=AP_LEFT,$col=0)
{
if(!$this->ConnectionOpened) $this->_OpenPrinter();
// Select new font?
if($hFont!=-1)
{
$this->_SetFont($hFont);
}
$this->FontH=$this->FontTable[$this->CurrentFont]['fontHeight'];
$width=$this->FontTable[$this->CurrentFont]['fontWidth'];
$textWidth=strlen($text)*$width;
$StartCol=$this->_BeginCol($align,$textWidth,$col);
printer_draw_text($this->hPrinter,$text,$this->ResConv_x($StartCol),$this->ResConv_y($this->row));
$this->row+=$this->FontH;
if($this->row>($this->PaperDimY-$this->MarginBottom-300-$this->FontH)&&$this->AutoNewPage)
{
$this->NewPage();
}
}
/**
* printout the text at the exact position requested
* @param integer orizontal position
* @param integer vertical position where print the text
* @param string $text text to printout
* @param integer $hFont Handle to the font to use. Handle returned by CreateFont
* @access public
* @see CreateFont()
* @see Text()
*/
function TextXY($Xpos,$Ypos,$text,$hFont=-1)
{
if(!$this->ConnectionOpened) $this->_OpenPrinter();
// Select new font?
if($hFont!=-1)
{
$this->_SetFont($hFont);
}
$this->FontH=$this->FontTable[$this->CurrentFont]['fontHeight'];
$width=$this->FontTable[$this->CurrentFont]['fontWidth'];
printer_draw_text($this->hPrinter,$text,$this->ResConv_x($Xpos),$this->ResConv_y($Ypos));
$this->row=$Ypos+$this->FontH;
if($this->row>($this->PaperDimY-$this->MarginBottom-300-$this->FontH)&&$this->AutoNewPage)
{
$this->NewPage();
}
}
/**
* Print the page header
* @access public
* @see Text()
*/
function PrintPageHeader()
{
if(!$this->ConnectionOpened) $this->_OpenPrinter();
$OriginalFont=-1;
// var_dump($this->NewPageHeader);
foreach($this->NewPageHeader as $Value)
{
#
$Text=$Value['Text'];
$hFont=$Value['Font'];
// Select new font?
// var_dump($hFont);
if($hFont!=-1 && $hFont!="")
{
$oldFont=$this->_SetFont($hFont);
}
if($OriginalFont<0) $OriginalFont=$oldFont;
$width=$this->FontTable[$this->CurrentFont]['fontWidth'];
$FontH=$this->FontTable[$this->CurrentFont]['fontHeight'];
$textWidth=strlen($Text)*$width;
$StartCol=$this->_BeginCol(AP_LEFT,$textWidth,0);
printer_draw_text($this->hPrinter,$Text,$this->ResConv_x($StartCol),
$this->ResConv_y($this->row));
$this->row+=$FontH;
} // Loop on each row
if($OriginalFont>-1)
$this->_SetFont($OriginalFont);
}
/**
* Print the given text as page footer
* @param string $text text to printout
* @param integer $hFont Handle to the font to use. Handle returned by CreateFont
* @param integer $align text alignment
* @param integer $col Orizontal position where start to print the text. This value
* will be added to the left margin.
* @access public
* @see CreateFont()
* @see Text()
*/
function TextFooter($text,$hFont=-1,$align=AP_LEFT,$col=0)
{
if(!$this->ConnectionOpened) $this->_OpenPrinter();
// Select new font?
if($hFont!=-1)
{
$oldFont=$this->_SetFont($hFont);
}
else
{
$oldFont=$this->_SetFont(AP_FOOTER_FONT);
}
$width=$this->FontTable[$this->CurrentFont]['fontWidth'];
$FontH=$this->FontTable[$this->CurrentFont]['fontHeight'];
$textWidth=strlen($text)*$width;
$StartCol=$this->_BeginCol($align,$textWidth,$col);
printer_draw_text($this->hPrinter,$text,$this->ResConv_x($StartCol),
$this->ResConv_y($this->PaperDimY-$this->MarginBottom-$FontH));
printer_end_page($this->hPrinter);
$this->_SetFont($oldFont);
}
/**
* This function compute the starting position given the
* text alignment, the left margin and the starting column
* @param integer $align text alignment
* @param integer $textWidth text width
* @param integer $col Orizontal position where start to print the text. This value
* will be added to the left margin.
* @access private
* @see TextFooter()
* @see Text()
*
*/
function _BeginCol($align,$textWidth,$col)
{
switch($align)
{
case AP_LEFT:
$StartCol=$this->MarginLeft+$col;
break;
case AP_CENTER:
if(($this->MarginLeft+$this->MarginRight+$textWidth+$col)>$this->PaperDimX)
$StartCol=$this->MarginLeft;
else
$StartCol=$this->MarginLeft+$col+floor(($this->PaperDimX-$this->MarginLeft-$this->MarginRight-$textWidth-$col)/2);
break;
case AP_RIGHT:
if(($this->MarginLeft+$this->MarginRight+$textWidth+$col)>$this->PaperDimX)
$StartCol=$this->MarginLeft;
else
$StartCol=$this->PaperDimX-$this->MarginRight-$textWidth;
break;
}
return($StartCol);
}
#
/**
* Draw a dash line.
* @access public
*/
function Line()
{
$this->Text("----------------------------------------------------------");
}
/**
* Close the output to the printer and start to print
* @access public
*/
function run()
{
$this->_FooterNote();
printer_end_doc($this->hPrinter);
printer_close($this->hPrinter);
}
/**
* Close the current page and start a new one.
*
* @access public
*/
function NewPage()
{
if(!$this->ConnectionOpened)
trigger_error("Open the connection to the printer before run the function NewPage",E_USER_ERROR);
// run the callback, if set
if(array_key_exists('newpage',$this->CallBacks))
call_user_func_array($this->CallBacks['newpage'],$this->CallBacksParm['newpage']);
if($this->NPag&&$this->PrintPageFooter) {
$this->_FooterNote();
}
if($this->NPag) {
printer_end_page($this->hPrinter);
}
$this->NPag++;
printer_start_page($this->hPrinter);
$this->row=$this->MarginTop;
$this->PrintPageHeader();
}
/**
* Printout page number and script name as footer
*
* @access private
*/
function _FooterNote()
{
$oldFont=$this->_SetFont(AP_FOOTER_FONT);
printer_draw_text($this->hPrinter,$this->ScriptId,
$this->ResConv_x($this->MarginLeft),
$this->ResConv_y($this->PaperDimY-$this->MarginBottom-$this->FontTable[AP_FOOTER_FONT]['fontHeight']));
printer_draw_text($this->hPrinter,$this->NPag,
$this->ResConv_x($this->PaperDimX-$this->MarginRight-4000),
$this->ResConv_y($this->PaperDimY-$this->MarginBottom-$this->FontTable[AP_FOOTER_FONT]['fontHeight']));
$this->_SetFont($oldFont);
}
/**
* Create a new font
*
* @param string $fName Font Name, default: Courier New
* @param integer $fHeight Font height, default: 336
* @param integer $fWidth Font width, default: 168
* @param integer $fWeight Font weight, default: 400. 0 -> thin, 800 -> bold
* @param boolean $fItalic Italic script? True/False
* @param boolean $fUnderline Text with underline? True/False
* @param boolean $fStrikeout True/False
* @param integer $fOrientation Should be always 3 digits, i.e 020. See printer_create_font in the note to the manual
* @see _SetFont()
* @see Text()
* @access public
*
*/
function CreateFont($fName="Courier new",$fHeight=336,$fWidth=168,$fWeight=400,$fItalic=false,$fUnderline=false,$fStrikeout=false,$fOrientaton=0)
{
if(!$this->ConnectionOpened)
trigger_error("Open the connection to the printer before define the font",E_USER_ERROR);
$LastFontId=count($this->FontTable);
$this->FontTable[$LastFontId]['fontName']=$fName;
$this->FontTable[$LastFontId]['fontHeight']=$fHeight;
$this->FontTable[$LastFontId]['fontWidth']=$fWidth;
$this->FontTable[$LastFontId]['fontWeight']=$fWeight;
$this->FontTable[$LastFontId]['fontItalic']=$fItalic;
$this->FontTable[$LastFontId]['fontUnderline']=$fUnderline;
$this->FontTable[$LastFontId]['fontStrikeout']=$fStrikeout;
$this->FontTable[$LastFontId]['fontOrientaton']=$fOrientaton;
// printer_create_font("Courier New",66,33,400,false,false,false,0);
$this->FontTable[$LastFontId]['fontHandler']=printer_create_font($fName,$this->ResConv_y($fHeight),$this->ResConv_x($fWidth),$fWeight,$fItalic,$fUnderline,$fStrikeout,$fOrientaton);
return($LastFontId);
}
/**
* Establish the connection to the printer
* @access private
*/
function _OpenPrinter()
{
if($this->PrinterName=="")
$this->hPrinter=printer_open();
else
$this->hPrinter=printer_open($this->PrinterName);
//
$this->ConnectionOpened=true;
$this->_DefinePageSize(); // inizialize all parameter relate the margins, and page size
if(!$this->Res_X)
$this->Res_X=printer_get_option($this->hPrinter, PRINTER_RESOLUTION_X);
if(!$this->Res_Y)
$this->Res_Y=printer_get_option($this->hPrinter, PRINTER_RESOLUTION_Y);
printer_start_doc($this->hPrinter, $this->JobTitle);
$this->_DefaultFont();
$this->_SetFont(AP_NORMAL_FONT);
$this->NewPage();
}
/**
* Start the connection to the printer. This is the public interface
* to _OpenPrinter.
* @param string Name of the printer to use. If not set use the system default
* @access public
* @see _OpenPrinter()
*/
function OpenPrinter($PrinterName="")
{
if($PrinterName!="") $this->SetPrinter($PrinterName);
$this->_OpenPrinter();
}
/**
* Define some dafault font
* @access private
*/
function _DefaultFont()
{
// create predefined font. Don't change the row order
$this->CreateFont("Courier New",336,168,400,false,false,false,0);
$this->CreateFont("Courier New",336,168,800,false,false,false,0);
// echo $this->CreateFont("arial",163,84,200,false,false,false,0);
$this->CreateFont("Courier new",163,50,200,false,false,false,0);
}
/**
* Convert the internal point size to the printer point size according to its resolution
* As internal unit I use the twip. 1 inch = 1440 twip, 1 mm = 56,7 twip
* @param integer
* @return integer
* @access private
* @see ResConv_y()
*/
function ResConv_x($value)
{
return(floor($value*$this->Res_X/1440));
}
/**
* @param integer
* @return integer
* @see ResConv_x()
*/
function ResConv_y($value)
{
return(floor($value*$this->Res_Y/1440));
}
/**
* Convert the printer point size into internal point size according to its resolution
* As internal unit I use the twip. 1 inch = 1440 twip, 1 mm = 56,7 twip
* @param integer
* @return integer
* @access private
* @see Conv2Twip_y()
* @see ResConv_x()
* @see ResConv_y()
*/
function Conv2Twip_x($value)
{
return(floor($value*1440/$this->Res_X));
}
/**
* @param integer
* @return integer
* @see Conv2Twip_x()
*/
function Conv2Twip_y($value)
{
return(floor($value*1440/$this->Res_Y));
}
/**
* Activate the specified font
*
* @param int $fnt font handle returned by CreateFont
* @access private
* @see CreateFont()
*/
function _SetFont($fnt=-1)
{
if($fnt==-1)
$fntHandler=$this->CurrentFont;
else
$fntHandler=$fnt;
assert('array_key_exists($fntHandler,$this->FontTable)');
printer_select_font($this->hPrinter,$this->FontTable[$fntHandler]['fontHandler']);
$oldFont=$this->CurrentFont;
$this->CurrentFont=$fntHandler;
return($oldFont);
}
/**
* Move the currentline up or down of nRow rows. It return TRUE on success,
* FALSE otherwise
* @parameter integer $nUnit Numebr of 'unit' may be less or greater then zero
* @parameter string $unit measurement used to set the movement
* @access public
* @return boolean
*/
function MvRelativePos($nUnit,$unit='row')
{
$move=$this->_CalculatePos($nUnit,$unit);
if($move<0&&abs($move)>$this->row)
return(FALSE);
if($move>0&&$this->row+$move>$this->PaperDimY)
return(FALSE);
$this->row+=$move;
return(TRUE);
}
/**
* Move the currentline to nRow. It return TRUE on success,
* FALSE otherwise
* @parameter integer $nUnit Numebr of 'unit' it must be greater then zero
* @parameter string $unit measurement used to set the movement
* @access public
* @return boolean
*/
function MvAbsolutePos($nUnit,$unit='row')
{
$move=$this->_CalculatePos($nUnit,$unit);
if($move<1||$move>$this->PaperDimY)
return(FALSE);
$this->row=$move;
return(TRUE);
}
/**
* Move to the first row after the top margin It return TRUE on success,
* FALSE otherwise
* @access public
* @return boolean
*/
function MvTop()
{
$this->row=$this->MarginTop;
return(TRUE);
}
/**
* Move to the last row before the bottom margin It return TRUE on success,
* FALSE otherwise.
* Notice: the bottom is calculated using as row hight the current font
* @parameter integer $nRow New current line number
* @access public
* @return boolean
*/
function MvBottom()
{
$this->PaperDimY-$this->MarginBottom-300-$this->FontH;
return(TRUE);
}
/**
* Internal function used to calculate the movement.
* @parameter integer $nUnit Numebr of 'unit' may be less or greater then zero
* @parameter string $unit measurement used to set the movement
* @access public
* @return boolean
*/
function _CalculatePos($nUnit,$unit)
{
if(!in_array($unit,$this->ValidMeasure))
trigger_error('Unit of measure '.$unit.' not supported',E_USER_ERROR);
switch($unit)
{
case 'row':
$move=$this->FontH*$nUnit;
break;
case 'inch':
$move=$nUnit*1440;
break;
case 'mm':
$move=$nUnit*56.7;
break;
case 'twip':
$move=$nUnit;
break;
}
return($move);
}
/**
* Retrieve the page size
*
* @return array (width,length)
* @access public
*/
function GetPageSize()
{
return(array($this->PaperDimX,$this->PaperDimY));
}
} // end class APrint
?>