yloc=10.25; $height['title']=0.25; $height['subtitle']=0.22; pdf_setfont($this->pdf,$this->headerfont,18); pdf_show_boxed($this->pdf,$this->page_header,$this->loc(0.75),$this->loc($this->yloc),$this->loc(7),$this->loc($height['title']),"center",null); $this->yloc-=$height['title']; pdf_setfont($this->pdf,$this->headerfont,14); pdf_show_boxed($this->pdf,$this->page_subheader,$this->loc(0.75),$this->loc($this->yloc),$this->loc(7),$this->loc($height['subtitle']),"center",null); $this->yloc-=$height['subtitle']; //only put the logo on the page if we actually have the logo if($this->logoimage) { //now place the logo image in the top-left-ish pdf_place_image($this->pdf,$this->logoimage,$this->loc(0.75),$this->loc($this->yloc+.02),.20); } //header line pdf_moveto($this->pdf,$this->loc(0.5),$this->loc($this->yloc)); pdf_lineto($this->pdf,$this->loc(8),$this->loc($this->yloc)); pdf_stroke($this->pdf); $this->yloc-=0.20; //now put a nice little footer at the bottom $footertext=date("Y-m-d h:ia")." - ".$this->page_header." - ".$this->page_subheader; $footerwidth=pdf_stringwidth($this->pdf,$footertext,$this->normalfont,9); pdf_setfont($this->pdf,$this->normalfont,9); pdf_show_xy($this->pdf,$footertext,$this->loc(4.25)-$footerwidth/2,$this->loc(0.5)); //footer line pdf_moveto($this->pdf,$this->loc(0.5),$this->loc(0.7)); pdf_lineto($this->pdf,$this->loc(8.0),$this->loc(0.7)); pdf_stroke($this->pdf); } function newPage() { if($this->pagenumber>0) pdf_end_page($this->pdf); $this->pagenumber++; //Letter size (8.5 x 11) is 612,792 pdf_begin_page($this->pdf,612,792); pdf_setlinewidth($this->pdf,0.3); $this->addHeaderAndFooterToPage(); } function vspace($space) { $this->yloc-=$space; } function setFontSize($size) { $this->currentFontSize=$size; pdf_setfont($this->pdf,$this->normalfont,$size); $leading=round($size*1.3); pdf_set_value($this->pdf,"leading",$leading); } function addText($text,$align="left") { $fontsize=pdf_get_value($this->pdf,"fontsize",0); $lineheight=ceil($fontsize*1.3); //the line height should be 1.2 * fontsize (approx) $stringwidth=pdf_stringwidth($this->pdf,$text,$this->normalfont,$fontsize); $textstr=$text; $nr=0; $prevnr=0; do { //echo "textstr=$textstr"; $len=strlen($textstr); // echo "(lh:$lineheight nr:$nr len:$len)".$textstr; $nl=false; //now lets handle a newline at the beginning, just rip it off and move the yloc ourself while($textstr[0]=="\n") { $textstr=substr($textstr,1); $this->yloc-=$lineheight/72; $nl=true; } if(!$nl) $this->yloc-=$lineheight/72; $nr=pdf_show_boxed($this->pdf,$textstr, $this->loc(0.75),$this->loc($this->yloc),$this->loc(7),$lineheight,$align,null); if($nr==$prevnr) { echo "breaking becausae nr==prevnr ($nr==$prevnr) trying to output [$textstr]"; break; } $prevnr=$nr; // printf("x=%f y=%f w=%f h=%f",$this->loc(0.75),$this->loc($this->yloc),$this->loc(7),$lineheight); // echo "$nr didnt fit"; // echo "
doing: substr($textstr,-$nr)
"; $textstr=substr($textstr,-$nr); // echo "nr=$nr"; } while($nr>0); // pdf_rect($this->pdf,$this->loc(0.75),$this->loc($this->yloc),$this->loc(7),$height); } function addTextX($text,$xpos) { pdf_show_xy($this->pdf,$text,$this->loc($xpos),$this->loc($this->yloc)); } function nextLine() { $this->yloc-=$this->currentFontSize*1.4/72; } function hr() { pdf_moveto($this->pdf,$this->loc(0.5),$this->loc($this->yloc)); pdf_lineto($this->pdf,$this->loc(8),$this->loc($this->yloc)); pdf_stroke($this->pdf); $this->yloc-=0.25; } function hline($x1,$x2) { pdf_moveto($this->pdf,$this->loc($x1),$this->loc($this->yloc)); pdf_lineto($this->pdf,$this->loc($x2),$this->loc($this->yloc)); pdf_stroke($this->pdf); } function heading($text) { pdf_setfont($this->pdf,$this->headerfont,12); //move down the full line height $this->yloc-=12/72; pdf_show_xy($this->pdf,$text,$this->loc(0.5),$this->loc($this->yloc)); pdf_setfont($this->pdf,$this->normalfont,$this->currentFontSize); //now leave some space under the heading (4 is 1/3 of 12, so 1/3 of the line height we leave) $this->yloc-=4/72; } function addTable($table) { $height['tableheader']=0.2; $height['tabledata']=0.18; $xpos_of_table=0.5; $this->yloc-=$height['tableheader']; $top_of_table=$this->yloc; $table_width=array_sum($table['widths']); $table_cols=count($table['header']); $table_padding=0.03; //draw the top line of the table (above the table header) pdf_moveto($this->pdf,$this->loc($xpos_of_table),$this->loc($this->yloc+$height['tableheader'])); pdf_lineto($this->pdf,$this->loc($xpos_of_table+$table_width),$this->loc($this->yloc+$height['tableheader'])); pdf_stroke($this->pdf); //draw the top line of the table (below the table header) pdf_moveto($this->pdf,$this->loc($xpos_of_table),$this->loc($this->yloc)); pdf_lineto($this->pdf,$this->loc($xpos_of_table+$table_width),$this->loc($this->yloc)); pdf_stroke($this->pdf); //do the header first if($table['header']) { pdf_setfont($this->pdf,$this->headerfont,12); $xpos=$xpos_of_table; for($c=0;$c<$table_cols;$c++) { $head=$table['header'][$c]; $width=$table['widths'][$c]; pdf_show_boxed($this->pdf,$head,$this->loc($xpos),$this->loc($this->yloc),$this->loc($width),$this->loc($height['tableheader']),"center",null); $xpos+=$width; } } //now do the data in the table if($table['data']) { pdf_setfont($this->pdf,$this->normalfont,10); foreach($table['data'] AS $dataline) { $this->yloc-=$height['tabledata']; $xpos=$xpos_of_table; for($c=0;$c<$table_cols;$c++) { $width=$table['widths'][$c]; pdf_show_boxed($this->pdf,$dataline[$c],$this->loc($xpos+$table_padding),$this->loc($this->yloc),$this->loc($width-2*$table_padding),$this->loc($height['tabledata']),$table['dataalign'][$c],null); $xpos+=$width; } //draw the line below the table data) pdf_moveto($this->pdf,$this->loc($xpos_of_table),$this->loc($this->yloc)); pdf_lineto($this->pdf,$this->loc($xpos_of_table+$table_width),$this->loc($this->yloc)); pdf_stroke($this->pdf); if($this->yloc<1) { //now draw all the vertical lines $xpos=$xpos_of_table; for($c=0;$c<$table_cols;$c++) { $width=$table['widths'][$c]; //draw the line below the table data) pdf_moveto($this->pdf,$this->loc($xpos),$this->loc($top_of_table+$height['tableheader'])); pdf_lineto($this->pdf,$this->loc($xpos),$this->loc($this->yloc)); pdf_stroke($this->pdf); $xpos+=$width; } //and the final line on the right side of the table: pdf_moveto($this->pdf,$this->loc($xpos),$this->loc($top_of_table+$height['tableheader'])); pdf_lineto($this->pdf,$this->loc($xpos),$this->loc($this->yloc)); pdf_stroke($this->pdf); $this->newPage(); $this->yloc-=$height['tableheader']; $top_of_table=$this->yloc; //draw the top line of the table (above the table header) pdf_moveto($this->pdf,$this->loc($xpos_of_table),$this->loc($this->yloc+$height['tableheader'])); pdf_lineto($this->pdf,$this->loc($xpos_of_table+$table_width),$this->loc($this->yloc+$height['tableheader'])); pdf_stroke($this->pdf); //draw the top line of the table (below the table header) pdf_moveto($this->pdf,$this->loc($xpos_of_table),$this->loc($this->yloc)); pdf_lineto($this->pdf,$this->loc($xpos_of_table+$table_width),$this->loc($this->yloc)); pdf_stroke($this->pdf); //do the header first if($table['header']) { pdf_setfont($this->pdf,$this->headerfont,12); $xpos=$xpos_of_table; for($c=0;$c<$table_cols;$c++) { $head=$table['header'][$c]; $width=$table['widths'][$c]; pdf_show_boxed($this->pdf,$head,$this->loc($xpos),$this->loc($this->yloc),$this->loc($width),$this->loc($height['tableheader']),"center",null); $xpos+=$width; } } pdf_setfont($this->pdf,$this->normalfont,10); } } } //now draw all the vertical lines $xpos=$xpos_of_table; for($c=0;$c<$table_cols;$c++) { $width=$table['widths'][$c]; //draw the line below the table data) pdf_moveto($this->pdf,$this->loc($xpos),$this->loc($top_of_table+$height['tableheader'])); pdf_lineto($this->pdf,$this->loc($xpos),$this->loc($this->yloc)); pdf_stroke($this->pdf); $xpos+=$width; } //and the final line on the right side of the table: pdf_moveto($this->pdf,$this->loc($xpos),$this->loc($top_of_table+$height['tableheader'])); pdf_lineto($this->pdf,$this->loc($xpos),$this->loc($this->yloc)); pdf_stroke($this->pdf); } function output() { pdf_end_page($this->pdf); //only close the image if it was opened to begin with if($this->logoimage) pdf_close_image($this->pdf,$this->logoimage); pdf_close($this->pdf); $pdfdata=pdf_get_buffer($this->pdf); header("Content-type: application/pdf"); header("Content-disposition: inline; filename=sfiab_".$this->page_subtitle.".pdf"); header("Content-length: ".strlen($pdfdata)); echo $pdfdata; } function lpdf($header,$subheader,$logo) { $this->pdf=pdf_new(); pdf_open_file($this->pdf,null); //open up the first page //Letter size (8.5 x 11) is 612,792 // pdf_begin_page($this->pdf,612,792); // pdf_set_parameter($this->pdf, "FontOutline", "Arial=/home/sfiab/www.sfiab.ca/sfiab/arial.ttf"); //$arial=pdf_findfont($this->pdf,"Arial","host",1); $this->normalfont=pdf_findfont($this->pdf,"Times-Roman","host",0); $this->headerfont=pdf_findfont($this->pdf,"Times-Bold","host",0); if(file_exists($logo)) $this->logoimage=pdf_open_image_file($this->pdf,"gif",$logo,"",0); pdf_set_info($this->pdf,"Author","SFIAB"); pdf_set_info($this->pdf,"Creator","SFIAB"); pdf_set_info($this->pdf,"Title","SFIAB - $subheader"); pdf_set_info($this->pdf,"Subject","$subheader"); $this->page_header=$header; $this->page_subheader=$subheader; $this->pagenumber=0; //add the stuff to the first page // $this->addHeaderAndFooterToPage(); } }