EIOS/inc/iup_pdf.php

302 lines
14 KiB
PHP
Raw Permalink Normal View History

2023-12-28 15:39:22 +03:00
<?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();
*/
?>