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();
|
||
*/
|
||
?>
|