How to auto adjust cell height in fpdf - php

How can I auto adjust the cell height in fpdf?
My pdf looks a little bit bad ;)
Screenshot of PDF
My code:
$pdf->SetFont('Arial', 'B', 13);
$pdf->SetLeftMargin(30);
$pdf->SetFillColor(193,229,252);
$pdf->Cell(15, 20, '', 0, 1, 'C');
$pdf->Cell($width_cell[0], 10, 'Datum', 1, 0, 'C', true);
$pdf->Cell($width_cell[1], 10, 'Von', 1, 0, 'C', true);
$pdf->Cell($width_cell[2], 10, 'Bis', 1, 0, 'C', true);
$pdf->Cell($width_cell[3], 10, 'Grund', 1, 1, 'C', true);
$pdf->SetFont('Arial', '', 13);
$fill = false;
while ($z = $stmt->fetch(PDO::FETCH_ASSOC)) {
$pdf->Cell($width_cell[0],10,date("d.m.Y", strtotime($z['date'])),1,0,'C',$fill);
$pdf->Cell($width_cell[1],10,substr($z['startTime'], 0, 5) . ' Uhr',1,0,'C',$fill);
$pdf->Cell($width_cell[2],10,substr($z['endTime'], 0, 5) . ' Uhr',1,0,'C',$fill);
$pdf->Cell($width_cell[3],10,$z['reason'],1,1,'C',$fill);
}
$pdf->Output();

To output multiple lines into a cell you'll need to use MultiCell instead of Cell.

Related

Download fpdf with a given name?

I am trying to download a pdf file. I can download it but I want the name of the file to be specific to a MySQL data. That is, in the code below. I want the name of the file to be the data inside $id. How to achieve this?
<?php
//include connection file
ob_start();
include_once('fpdf/fpdf.php');
include_once('connection.php');
class PDF extends FPDF
{
// Page header
function Header()
{
$this->SetFont('Arial','B',14);
$this->Cell(276, 5, 'Details', 0, 0, 'C');
$this->Ln();
$this->SetFont('Times', '', 12);
$this->Cell(276, 10, 'Details of students', 0, 0, 'C');
$this->Ln(20);
}
// Page footer
function Footer()
{
// Position at 1.5 cm from bottom
$this->SetY(-15);
// Arial italic 8
$this->SetFont('Arial','I',8);
// Page number
$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
}
function headerTable()
{
$this->SetFont('Times', 'B', 12);
$this->Cell(40, 10, 'ID', 1, 0, 'C');
$this->Cell(20, 10, 'Name', 1, 0, 'C');
$this->Cell(90, 5, 'Score', 1, 0, 'C');
$this->Cell(30, 10, 'Percentage', 1, 0, 'C');
$this->Cell(20, 10, 'Age', 1, 0, 'C');
$this->Cell(0, 5, '', 0, 1, 'C');
//mini cell open
$this->Cell(60, 5, '', 0, 0, 'C');
$this->Cell(45, 5, 'Wrongs', 1, 0, 'C');
$this->Cell(45, 5, 'Rights', 1, 0, 'C');
//mini cell close
//$this->Cell(20, 10, 'Wrongs', 1, 0, 'C');
//$this->Cell(20, 10, 'Rights', 1, 0, 'C');
$this->Ln();
}
function viewTable($db)
{
$this->SetFont('Times', '', 12);
$id=$_GET['id'];
$sql = "SELECT * FROM Datas WHERE ID = '$id'";
$stmt = $db->query($sql);
//$stmt->bindParam('s',$id);
//$stmt->query();
//$result=$stmt->get_result();
//$stmt->get_result();
while($data = $stmt->fetch(PDO::FETCH_OBJ)){
$this->Cell(40, 10, $data->ID, 1, 0, 'C');
$this->Cell(20, 10, $data->Name, 1, 0, 'L');
$this->Cell(45, 10, $data->Wrongs, 1, 0, 'L');
$this->Cell(45, 10, $data->Rights, 1, 0, 'L');
$this->Cell(30, 10, $data->Percentage, 1, 0, 'L');
$this->Cell(20, 10, $data->Age, 1, 0, 'L');
$this->Ln();
}
}
}
$pdf = new PDF();
$pdf->AliasNbPages();
$pdf->AddPage('L','A4',0);
$pdf->headerTable();
$pdf->viewTable($db);
$pdf->Output("D", "test.pdf"); //How to change test.pdf to $id.pdf? $id value obtained from viewTable()
ob_end_flush();
?>
Nevermind, got it. It was simple by adding $id to the name. The complete script:
<?php
//include connection file
ob_start();
include_once('fpdf/fpdf.php');
include_once('connection.php');
class PDF extends FPDF
{
// Page header
function Header()
{
$this->SetFont('Arial','B',14);
$this->Cell(276, 5, 'Details', 0, 0, 'C');
$this->Ln();
$this->SetFont('Times', '', 12);
$this->Cell(276, 10, 'Details of students', 0, 0, 'C');
$this->Ln(20);
}
// Page footer
function Footer()
{
// Position at 1.5 cm from bottom
$this->SetY(-15);
// Arial italic 8
$this->SetFont('Arial','I',8);
// Page number
$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
}
function headerTable()
{
$this->SetFont('Times', 'B', 12);
$this->Cell(40, 10, 'ID', 1, 0, 'C');
$this->Cell(20, 10, 'Name', 1, 0, 'C');
$this->Cell(90, 5, 'Score', 1, 0, 'C');
$this->Cell(30, 10, 'Percentage', 1, 0, 'C');
$this->Cell(20, 10, 'Age', 1, 0, 'C');
$this->Cell(0, 5, '', 0, 1, 'C');
//mini cell open
$this->Cell(60, 5, '', 0, 0, 'C');
$this->Cell(45, 5, 'Wrongs', 1, 0, 'C');
$this->Cell(45, 5, 'Rights', 1, 0, 'C');
//mini cell close
//$this->Cell(20, 10, 'Wrongs', 1, 0, 'C');
//$this->Cell(20, 10, 'Rights', 1, 0, 'C');
$this->Ln();
}
function viewTable($db)
{
$this->SetFont('Times', '', 12);
$id=$_GET['id'];
$sql = "SELECT * FROM Datas WHERE ID = '$id'";
$stmt = $db->query($sql);
//$stmt->bindParam('s',$id);
//$stmt->query();
//$result=$stmt->get_result();
//$stmt->get_result();
while($data = $stmt->fetch(PDO::FETCH_OBJ)){
$this->Cell(40, 10, $data->ID, 1, 0, 'C');
$this->Cell(20, 10, $data->Name, 1, 0, 'L');
$this->Cell(45, 10, $data->Wrongs, 1, 0, 'L');
$this->Cell(45, 10, $data->Rights, 1, 0, 'L');
$this->Cell(30, 10, $data->Percentage, 1, 0, 'L');
$this->Cell(20, 10, $data->Age, 1, 0, 'L');
$this->Ln();
}
}
}
$id=$_GET['id'];
$pdf = new PDF();
$pdf->AliasNbPages();
$pdf->AddPage('L','A4',0);
$pdf->headerTable();
$pdf->viewTable($db);
$pdf->Output("D", "$id.pdf");
ob_end_flush();
?>

How to use two color in one TCPDF Cell?

I have an invoice template. i used Cell for showing text into box.
here is my code:
$ntitle = 'No:';
$factornum = '1898';
$startheader = 15;
$pdf->SetXY($startheader, 4);
$pdf->Cell(50, 0, 'Date: '.date("Y-m-d"), 1, 1, 'C', 0, '', 1);
$pdf->SetXY($startheader, 12);
$pdf->SetTextColor(255, 0, 0);
$pdf->Cell(50, 0, $ntitle . $factornum, 1, 1, 'C', 0, '', 1);
$pdf->SetTextColor(0, 0, 0);
I want to use two text color in second cell.
$ntitle should be echo in black and $factornum in red
For example, output must be like:
No: (with black color) 1898 (with red color)
How can I do this in TCPDF?
I checked TCPDF examples. but I did not get any results
$ntitle = 'No:';
$factornum = '1898';
$startheader = 15;
$pdf->AddPage();
$pdf->SetXY($startheader, 4);
$pdf->Cell(50, 0, 'Date: '.date("Y-m-d"), 1, 1, 'C', 0, '', 1);
$pdf->SetXY($startheader, 12);
$pdf->SetTextColor(255, 0, 0);
//$pdf->Cell(50, 0, $ntitle . $factornum, 1, 1, 'C', 0, '', 1);
$pdf->SetFillColor(255, 255, 255);
$pdf->writeHTMLCell(50, '', '', '', '<span style="color:#000">'.$ntitle.'</span>' . $factornum, 1, 1, 'C', 0, '', 1);
$pdf->SetTextColor(0, 0, 0);

How to make table header and table footer appear on each page?

The table footer and header only appear at the beginning and at the end of the page. I'm using FPDF.
This is the code:
$pdf = new myPDF();
$pdf->AliasNbPages('{nb}');
$pdf->AddPage('L', 'A4', 0);
$pdf->headerTable();
$pdf->viewTable($con);
$pdf->footerTable();
$pdf->Output();
This is myPDF class:
<?php
$con = new PDO('mysql:host=localhost;dbname=db_tc', 'root', '');
require('function.php');
require('fpdf/fpdf.php');
class myPDF extends FPDF
{
function header()
{
$this->SetleftMargin(30);
$this->SetFont('Times', 'B', 14);
$this->Cell(0, 10, 'Office 1', 0, 0, 'C');
$this->Ln(20);
}
function footer()
{
$this->SetY(-15);
$this->SetFont('Times', '', 8);
$this->Cell(0, 10, 'Page ' . $this->PageNo() . '/{nb}', 0, 0, 'C');
}
function headerTable()
{
$this->SetleftMargin(20);
$this->SetFillColor(255, 213, 31);
$this->SetDrawColor(50, 50, 100);
$this->SetFont('Times', 'B', 12);
$this->Cell(15, 10, 'Nomor', 1, 0, 'C', true);
$this->Cell(40, 10, 'Tanggal Cek', 1, 0, 'C', true);
$this->Cell(40, 10, 'Type Unit', 1, 0, 'C', true);
$this->Cell(40, 10, 'Serial Number', 1, 0, 'C', true);
$this->Cell(40, 10, 'Serial Number2', 1, 0, 'C', true);
$this->Cell(30, 10, 'Lokasi', 1, 0, 'C', true);
$this->Cell(30, 10, 'Ruangan', 1, 0, 'C', true);
$this->Ln();
}
function footerTable()
{
$this->SetleftMargin(30);
$this->SetFillColor(255, 213, 31);
$this->SetDrawColor(50, 50, 100);
$this->SetFont('Times', 'B', 12);
$this->Cell(15, 10, 'Nomor', 1, 0, 'C', true);
$this->Cell(40, 10, 'Tanggal Cek', 1, 0, 'C', true);
$this->Cell(40, 10, 'Type Unit', 1, 0, 'C', true);
$this->Cell(40, 10, 'Serial Number', 1, 0, 'C', true);
$this->Cell(40, 10, 'Serial Number2', 1, 0, 'C', true);
$this->Cell(30, 10, 'Lokasi', 1, 0, 'C', true);
$this->Cell(30, 10, 'Ruangan', 1, 0, 'C', true);
$this->Ln();
}
function viewTable($con)
{
$this->SetleftMargin(30);
$this->SetFont('Times', '', 12);
$this->SetFillColor(224, 224, 224);
$stmt = $con->query("SELECT * FROM officepakai");
while ($data = $stmt->fetch(PDO::FETCH_OBJ)) {
$this->Cell(15, 10, $data->Nomor, 1, 0, 'C', true);
$this->Cell(40, 10, $data->Tanggal_Cek, 1, 0, 'L', true);
$this->Cell(40, 10, $data->Type_Unit, 1, 0, 'L', true);
$this->Cell(40, 10, $data->Serial_Number, 1, 0, 'L', true);
$this->Cell(40, 10, $data->Serial_Number2, 1, 0, 'L', true);
$this->Cell(30, 10, $data->Lokasi, 1, 0, 'L', true);
$this->Cell(30, 10, $data->Ruangan, 1, 0, 'L', true);
$this->Ln();
}
}
}
$pdf = new myPDF();
$pdf->AliasNbPages('{nb}');
$pdf->AddPage('L', 'A4', 0);
$pdf->headerTable();
$pdf->viewTable($con);
$pdf->footerTable();
$pdf->Output();
?>
I haven't worked with this lib but as per it's documentation here I'd say only Header and Footer methods are being called, but you seem to have some customizations called headerTable and footerTable.
The Header() and Footer() methods are called automatically, so I believe that calling the custom methods inside them should do the trick:
function Header()
{
$this->SetleftMargin(30);
$this->SetFont('Times', 'B', 14);
$this->Cell(0, 10, 'Office 1', 0, 0, 'C');
$this->Ln(20);
$this->headerTable(); // add this
}
function Footer()
{
$this->SetY(-15);
$this->SetFont('Times', '', 8);
$this->Cell(0, 10, 'Page ' . $this->PageNo() . '/{nb}', 0, 0, 'C');
$this->footerTable(); // add this
}

Make text fit in a cell with fpdf

im making a pdf file using fpdf.. The fdf generated will show data in table form from the database. My problem is, when the data string is too long, it do not fit well in the table cell. Look below in column no 3:
Below is my full code:
<?php
require('fpdf17/fpdf.php');
require('db.php');
//create a FPDF object
$pdf=new FPDF();
$pdf->SetFont('Times','B',20); //set font for the whole page (font family, style, size)
$pdf->SetTextColor(0,0,0); //using RGB value
//set up a page
$pdf->AddPage('P'); //potrait orientation
$pdf->SetDisplayMode('default'); //using 100 percent zoom and the viewer's default layout
$icon = "files/icon.png";
$pdf->Cell (10);
$pdf->Cell(60, 60, $pdf->Image($icon, $pdf->GetX(), $pdf->GetY(), 33.78), 0, 0, 'L', false);
$pdf->SetFillColor(0,0,0);
$pdf->SetFont('Times', '', 12);
$pdf->SetXY(10, 30);
$pdf->Cell(10);
$pdf->Cell(30, 6, 'Retrieval Date' , 0, 0, '', 0);
date_default_timezone_set("Asia/Kuala_Lumpur"); //set default time zone
$pdf->Cell(30, 6, ': '.date("d/m/Y"), 0, 2, 'B', 0);
//Set x and y position for the main text, reduce font size and write content
$pdf->SetXY(20,40); //setting the position
$pdf->SetFont('Times', 'BU', 14);
$pdf->Write(12,'Absenteeism record for:');
$course_course_code = addslashes( filter_input( INPUT_GET,'course',FILTER_SANITIZE_STRING ) );
$data = "SELECT course_code, course_name FROM studentattendance
INNER JOIN course ON studentattendance.course_course_code=course.course_code WHERE course_course_code LIKE '$_GET[course]' GROUP BY course_code";
$result = $conn->query($data) or die("Error: ".mysqli_error($conn));
while($ser=mysqli_fetch_array($result)){
$course_code = $ser['course_code'];
$course_name = $ser['course_name'];
$pdf->SetFillColor(0,0,0);
$pdf->SetFont('Times', '', 12);
$pdf->SetY(50);
$pdf->Cell(10);
$pdf->SetX(20);
$pdf->Cell(30, 6, 'COURSE' , 0, 0, '', 0);
$pdf->Cell(30, 6, ': '.$course_code. ' - '.$course_name, 0, 2, 'B', 0);
}
//start first table
$pdf->SetFillColor(255,255,255);
$pdf->SetFont('Times', 'B', 12);
$pdf->SetXY(21,58);
$pdf->Cell(10, 6, 'No.', 1, 0, 'L', 1);
$pdf->Cell(25, 6, 'Matric no', 1, 0, 'L', 1);
$pdf->Cell(75, 6, 'Name', 1, 0, 'L', 1);
$pdf->Cell(25, 6, 'GROUP', 1, 0, 'L', 1);
$pdf->Cell(30, 6, 'Absenteeism %', 1, 0, 'L', 1);
$row_height = 6;
$y1_axis = 58;
$y1_axis = $y1_axis + $row_height;
$counter = 1;
$course_course_code = addslashes( filter_input( INPUT_GET,'course',FILTER_SANITIZE_STRING ) );
$data = "SELECT stud_matric, stud_name, group_group_code, getid,
SUM(studAtt_endTime - studAtt_startTime)/(course_contacthour_perWeek * 14) AS 'sum' FROM studentattendance
INNER JOIN course ON studentattendance.course_course_code=course.course_code
INNER JOIN student ON studentattendance.student_stud_matric=student.stud_matric
WHERE studAtt_status='0' AND course_course_code LIKE '$_GET[course]' GROUP BY getid ORDER BY sum DESC";
$result = $conn->query($data) or die("Error: ".mysqli_error($conn));
while($ser=mysqli_fetch_array($result)){
$stud_matric = $ser['stud_matric'];
$stud_name = $ser['stud_name'];
$group_group_code = $ser['group_group_code'];
$per=number_format($ser['sum'] * 100, 2)." %";
$pdf->SetFont('Times', '', 12);
$pdf->SetXY(21, $y1_axis);
$pdf->Cell(10, 6, $counter, 1, 0, 'L', 1);
$pdf->Cell(25, 6, $stud_matric, 1, 0, 'L', 1);
$pdf->Cell(75, 6, $stud_name, 1, 0, 'L', 1);
$pdf->Cell(25, 6, $group_group_code, 1, 0, 'L', 1);
$pdf->Cell(30, 6, $per, 1, 0, 'L', 1);
$pdf->Ln();
$y1_axis = $y1_axis + $row_height;
$counter++;
if ($counter % 34 === 0) {
$pdf->AddPage();
$y1_axis = 20;
}
}
//end first table
//Output the document
$pdf->Output("$course_code.pdf",'I');
?>
Please help me..
Change the size of the cell
$pdf->Cell(5, 6, 'No.', 1, 0, 'L', 1);
$pdf->Cell(25, 6, 'Matric no', 1, 0, 'L', 1);
$pdf->Cell(100, 6, 'Name', 1, 0, 'L', 1);
$pdf->Cell(25, 6, 'GROUP', 1, 0, 'L', 1);
$pdf->Cell(30, 6, 'Absenteeism %', 1, 0, 'L', 1);

Page Break issues in fpdf and php

I have to generate multiple pages in fpdf by php.on first section i am using multicell.that works fine.after that i am using cell in a loop.
$GetMultiCellHeight = $pdf->y - $y;
$y = $y + $GetMultiCellHeight;
$pdf->SetXY($x, $y);
$pdf->Cell(30, 10, 'FILE NO', 1, 0, 'C');
$pdf->Cell(80, 10, 'FILE NAME', 1, 0, 'C');
$pdf->Cell(30, 10, 'DATE', 1, 0, 'C');
$pdf->Cell(50, 10, 'TYPE', 1, 0, 'C');
$y = $y + 10;
$pdf->SetXY($x, $y);
while ($rowSubmission_files = oci_fetch_row($parse_Submission_files)) {
$pdf->Cell(30, 10, $rowSubmission_files [1], 1, 0, 'C');
$pdf->Cell(80, 10, $rowSubmission_files [2], 1, 0, 'L');
$pdf->Cell(30, 10, $rowSubmission_files [5], 1, 0, 'C');
$pdf->Cell(50, 10, $rowSubmission_files [6], 1, 0, 'L');
$y = $y + 10;
$pdf->SetXY($x, $y);
}
I have two rows in my database to print file details.
after generation of pdf i am getting each rows in a new page. how to solve this?thanks in advance.

Categories