EIOS/inc/iup_pdf.php

302 lines
14 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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