I have a table that i use to show a data and generate a report based on each row. The table would be like this:
----------------------------------------------------------------------------------------- | employee_name | division | period | allowance | download | checkbox | | tony | advertising | august 2018| 15.00 |(downloadbtn)|(checkboxbtn)| | lola | advertising | august 2018| 20.00 |(downloadbtn)|(checkboxbtn)| -----------------------------------------------------------------------------------------
this is my controller to generate the pdf so far:
<?php class AllowanceReport extends CI_Controller{ function __construct(){ parent::__construct(); $this->load->model('allowance_m'); } public function index(){ $this->load->view('allowance_v'); } public function reportpdf($id){ ob_start(); $allowance= $this->allowance_m->get_allowance_byid($id); $this->load->library('pdf_surat'); $pdf = new PDF_SURAT('P','mm','A4',true,'UTF-8',false); $pdf->AddPage(); $pdf->setXY(12,40); $txt_pembuka = 'Allowance Report'; //$pdf->SetFontSize(16); $pdf->SetFont('times', 'B', 16, '', 'false'); $pdf->MultiCell(0, 5, $txt_pembuka, 0, 'C', 0, 2, '', '', true); $pdf->setXY(20,$pdf->getY()+7); $pdf->SetFont('times', '', 12, '', 'false'); $pdf->cell(35,5,"Nama"); $pdf->cell(0,5,": ".$allowance->employee_name); $pdf->setXY(20,$pdf->getY()+7); $pdf->cell(35,5,"Periode"); $periode = strtotime($allowance->periode); $formatperiode = date('F Y',$periode); $pdf->cell(0,5,": ".$formatperiode); $pdf->setXY(20,$pdf->getY()+7); $pdf->cell(35,5,"Uang Makan"); $pdf->cell(0,5,": Rp.".$allowance->allowance); $pdf->Output(); ob_end_flush(); } } ?>
and this is the view:
<div class="table"> <table class="table table-striped table-bordered table-hover"> <thead> <tr> <th><center>Employee Name</center></th> <th><center>Division</center></th> <th><center>Period</center></th> <th><center>Allowance</center></th> <th><center>Download</center></th> <th><center><input type="checkbox" class="checkAll" /></center></th> <?php } ?> </tr> </thead> <?php $no = 1; if(is_array($query)){ foreach($query as $row): ?> <tr> <td><?php echo $row->employee_name ?></td> <td><?php echo $row->division ?></td> <td><?php echo date("F-Y", strtotime($row->period)) ?></td> <td><?php echo $row->allowance ?></td> <td> <center> <a href="<?php echo base_url(). "index.php/allowancereport/reportpdf/".$row->idallowance;?>" class="btn btn-success" id="cetaksurat_"><b><span class="glyphicon glyphicon-download"></span></b></a> </center> </td> <td> <center> <input type="checkbox" class="checkitem" value="<?php echo $row->idmakan; ?>"/> </center> </td> <td> <center> <a href="<?php echo base_url();?>absengaji/edit/<?php echo $row->idmakan;?>" class="btn btn-primary btn-xs edit" data-toggle="modal" id="edit_"> <span class="glyphicon glyphicon-pencil"></span></a> </center> </td> <?php } ?> </tr> <?php endforeach ; } ?> </table> </div> </div> </div> </div>
and here’s my model
public function get_allowance_byid($id) { $sql = "SELECT * FROM allowance WHERE idallowance='".$id."'"; return $this->db->query($sql)->row(); }
I managed to generate a pdf for each row. but is it possible to generate a file with multiple pages based on checked checkbox? could the pdf file generate each data checked with different pages in a file?
Advertisement
Answer
You could do it like below
Front End
Add form tags before and after table tags, set the form target to a new method (allreportpdf
), and also add the submit button to trigger the save all report inside the form (maybe before the form close tag) :
<form action="<?php echo base_url() . "index.php/allowancereport/allreportpdf" ?>" method="POST" role="form"> <table class="table table-striped table-bordered table-hover"> ... ... ... </table> <button type="submit" class="btn btn-primary">Get All Report</button> </form>
Add a name (maybe eid
) on checkbox input, it will be used as post data on the new method (allreportpdf
).
<center> <input type="checkbox" class="checkitem" name="eid[]" value="<?php echo $row->idmakan; ?>"/> </center>
Back End
Since this page using different layout, you should make a new method on AllowanceReport
class, using the prevously set post name (eid
), you could use it within a foreach()
loop, and modify the pdf setting so each id is separated on each page :
public function allreportpdf(){ ob_start(); $this->load->library('pdf_surat'); $pdf = new PDF_SURAT('P','mm','A4',true,'UTF-8',false); foreach ($this->input->post('eid') as $id) { $allowance= $this->allowance_m->get_allowance_byid($id); $pdf->AddPage(); $pdf->setXY(12,40); $txt_pembuka = 'Allowance Report'; //$pdf->SetFontSize(16); $pdf->SetFont('times', 'B', 16, '', 'false'); $pdf->MultiCell(0, 5, $txt_pembuka, 0, 'C', 0, 2, '', '', true); $pdf->setXY(20,$pdf->getY()+7); $pdf->SetFont('times', '', 12, '', 'false'); $pdf->cell(35,5,"Nama"); $pdf->cell(0,5,": ".$allowance->employee_name); $pdf->setXY(20,$pdf->getY()+7); $pdf->cell(35,5,"Periode"); $periode = strtotime($allowance->periode); $formatperiode = date('F Y',$periode); $pdf->cell(0,5,": ".$formatperiode); $pdf->setXY(20,$pdf->getY()+7); $pdf->cell(35,5,"Uang Makan"); $pdf->cell(0,5,": Rp.".$allowance->allowance); } $pdf->output(); ob_end_flush(); }