I have managed to create pdf file using pdfable in Yii. The problem with the pdf document is it is including the main menu as list items which it should not. Where is this coming from and how can I stop it?
controller
$asaarea = Yii::app()->db->createCommand("SELECT distinct(asaarea) FROM `hdb`.`lookupcountry`")->queryAll();
$results = array();
foreach ($asaarea as $key => $value) {
$results[$value['asaarea']] = Yii::app()->db->createCommand("SELECT
StartDATE,
PROJECT,
PROJCODE,
PROJID,
ActualEndDate,
OFFICE,
PERCENT,
PERCENTPlanned,
KM,
KMPlanned,
COUNTRY,
AREA,
PROJINFO
FROM view_webprojectreport where asaarea = '" . $value['asaarea'] . "'")->queryAll();
}
$pdf = $this->createPdf();
$pdf->setOptions(array('orientation'=>'Landscape',
'margin-top' => 5,
'margin-right' => 10,
'margin-bottom' => 5,
'margin-left' => 10,
)
);
$pdf->renderPage('print',array('results'=>$results));
$pdf->send('ProjectReport_'.date('M-Y').'.pdf');
print.php
<head>
<style type='text/css'>
@media print{thead{display:table-header-group; margin-bottom:2px;}}
@page{margin-top:1cm;margin-left:1cm;margin-right:1cm;margin-bottom:1.5cm;}}
.odd {
background: none repeat scroll 0 0 #E5F1F4;
}
.even {
background: none repeat scroll 0 0 #F8F8F8;
}
table tbody tr:hover{
background: none repeat scroll 0 0 lightgreen;
}
table tbody tr{
font-size:10pt;
}
body
{
margin: 0mm 0mm 0mm 0mm;
}
.grey{
background: lightgrey;
}
.center{
margin: 0 auto;
text-align: center;
}
.size{
font-size:15px;
}
table{
padding-botton:30px;
}
thead{
font-size:11px;
font-weight: normal;
}
</style>
</head>
<!-- <body onload="window.print();window.close();">-->
<body>
<h1 class="grey center">Project Report</h1>
<table>
<?php
$count = 0;
$class= null;
foreach($results as $key=>$data) {
?>
<tr class="grey size">
<th colspan=12><?=$key ?></th>
</tr>
<thead>
<tr>
<th>Start Date</th>
<th>Name</th>
<th>Code</th>
<th>Actual End Date</th>
<th>Office</th>
<th>%</th>
<th>% Planned</th>
<th>KM</th>
<th>KM Planned</th>
<th>Country</th>
<th width="150">AREA</th>
<th>PROJ INFO</th>
</tr>
</thead>
<tbody>
<?php foreach($data as $column=>$q) { ?>
<?php
$class = ($count % 2 === 0) ? 'odd' : 'even';
$this->renderPartial('_report',array('data'=>$q,'class'=>$class));
$count++;
}
?>
</tbody>
<?php }
?>
</table>
</body>
You didn't post this, so it's only a guess, but it's probably the menu from your layout file.
Pdfable renders each page like a regular Yii page - it's not like renderPartial()
. So maybe you should create a layout specific for PDFs and configure this as layout file. For example you could create views/layouts/pdf.php
:
<?php
// In the simplest case you only output $content here. But
// you could also add a nice header to all your PDFs.
echo $content;
In your print.php
you can then add this line on top.
<?php $this->layout = 'pdf'; ?>