created a report with export to PDF & Excel, testing for PDF and it is not showing correct no. of rows, in normal layout when it renders in browser page, it is showing correct data.
parameters: From Membership and To Membership
when select 1 and 50 it is showing 3 pages in normal report view but when exporting to PDF it shows 11 pages.
please check below code and help. ( please note, do not confuse with file names which i have copied from an existing app, when this will be finalize, i will modify names accordingly. )
Controllers/Customersummarypdf.php
<?php
namespace App\Controllers;
require APPPATH . "reports/CustomerSummary/CustomerSummary.php";
class Customersummarypdf extends BaseController
{
public function index()
{
$report = new \App\reports\CustomerSummary;
$report->run()->render();
}
public function DownloadPDF() {
$filename = 'membership_list_'.date("Y-d-m").'_'.date("h-i-s").'.pdf';
$report = new \App\reports\CustomerSummary;
$report->run()
->export('CustomerSummaryPdf')
->settings([
"useLocalTempFolder"=>true,
"autoDeleteLocalTempFile"=>true,
"autoDeleteTempFile" => true,
// "phantomjs"=>dirname(__FILE__, 3)."/vendor/koolreport/export/bin/phantomjs.exe",
"resourceWaiting"=>2000,
"serverLocalAddress" => "MyServer",
])
->pdf(array(
"format"=>"A4",
"orientation"=>"portrait",
"footer"=>array(
"height"=>"1cm",
"contents"=>"<p style='font-size: 12px; font-weight: 500; font-family: sans-serif;'>Page {pageNum} of {numPages}</p>"
),
"headerCallback" => "function(headerContent, pageNum, numPages){
if (pageNum == 1) return '';
return headerContent;
}",
))
->toBrowser($filename);
}
public function DownloadExcel() {
date_default_timezone_set("Asia/Karachi");
$filename = 'customer_summary_'.date("Y-d-m").'_'.date("h-i-s").'.xlsx';
$report = new \App\reports\CustomerSummary;
$report->run();
$report->exportToExcel()->toBrowser($filename);
}
}
App/reports/CustomerSummary.php
<?php
namespace App\reports;
// we have copied below file in root path of our app
require_once ROOTPATH . "load.koolreport.php";
use \koolreport\KoolReport;
use \koolreport\processes\Sort;
use \koolreport\processes\Map;
use \koolreport\processes\Limit;
use \koolreport\processes\Filter;
use \koolreport\cube\processes\Cube;
use \koolreport\pivot\processes\Pivot;
class CustomerSummary extends \koolreport\KoolReport
{
//use \koolreport\bootstrap4\Theme;
use \koolreport\amazing\Theme;
use \koolreport\codeigniter\Friendship;
use \koolreport\inputs\Bindable;
use \koolreport\inputs\POSTBinding;
use \koolreport\export\Exportable;
use \koolreport\excel\ExcelExportable;
use \koolreport\excel\BigSpreadsheetExportable;
protected function defaultParamValues()
{
return array(
"from_membership"=>1,
"to_membership"=>9999,
);
}
protected function bindParamsToInputs()
{
return array(
"from_membership"=>"from_membership",
"to_membership"=>"to_membership",
);
}
function setup()
{
->query("SELECT membership_date, member_full_name, membership_no, allotment_no, unit_number FROM memberships_list WHERE
membership_no between :from_membership and :to_membership
")
->params(array(
"from_membership"=>$this->params["from_membership"],
"to_membership"=>$this->params["to_membership"]
))
->pipe(Sort::process([
"membership_no"=>"asc"
]))
->pipe($this->dataStore("memship_no"));
$this->src("default")->query("
SELECT DISTINCT
membership_no,
membership_no
FROM
memberships
ORDER BY membership_no
")
->pipe($this->dataStore("membershipLov"));
}
}
App/reports/CustomerSummary.view.php
<?php
use \koolreport\widgets\koolphp\Table;
use \koolreport\inputs\DateRangePicker;
use \koolreport\inputs\Select2;
?>
<style>
.amazing {
width: 40%;
}
.select2 {
width: 100% !important;
}
.sidebar {
background: #ffffff !important;
}
</style>
<div class='report-content'>
<br />
<div class="text-center">
<h2>Membership</h2>
<a href="<?php echo base_url(); ?>/Customersummarypdf/DownloadPDF" class="btn btn-primary">Download PDF</a>
<a href="<?php echo base_url(); ?>/Customersummarypdf/DownloadExcel" class="btn btn-primary">Download Excel</a>
</div>
<br />
<form method="post">
<div class="row">
<div class="col-md-8 offset-md-2">
<div class="form-group" style="display: flex; flex-direction: column; flex-wrap: nowrap; align-content: center; justify-content: center; align-items: center; margin-bottom: 1rem;">
<div style="display: flex; width: 100%; flex-direction: row; flex-wrap: nowrap; justify-content: center; align-items: center;">
<strong style="margin-right: 15px;">From Membership</strong>
<?php
Select2::create(array(
"name"=>"from_membership",
"dataStore"=>$this->dataStore("membershipLov"),
"defaultOption"=>array(
),
"dataBind"=>array(
"text"=>"membership_no",
"value"=>"membership_no",
),
"attributes"=>array(
"class"=>"form-control",
)
));
?>
</div>
<div style="display: flex; width: 100%; flex-direction: row; flex-wrap: nowrap; justify-content: center; align-items: center;padding-top: 16px;">
<strong style="margin-right: 34px;">To Membership</strong>
<?php
Select2::create(array(
"name"=>"to_membership",
"dataStore"=>$this->dataStore("membershipLov"),
"defaultOption"=>array(
),
"dataBind"=>array(
"text"=>"membership_no",
"value"=>"membership_no",
),
"attributes"=>array(
"class"=>"form-control",
)
));
?>
</div>
<div class="form-group text-center" style="margin-left: 1rem;margin-bottom: 0rem;margin-top: 16px;">
<button class="btn btn-success"><i class="glyphicon glyphicon-refresh"></i> Load</button>
</div>
</div>
</div>
</form>
</div>
<script>
function Backonclick() {
window.location.href = '<?php echo base_url(); ?>/customersummary/back';
}
</script>
<?php
if($this->dataStore("memship_no")->countData()>0)
{
Table::create(array(
"dataStore"=>$this->dataStore("memship_no"),
"cssClass"=>array(
"table"=>"table table-bordered"
),
"showFooter"=>true,
"options"=>array(
"paging"=>true,
),
"columns"=>array(
"membership_date"=>array(
"cssStyle"=>"text-align:center",
"label"=>"Membership Date",
),
"member_full_name"=>array(
"label"=>"Member Name",
// "footerText"=>"<b>Total</b>"
),
"membership_no"=>array(
"cssStyle"=>"text-align:center",
"label"=>"Membership #",
// "type"=>"number",
// "footer"=>"sum",
// "footerText"=>"<b>@value</b>"
),
"allotment_no"=>array(
"cssStyle"=>"text-align:center",
"label"=>"Allotment #",
// "footer"=>"sum",
// "footerText"=>"<b>@value</b>"
),
"unit_number"=>array(
"cssStyle"=>"text-align:center",
"label"=>"Unit #",
// "type"=>"number",
// "footer"=>"sum",
// "footerText"=>"<b>@value</b>"
),
),
"paging"=>array(
"pageSize"=>10,
),
));
}
else
{
?>
<div class="alert alert-warning">
<i class="glyphicon glyphicon-info-sign"></i> Sorry, we found no orders.
</div>
<?php
}
?>
</div>
App/reports/CustomerSummaryPdf.view.php
<?php
use \koolreport\widgets\koolphp\Table;
?>
<html>
<head>
<style>
.table {
font-family: Arial, Helvetica, sans-serif;
border-collapse: collapse;
width: 100%;
}
.table td, .table th {
border: 1px solid #ddd;
padding: 8px;
}
.table tr:nth-child(even){
background-color: #f2f2f2;
}
.table tr:hover {
background-color: #ddd;
}
.table th {
padding-top: 12px;
padding-bottom: 12px;
text-align: left;
background: #1e3d73;
color: white;
}
tr td:last-child {
width: 14%;
}
th {
font-size: 10px;
font-weight: 600;
font-family: sans-serif;
}
td {
font-size: 10px;
font-weight: 500;
font-family: sans-serif;
}
</style>
</head>
<body style="margin:0.5in 1in 0.5in 1in">
<div class="text-center">
<center><h1 style="font-size: 20px; font-weight: 600; font-family: sans-serif;">Memberships Report</h1></center>
</div>
<?php
Table::create(array(
"dataStore"=>$this->dataStore("memship_no"),
"cssClass"=>array(
"table"=>"table table-hover table-bordered"
),
"showFooter"=>true,
"options"=>array(
"paging"=>true,
),
"columns"=>array(
"membership_date"=>array(
"cssStyle"=>"text-align:center",
"label"=>"Membership Date",
),
"member_full_name"=>array(
"label"=>"Member Name"
),
"membership_no"=>array(
"cssStyle"=>"text-align:center",
"label"=>"Membership #"
),
"allotment_no"=>array(
"cssStyle"=>"text-align:center",
"label"=>"Allotment #"
),
"unit_number"=>array(
"cssStyle"=>"text-align:center",
"label"=>"Unit #"
),
),
));
?>
</body>
</html>
regards