defiancenl defiancenl - 5 months ago 32
SQL Question

How to improve rendering in FPDF?

<?php

$factuurnr = $_GET['factuurnr'];



require('fpdf/fpdf.php');

//Connect to your database
include("db_connect.php");

//Create new pdf file
$pdf=new FPDF();

//Open file
$pdf->Open();

//Disable automatic page break
$pdf->SetAutoPageBreak(false);

//Add first page
$pdf->AddPage();

//set initial y axis position per page
$y_axis_initial = 25;

//print column titles for the actual page
$pdf->SetFillColor(232, 232, 232);
$pdf->SetFont('Arial', 'B', 12);
$pdf->SetY($y_axis_initial);
$pdf->SetX(25);
$pdf->Cell(30, 6, 'klantnummer', 1, 0, 'L', 1);
$pdf->Cell(100, 6, 'factuurnummer', 1, 0, 'L', 1);
$pdf->Cell(30, 6, 'bedrag', 1, 0, 'R', 1);

$y_axis = $y_axis + $row_height;

//Select the Products you want to show in your PDF file
$query="SELECT * FROM facturen WHERE factuurnummer = '$factuurnr'";
$result=mysql_query($query);



//initialize counter
$i = 0;

//Set maximum rows per page
$max = 25;

//Set Row Height
$row_height = 6;

while($row = mysql_fetch_array($result))
{
//If the current row is the last one, create new page and print column title
if ($i == $max)
{
$pdf->AddPage();

//print column titles for the current page
$pdf->SetY($y_axis_initial);
$pdf->SetX(25);
$pdf->Cell(30, 6, 'klantnummer', 1, 0, 'L', 1);
$pdf->Cell(100, 6, 'factuurnummer', 1, 0, 'L', 1);
$pdf->Cell(30, 6, 'bedrag', 1, 0, 'R', 1);

//Go to next row
$y_axis = $y_axis + $row_height;

//Set $i variable to 0 (first row)
$i = 0;
}

$klantnummer = $row['klantnummer'];
$factuurnummer = $row['factuurnummer'];
$bedrag = $row['bedrag'];

$pdf->SetY($y_axis);
$pdf->SetX(25);

$pdf->Cell(30, 6, $klantnummer, 1, 0, 'L', 1);
$pdf->Cell(100, 6, $factuurnummer, 1, 0, 'L', 1);
$pdf->Cell(30, 6, $bedrag, 1, 0, 'R', 1);

//Go to next row
$y_axis = $y_axis + $row_height;
$i = $i + 1;
}

mysql_close;

//Create file
$pdf->Output();
?>


I'm trying to use fpdf to generate pdf with info from MySQL. To be honest, it Is working, however the rendering is off, and I'm too new to fpdf to figure this out.

The data from MySQL gets rendered above the table headers, and I'm not sure why.

Answer

Probably your initial set of $y_axis is wrong. Try this:

$y_axis = $y_axis_initial + $row_height;

I think you should replace 2 of your 3 '$y_axis = ...' lines (the last one is OK).

Comments