302 lines
14 KiB
PHP
302 lines
14 KiB
PHP
|
<?php
|
|||
|
require_once( "inc/fpdf/fpdf.php" );
|
|||
|
$Ctable['HeaderTopTextColour'] = array( 255, 255, 255 );
|
|||
|
$Ctable['HeaderTopFillColour'] = array( 125, 152, 179 );
|
|||
|
$Ctable['HeaderTopProductTextColour'] = array( 0, 0, 0 );
|
|||
|
$Ctable['HeaderTopProductFillColour'] = array( 143, 173, 204 );
|
|||
|
$Ctable['HeaderLeftTextColour'] = array( 99, 42, 57 );
|
|||
|
$Ctable['HeaderLeftFillColour'] = array( 184, 207, 229 );
|
|||
|
$Ctable['BorderColour'] = array( 50, 50, 50 );
|
|||
|
$Ctable['RowFillColour'] = array( 213, 170, 170 );
|
|||
|
$data = array(
|
|||
|
array( iconv('UTF-8','windows-1251','Текст большой'), 1, 9490, 11730 ),
|
|||
|
array( 19310, 21140, iconv('UTF-8','windows-1251','Текст приветств енныйТекст приветстве нныйТекст приветств енный'), 22590 ),
|
|||
|
array( 25110, 26260, 25210, iconv('UTF-8','windows-1251','asdfdsfg длорапщфнр87289 дыфл акф') ),
|
|||
|
array( 27650, 24550, 30040, 31980 ),
|
|||
|
);
|
|||
|
|
|||
|
class PDF extends FPDF{
|
|||
|
function SetFonts(){
|
|||
|
$this->AddFont('ArialMT','','arial.php');
|
|||
|
$this->AddFont('Arial-BoldMT','B','arial_bold.php');
|
|||
|
$this->AddFont('ArialMT','I','arial.php');
|
|||
|
$this->AddFont('ComicSansMS','','comic.php');
|
|||
|
$this->AddFont('ComicSansMS','B','comic.php');
|
|||
|
$this->AddFont('ComicSansMS','I','comic.php');
|
|||
|
$this->AddFont('Georgia','','georgia.php');
|
|||
|
$this->AddFont('Georgia','B','georgia.php');
|
|||
|
$this->AddFont('Georgia','I','georgia.php');
|
|||
|
$this->AddFont('Tahoma','','tahoma.php');
|
|||
|
$this->AddFont('Tahoma-Bold','B','tahoma_bold.php');
|
|||
|
$this->AddFont('Tahoma','I','tahoma.php');
|
|||
|
$this->AddFont('TimesNewRomanPSMT','','times.php');
|
|||
|
$this->AddFont('TimesNewRomanPSMT','B','times.php');
|
|||
|
$this->AddFont('TimesNewRomanPSMT','I','times.php');
|
|||
|
$this->AddFont('Verdana','','verdana.php');
|
|||
|
$this->AddFont('Verdana','B','verdana.php');
|
|||
|
$this->AddFont('Verdana','I','verdana.php');
|
|||
|
$this->SetFont('TimesNewRomanPSMT','',14);
|
|||
|
}
|
|||
|
function Header(){
|
|||
|
// $logoXPos, $logoYPos, $logoWidth
|
|||
|
$this->Image('inc/fpdf/image/logo_1.png',10,6,10);
|
|||
|
//$this->SetFont('TimesNewRomanPSMT','',15);
|
|||
|
/*
|
|||
|
Cell(), который, помимо всего прочего, позволяет легко центрировать текст.
|
|||
|
Cell() принимает следующие аргументы (все являются опциональными):
|
|||
|
1. Высота и
|
|||
|
2. ширина ячейки. По умолчанию ширина растягивается до правого поля, а высота устанавливается в 0.
|
|||
|
3. Строка текста для вывода. По умолчанию ''.
|
|||
|
4. Указание для отображения рамки вокруг ячейки. Это может быть либо число (0=нет рамки, 1=рисуем рамку), или строка с одним или несколькими параметрами из следующего списка: 'L' (слева), 'T' (сверху), 'R' (справа), и 'B' (внизу). Значение по умолчанию: 0.
|
|||
|
5. Куда помещать текущую позицию после вывода ячейки. Значение может быть 0 (справа от ячейки), 1 (начало следующей строки), или 2 (ниже). Значение по умолчанию: 0.
|
|||
|
6. Выравнивание текста. Возможные значения: 'L' (выравнивание по левому краю), 'C' (выравнивание по центру), или 'R' (выравнивание по правому краю). Значение по умолчанию: 'L'.
|
|||
|
7. Нужно ли заливать фон ячейки цветом. true = заливаем цветом, false = оставляем фон прозрачным. Значение по умолчанию: false.
|
|||
|
URL ссылки. Если задан, то ячейка с текстом становится рабочей ссылкой на другой ресурс.
|
|||
|
*/
|
|||
|
$this->Cell(80);
|
|||
|
$this->SetFont('TimesNewRomanPSMT','',10);
|
|||
|
$str = iconv('UTF-8', 'windows-1251', 'Федеральное государственное бюджетное образовательное учреждение высшего образования');
|
|||
|
$this->Cell(30,0,$str,0,1,'C');
|
|||
|
$this->SetFont('TimesNewRomanPSMT','',14);
|
|||
|
$this->Ln(8);
|
|||
|
$this->Cell(80);
|
|||
|
$str = iconv('UTF-8', 'windows-1251', 'Майкопский государственный технологический университет');
|
|||
|
$this->Cell(30,0,$str,0,1,'C');
|
|||
|
$this->Ln(20);
|
|||
|
}
|
|||
|
function Footer(){// Page footer
|
|||
|
// Position at 1.5 cm from bottom
|
|||
|
$this->SetY(-15);
|
|||
|
$this->SetFont('TimesNewRomanPSMT','',8);
|
|||
|
$str = iconv('UTF-8', 'windows-1251', 'Страница');
|
|||
|
$this->Cell(0,10,$str.' '.$this->PageNo().'/{nb}',0,0,'C');
|
|||
|
}
|
|||
|
function print_table($data,$Ctable){
|
|||
|
$this->SetFont('TimesNewRomanPSMT','',10);
|
|||
|
$this->SetDrawColor( $Ctable['BorderColour'][0], $Ctable['BorderColour'][1], $Ctable['BorderColour'][2] );
|
|||
|
//$this->Ln( 15 );
|
|||
|
// Ячейка "PRODUCT"
|
|||
|
$this->SetTextColor( $Ctable['HeaderTopProductTextColour'][0], $Ctable['HeaderTopProductTextColour'][1], $Ctable['HeaderTopProductTextColour'][2] );
|
|||
|
$this->SetFillColor( $Ctable['HeaderTopProductFillColour'][0], $Ctable['HeaderTopProductFillColour'][1], $Ctable['HeaderTopProductFillColour'][2] );
|
|||
|
//$this->Cell( 46, 12, " PRODUCT", 1, 0, 'L', true );
|
|||
|
$heightrow=8;
|
|||
|
foreach ( $data[0] as $k => $v ) {
|
|||
|
$this->Cell( 36, $heightrow, $v, 1, 0, 'C', true );
|
|||
|
}
|
|||
|
$this->Ln( $heightrow );
|
|||
|
// Создаем строки с данными
|
|||
|
$fill = false; $row = 0;
|
|||
|
//$this->SetTextColor( $Ctable['HeaderLeftTextColour'][0], $Ctable['HeaderLeftTextColour'][1], $Ctable['HeaderLeftTextColour'][2] );
|
|||
|
$this->SetFillColor( $Ctable['HeaderLeftFillColour'][0], $Ctable['HeaderLeftFillColour'][1], $Ctable['HeaderLeftFillColour'][2] );
|
|||
|
|
|||
|
foreach ( $data as $k => $v )if($k) {
|
|||
|
// Создаем левую ячейку с заголовком строки
|
|||
|
foreach ( $v as $k1 => $v1 ){
|
|||
|
$sw = $this->GetStringWidth($v1);
|
|||
|
$this->Cell( ($sw*4.3), $heightrow,$v1, 1, 0, 'L', $fill );
|
|||
|
}
|
|||
|
$this->Ln( $heightrow );
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Instanciation of inherited class
|
|||
|
$pdf = new PDF();
|
|||
|
$pdf->SetFonts();
|
|||
|
$pdf->AliasNbPages();
|
|||
|
$pdf->AddPage();
|
|||
|
$pdf->print_table($data,$Ctable);
|
|||
|
|
|||
|
$str = iconv('UTF-8','windows-1251', 'Номер: ');
|
|||
|
for($i=1;$i<=40;$i++)
|
|||
|
$pdf->Cell(0,10,$str.$i,0,1);
|
|||
|
|
|||
|
$pdf->Output();
|
|||
|
exit();
|
|||
|
|
|||
|
/*{// Начало конфигурации
|
|||
|
$textColour = array( 0, 0, 0 );
|
|||
|
$headerColour = array( 100, 100, 100 );
|
|||
|
$tableHeaderTopTextColour = array( 255, 255, 255 );
|
|||
|
$tableHeaderTopFillColour = array( 125, 152, 179 );
|
|||
|
$tableHeaderTopProductTextColour = array( 0, 0, 0 );
|
|||
|
$tableHeaderTopProductFillColour = array( 143, 173, 204 );
|
|||
|
$tableHeaderLeftTextColour = array( 99, 42, 57 );
|
|||
|
$tableHeaderLeftFillColour = array( 184, 207, 229 );
|
|||
|
$tableBorderColour = array( 50, 50, 50 );
|
|||
|
$tableRowFillColour = array( 213, 170, 170 );
|
|||
|
$reportName = "ОТЧЕТ 1 УМУ";
|
|||
|
$reportNameYPos = 160;
|
|||
|
$logoFile = "inc/fpdf/image/logo_1.png";
|
|||
|
$logoXPos = 50;
|
|||
|
$logoYPos = 108;
|
|||
|
$logoWidth = 110;
|
|||
|
$columnLabels = array( "Q1", "Q2", "Q3", "Q4" );
|
|||
|
$rowLabels = array( "SupaWidget", "WonderWidget", "MegaWidget", "HyperWidget" );
|
|||
|
$chartXPos = 20;
|
|||
|
$chartYPos = 250;
|
|||
|
$chartWidth = 160;
|
|||
|
$chartHeight = 80;
|
|||
|
$chartXLabel = "Product";
|
|||
|
$chartYLabel = "2009 Sales";
|
|||
|
$chartYStep = 20000;
|
|||
|
|
|||
|
$chartColours = array(
|
|||
|
array( 255, 100, 100 ),
|
|||
|
array( 100, 255, 100 ),
|
|||
|
array( 100, 100, 255 ),
|
|||
|
array( 255, 255, 100 ),
|
|||
|
);
|
|||
|
|
|||
|
$data = array(
|
|||
|
array( 9940, 10100, 9490, 11730 ),
|
|||
|
array( 19310, 21140, 20560, 22590 ),
|
|||
|
array( 25110, 26260, 25210, 28370 ),
|
|||
|
array( 27650, 24550, 30040, 31980 ),
|
|||
|
);
|
|||
|
|
|||
|
// Конец конфигурации
|
|||
|
}
|
|||
|
|
|||
|
$pdf = new FPDF( 'P', 'mm', 'A4' );//L альбомная
|
|||
|
$pdf->SetTextColor( $textColour[0], $textColour[1], $textColour[2] );
|
|||
|
$pdf->AddPage();
|
|||
|
$pdf->SetFont( 'Arial', 'B', 24 );
|
|||
|
if(file_exists($logoFile)){
|
|||
|
$pdf->Image( $logoFile, $logoXPos, $logoYPos, $logoWidth );
|
|||
|
}else{
|
|||
|
$pdf->Ln( $reportNameYPos-60 );
|
|||
|
$pdf->Cell( 0, 15, 'no file: '.$logoFile, 0, 0, 'C' );
|
|||
|
}
|
|||
|
$pdf->Ln( $reportNameYPos );//Ln(), добавляет перевод строки на указанное расстояние
|
|||
|
//'L' выравнивание по левому краю)'C'центру,'R' по правому краю
|
|||
|
$pdf->Cell( 0, 15, $reportName, 0, 0, 'C' );
|
|||
|
|
|||
|
//Создаем колонтитул страницы и вводный текст
|
|||
|
$pdf->AddPage();
|
|||
|
$pdf->SetTextColor( $headerColour[0], $headerColour[1], $headerColour[2] );
|
|||
|
$pdf->SetFont( 'Arial', '', 17 );
|
|||
|
$pdf->Cell( 0, 15, $reportName, 0, 0, 'C' );
|
|||
|
|
|||
|
$pdf->SetTextColor( $textColour[0], $textColour[1], $textColour[2] );
|
|||
|
$pdf->SetFont( 'Arial', '', 20 );
|
|||
|
$pdf->Write( 19, "Текст 1 TEXT 1" );
|
|||
|
|
|||
|
$pdf->Ln( 16 );
|
|||
|
$pdf->SetFont( 'Arial', '', 12 );
|
|||
|
$pdf->Write( 6, "Необходимый текст Despite the economic downturn, WidgetCo had a strong year. Sales of the HyperWidget in particular exceeded expectations. The fourth quarter was generally the best performing; this was most likely due to our increased ad spend in Q3." );
|
|||
|
$pdf->Ln( 12 );
|
|||
|
$pdf->Write( 6, "Еще текст 2010 is expected to see increased sales growth as we expand into other countries." );
|
|||
|
|
|||
|
$pdf->SetDrawColor( $tableBorderColour[0], $tableBorderColour[1], $tableBorderColour[2] );
|
|||
|
$pdf->Ln( 15 );
|
|||
|
// Создаем строку заголовков таблицы
|
|||
|
$pdf->SetFont( 'Arial', 'B', 15 );
|
|||
|
|
|||
|
// Ячейка "PRODUCT"
|
|||
|
$pdf->SetTextColor( $tableHeaderTopProductTextColour[0], $tableHeaderTopProductTextColour[1], $tableHeaderTopProductText
|
|||
|
Colour[2] );
|
|||
|
$pdf->SetFillColor( $tableHeaderTopProductFillColour[0], $tableHeaderTopProductFillColour[1], $tableHeaderTopProductFill
|
|||
|
Colour[2] );
|
|||
|
$pdf->Cell( 46, 12, " PRODUCT", 1, 0, 'L', true );
|
|||
|
|
|||
|
// Остальные ячейки заголовков
|
|||
|
$pdf->SetTextColor( $tableHeaderTopTextColour[0], $tableHeaderTopTextColour[1], $tableHeaderTopTextColour[2] );
|
|||
|
$pdf->SetFillColor( $tableHeaderTopFillColour[0], $tableHeaderTopFillColour[1], $tableHeaderTopFillColour[2] );
|
|||
|
|
|||
|
for ( $i=0; $i<count($columnLabels); $i++ ) {
|
|||
|
$pdf->Cell( 36, 12, $columnLabels[$i], 1, 0, 'C', true );
|
|||
|
}
|
|||
|
|
|||
|
$pdf->Ln( 12 );
|
|||
|
// Создаем строки с данными
|
|||
|
$fill = false;
|
|||
|
$row = 0;
|
|||
|
foreach ( $data as $dataRow ) {
|
|||
|
// Создаем левую ячейку с заголовком строки
|
|||
|
$pdf->SetFont( 'Arial', 'B', 15 );
|
|||
|
$pdf->SetTextColor( $tableHeaderLeftTextColour[0], $tableHeaderLeftTextColour[1], $tableHeaderLeftTextColour[2] );
|
|||
|
$pdf->SetFillColor( $tableHeaderLeftFillColour[0], $tableHeaderLeftFillColour[1], $tableHeaderLeftFillColour[2] );
|
|||
|
$pdf->Cell( 46, 12, " " . $rowLabels[$row], 1, 0, 'L', $fill );
|
|||
|
|
|||
|
// Создаем ячейки с данными
|
|||
|
$pdf->SetTextColor( $textColour[0], $textColour[1], $textColour[2] );
|
|||
|
$pdf->SetFillColor( $tableRowFillColour[0], $tableRowFillColour[1], $tableRowFillColour[2] );
|
|||
|
$pdf->SetFont( 'Arial', '', 15 );
|
|||
|
|
|||
|
for ( $i=0; $i<count($columnLabels); $i++ ) {
|
|||
|
$pdf->Cell( 36, 12, ( '$' . number_format( $dataRow[$i] ) ), 1, 0, 'C', $fill );
|
|||
|
}
|
|||
|
|
|||
|
$row++;
|
|||
|
$fill = !$fill;
|
|||
|
$pdf->Ln( 12 );
|
|||
|
}
|
|||
|
//Создаем график
|
|||
|
// Вычисляем масштаб по оси X
|
|||
|
$xScale = count($rowLabels) / ( $chartWidth - 40 );
|
|||
|
// Вычисляем масштаб по оси Y
|
|||
|
|
|||
|
$maxTotal = 0;
|
|||
|
|
|||
|
foreach ( $data as $dataRow ) {
|
|||
|
$totalSales = 0;
|
|||
|
foreach ( $dataRow as $dataCell ) $totalSales += $dataCell;
|
|||
|
$maxTotal = ( $totalSales > $maxTotal ) ? $totalSales : $maxTotal;
|
|||
|
}
|
|||
|
|
|||
|
$yScale = $maxTotal / $chartHeight;
|
|||
|
// Вычисляем ширину столбцов
|
|||
|
$barWidth = ( 1 / $xScale ) / 1.5;
|
|||
|
// Добавляем оси:
|
|||
|
|
|||
|
$pdf->SetFont( 'Arial', '', 10 );
|
|||
|
|
|||
|
// Ось X
|
|||
|
$pdf->Line( $chartXPos + 30, $chartYPos, $chartXPos + $chartWidth, $chartYPos );
|
|||
|
|
|||
|
for ( $i=0; $i < count( $rowLabels ); $i++ ) {
|
|||
|
$pdf->SetXY( $chartXPos + 40 + $i / $xScale, $chartYPos );
|
|||
|
$pdf->Cell( $barWidth, 10, $rowLabels[$i], 0, 0, 'C' );
|
|||
|
}
|
|||
|
// Ось Y
|
|||
|
$pdf->Line( $chartXPos + 30, $chartYPos, $chartXPos + 30, $chartYPos - $chartHeight - 8 );
|
|||
|
|
|||
|
for ( $i=0; $i <= $maxTotal; $i += $chartYStep ) {
|
|||
|
$pdf->SetXY( $chartXPos + 7, $chartYPos - 5 - $i / $yScale );
|
|||
|
$pdf->Cell( 20, 10, '$' . number_format( $i ), 0, 0, 'R' );
|
|||
|
$pdf->Line( $chartXPos + 28, $chartYPos - $i / $yScale, $chartXPos + 30, $chartYPos - $i / $yScale );
|
|||
|
}
|
|||
|
// Добавляем метки осей
|
|||
|
$pdf->SetFont( 'Arial', 'B', 12 );
|
|||
|
$pdf->SetXY( $chartWidth / 2 + 20, $chartYPos + 8 );
|
|||
|
$pdf->Cell( 30, 10, $chartXLabel, 0, 0, 'C' );
|
|||
|
$pdf->SetXY( $chartXPos + 7, $chartYPos - $chartHeight - 12 );
|
|||
|
$pdf->Cell( 20, 10, $chartYLabel, 0, 0, 'R' );
|
|||
|
// Создаем столбецы
|
|||
|
$xPos = $chartXPos + 40;
|
|||
|
$bar = 0;
|
|||
|
foreach ( $data as $dataRow ) {
|
|||
|
|
|||
|
// Вычисляем суммарное значение по строке данных для продукта
|
|||
|
$totalSales = 0;
|
|||
|
foreach ( $dataRow as $dataCell ) $totalSales += $dataCell;
|
|||
|
|
|||
|
// Создаем столбец
|
|||
|
$colourIndex = $bar % count( $chartColours );
|
|||
|
$pdf->SetFillColor( $chartColours[$colourIndex][0], $chartColours[$colourIndex][1], $chartColours[$colourIndex][2] );
|
|||
|
$pdf->Rect( $xPos, $chartYPos - ( $totalSales / $yScale ), $barWidth, $totalSales / $yScale, 'DF' );
|
|||
|
$xPos += ( 1 / $xScale );
|
|||
|
$bar++;
|
|||
|
}
|
|||
|
//Выводим PDF
|
|||
|
//I : Выводить PDF на экран, если такая функция поддерживается браузером, иначе загружать.
|
|||
|
//D : Загружать PDF.
|
|||
|
//F : Сохранять файл в папке на сервере.
|
|||
|
//S : Возвращать данные PDF как строку.
|
|||
|
|
|||
|
$pdf->Output( "report.pdf", "I" );
|
|||
|
exit();
|
|||
|
*/
|
|||
|
?>
|