I am using PHP and FPDF to generate a PDF with a list of items. My problem is if the item list goes on to a second or third page, I want to keep the Item Name, Quantity and Description together. Right now, it will go to a second page, but it may split up all of the details for a particular item. PLEASE HELP!
<?php
require_once('auth.php');
require_once('config.php');
require_once('connect.php');
$sqlitems="SELECT * FROM $tbl_items WHERE username = '" . $_SESSION['SESS_LOGIN'] . "'";
$resultitems=mysql_query($sqlitems);
require_once('pdf/fpdf.php');
require_once('pdf/fpdi.php');
$pdf =& new FPDI();
$pdf->AddPage('P', 'Letter');
$pdf->setSourceFile('pdf/files/healthform/meds.pdf');
$tplIdx = $pdf->importPage(1);
$pdf->useTemplate($tplIdx);
$pdf->SetAutoPageBreak(on, 30);
$pdf->SetTextColor(0,0,0);
$pdf->Ln(10);
while($rowsitems=mysql_fetch_array($resultitems)){
$pdf->SetFont('Arial','B',10);
$pdf->Cell(50,4,'Item Name:',0,0,'L');
$pdf->SetFont('');
$pdf->Cell(100,4,$rowsitems['itemname'],0,0,'L');
$pdf->SetFont('Arial','B',10);
$pdf->Cell(50,4,'Quantity:',0,0,'L');
$pdf->SetFont('');
$pdf->Cell(140,4,$rowsitems['itemqty'],0,1,'L');
$pdf->SetFont('Arial','B');
$pdf->Cell(50,4,'Description:',0,0,'L');
$pdf->SetFont('');
$pdf->Cell(140,4,$rowsitems['itemdesc'],0,1,'L');
}
$pdf->Output('Items.pdf', 'I');
?>
bmb is on the right track. Here is a little more detailed solution.
There are a number of different ways to do this, but you’ll have to make some decisions based on what you want. If you have rows that may take up half the page, then this probably isn’t going to work the best for you, but if your rows are typically about 2 – 5 lines long then this is a good method.
Because my first cell in the row is a multiple lined cell (MultiCell in FPDF speak) in my table, the rows are of dynamic height based on this first cell. So I figure out how high the row is going to be based on the string width and the width of the cell and then compare that with the room left on the page, based on the current Y position, the page height and the bottom margin: