Search code examples
pdfyiipdf-generationyii-extensions

yii pdfable outputting unwanted text


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>

enter image description here


Solution

  • 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'; ?>