Created
March 14, 2011 23:32
-
-
Save lsolesen/870080 to your computer and use it in GitHub Desktop.
motionsplan_exercise_pdf.module
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| require_once 'fpdf.php'; | |
| class PDF_MC_Table extends FPDF | |
| { | |
| var $widths; | |
| var $aligns; | |
| var $imgs; | |
| function SetWidths($w) | |
| { | |
| //Set the array of column widths | |
| $this->widths=$w; | |
| } | |
| function SetAligns($a) | |
| { | |
| //Set the array of column alignments | |
| $this->aligns=$a; | |
| } | |
| function Row($data, $pics) | |
| { | |
| //Calculate the height of the row | |
| $nb=0; | |
| for($i=0;$i<count($data);$i++) { | |
| $nb=max($nb,$this->NbLines($this->widths[$i],$data[$i])); | |
| } | |
| $h=5*$nb; | |
| //Issue a page break first if needed | |
| $this->CheckPageBreak($h); | |
| //Draw the cells of the row | |
| for($i=0;$i<count($data);$i++) { | |
| $w=$this->widths[$i]; | |
| $a=isset($this->aligns[$i]) ? $this->aligns[$i] : 'L'; | |
| //Save the current position | |
| $x=$this->GetX(); | |
| $y=$this->GetY(); | |
| //Draw the border | |
| $this->Rect($x,$y,$w,$h); | |
| //Print the text | |
| $this->MultiCell($w,5,$data[$i],0,$a); | |
| //Put the position to the right of the cell | |
| $this->SetXY($x+$w,$y); | |
| } | |
| //Go to the next line | |
| $this->Ln($h); | |
| } | |
| function CheckPageBreak($h) | |
| { | |
| //If the height h would cause an overflow, add a new page immediately | |
| if($this->GetY()+$h>$this->PageBreakTrigger) | |
| $this->AddPage($this->CurOrientation); | |
| } | |
| function NbLines($w,$txt) | |
| { | |
| //Computes the number of lines a MultiCell of width w will take | |
| $cw=&$this->CurrentFont['cw']; | |
| if($w==0) | |
| $w=$this->w-$this->rMargin-$this->x; | |
| $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; | |
| $s=str_replace("\r",'',$txt); | |
| $nb=strlen($s); | |
| if($nb>0 and $s[$nb-1]=="\n") | |
| $nb--; | |
| $sep=-1; | |
| $i=0; | |
| $j=0; | |
| $l=0; | |
| $nl=1; | |
| while($i<$nb) | |
| { | |
| $c=$s[$i]; | |
| if($c=="\n") | |
| { | |
| $i++; | |
| $sep=-1; | |
| $j=$i; | |
| $l=0; | |
| $nl++; | |
| continue; | |
| } | |
| if($c==' ') | |
| $sep=$i; | |
| $l+=$cw[$c]; | |
| if($l>$wmax) | |
| { | |
| if($sep==-1) | |
| { | |
| if($i==$j) | |
| $i++; | |
| } | |
| else | |
| $i=$sep+1; | |
| $sep=-1; | |
| $j=$i; | |
| $l=0; | |
| $nl++; | |
| } | |
| else | |
| $i++; | |
| } | |
| return $nl; | |
| } | |
| } | |
| function exerciseprogram_print_compact_pdf() { | |
| $nids = exerciseprogram_get_nids(arg(2)); | |
| if(sizeof($nids)<=0) { | |
| return '<strong>Du skal tilføje øvelser for at kunne udskrive</strong>'; | |
| } | |
| $sql = "SELECT name, description FROM {exercise_program} WHERE pid = %d"; | |
| $r = db_fetch_array(db_query($sql,arg(2))); | |
| $title = utf8_decode($r['name']); | |
| $description = utf8_decode($r['description']); | |
| $pdf=new PDF_MC_Table(); | |
| $pdf->SetTitle($title); | |
| $pdf->SetSubject(''); | |
| $pdf->SetAuthor('Motionsplan.dk'); | |
| $pdf->SetAutoPageBreak(false); | |
| $pdf->AddPage(); | |
| $pdf->SetFont('Helvetica', 'B', 26); | |
| $pdf->setTextColor(255, 255, 255); | |
| $pdf->Cell(0, 22, $title, null, 2, 'C', true); | |
| $pdf->SetFont('Helvetica', null, 12); | |
| $pdf->setTextColor(0, 0, 0); | |
| $pdf->setY(40); | |
| $pdf->MultiCell(180, 6, $description, 0); | |
| $pdf->SetWidths(array(50,70,70)); | |
| $pdf->Row(array(utf8_decode('Øvelse'), utf8_decode('Beskrivelse'), utf8_decode('Kommentar'))); | |
| $pdf->SetFont('Helvetica', null, 10); | |
| foreach($nids as $no => $eid) { | |
| $e = node_load($eid); | |
| $imgs = array(); | |
| foreach($e->field_exercise_images as $img) { | |
| $imgs[] = str_replace('/files/','/files/imagecache/exercisePictureCompact/',$img['filepath']); | |
| } | |
| if(sizeof($imgs) > 3) { | |
| $tmp_imgs = array(); | |
| $tmp_imgs[] = $imgs[0]; | |
| $tmp_imgs[] = $imgs[floor(sizeof($imgs)/2)]; | |
| $tmp_imgs[] = $imgs[sizeof($imgs)-1]; | |
| $imgs = $tmp_imgs; | |
| } | |
| $pdf->Row(array(utf8_decode($e->title), utf8_decode($e->field_exercise_intro[0]['value']), ''), $pics); | |
| } | |
| $pdf->Output(); | |
| } | |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
How can I write the pictures in the first table row of the table just beneath the headline in that row?