Skip to content

Instantly share code, notes, and snippets.

@lsolesen
Created March 14, 2011 23:32
Show Gist options
  • Select an option

  • Save lsolesen/870080 to your computer and use it in GitHub Desktop.

Select an option

Save lsolesen/870080 to your computer and use it in GitHub Desktop.
motionsplan_exercise_pdf.module
<?pdf
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();
}
@lsolesen
Copy link
Copy Markdown
Author

How can I write the pictures in the first table row of the table just beneath the headline in that row?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment