1
iprintformpdf.php in trunk/web/include/doc/printforms – MultiMag

source: trunk/web/include/doc/printforms/iprintformpdf.php @ 980

Last change on this file since 980 was 980, checked in by blacklight, 9 months ago
  • Вынос опции печатной формы товарного чека *Работа осуществляется без ККТ* в конфигурационный файл
File size: 8.8 KB
Line 
1<?php
2//      MultiMag v0.2 - Complex sales system
3//
4//      Copyright (C) 2005-2018, BlackLight, TND Team, http://tndproject.org
5//
6//      This program is free software: you can redistribute it and/or modify
7//      it under the terms of the GNU Affero General Public License as
8//      published by the Free Software Foundation, either version 3 of the
9//      License, or (at your option) any later version.
10//
11//      This program is distributed in the hope that it will be useful,
12//      but WITHOUT ANY WARRANTY; without even the implied warranty of
13//      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14//      GNU Affero General Public License for more details.
15//
16//      You should have received a copy of the GNU Affero General Public License
17//      along with this program.  If not, see <http://www.gnu.org/licenses/>.
18//
19
20namespace doc\printforms; 
21
22/// Абстрактный класс печатной формы
23abstract class iPrintFormPdf {
24    protected $doc;   //< Ссылка на документ с данными для печати
25    protected $pdf;   //< Объект FPDF
26   
27    // Параметы форм
28    protected $line_normal_w = 0.25;   // Стандартная толщина линии
29    protected $line_bold_w = 0.6;   // Толщина жирной линии
30    protected $line_thin_w = 0.18;   // Толщина тонкой линии
31   
32    public $mime = "application/pdf";
33   
34    public function __construct() {
35       
36    }
37
38        /// Установить ссылку на распечатываемый документ
39    public function setDocument($doc) {
40        $this->doc = $doc;
41    }
42   
43    public function getMimeType() {
44        return $this->mime;
45    }
46             
47    /// Инициализация модуля вывода данных
48    public function initForm() {
49        require('fpdf/fpdf_mc.php');
50        $this->pdf = new \PDF_MC_Table('P');
51        $this->pdf->Open();
52        $this->pdf->SetAutoPageBreak(1, 5);
53        $this->pdf->AddFont('Arial', '', 'arial.php');
54        $this->pdf->SetFont('Arial', '', 10);
55        $this->pdf->tMargin = 5;
56        $this->pdf->SetFillColor(255);
57    }
58   
59    /// Добавить к документу футер с технической информацией
60    protected function addTechFooter() {
61        $x = $this->pdf->getX();
62        $y = $this->pdf->getY();
63        $this->pdf->SetX($this->pdf->rMargin - 50);
64        $this->pdf->SetY($this->pdf->h - $this->pdf->bMargin - $this->pdf->tMargin);
65        $old_font_size = $this->pdf->FontSizePt;
66        $this->pdf->SetFontSize(2.5);
67        $str = 'Подготовлено в multimag v:'.MULTIMAG_VERSION.' ('.get_class($this).'), док.'.$this->doc->getId();
68        $this->pdf->CellIconv(0, 2, $str, 0, 1, 'R');
69        $this->pdf->SetFontSize($old_font_size);
70        $this->pdf->SetX($x);
71        $this->pdf->SetY($y);
72    }
73   
74    /// Добавить стандартный заголовок формы
75    protected function addHeader($text) {
76        $this->pdf->SetFontSize(18);
77        $this->pdf->MultiCellIconv(0, 8, $text, 0, 'C');
78    }
79   
80    /// Добавить уменьшенный заголовок
81    protected function addMiniHeader($text) {
82        $this->pdf->SetFontSize(16);
83        $this->pdf->MultiCellIconv(0, 8, $text, 0, 'C');
84    }
85   
86    /// Добавить стандартную информационную строку
87    protected function addInfoLine($text, $font_size = 10) {
88        $this->pdf->SetFontSize($font_size);
89        $this->pdf->MultiCellIconv(0, 5, $text, 0, 'L');
90    }
91   
92    /// Добавить стандартную строку подписи
93    protected function addSignLine($text) {
94        $this->pdf->SetFontSize(10);
95        $this->pdf->CellIconv(0, 7, $text, 0, 1, 'L');
96    }
97   
98    /// Добавить стандартный заголовок таблицы
99    protected function addTableHeader($th_widths, $th_texts, $tbody_aligns = null, $font_size = 10) {
100        $this->pdf->SetFontSize($font_size);
101        $this->pdf->SetLineWidth($this->line_bold_w);
102        foreach ($th_widths as $id => $w) {
103            $this->pdf->CellIconv($w, 6, $th_texts[$id], 1, 0, 'C', 0);
104        }       
105        $this->pdf->Ln();
106        $this->pdf->SetWidths($th_widths);
107        $this->pdf->SetHeight(4);
108        $this->pdf->SetLineWidth($this->line_normal_w);
109        if($tbody_aligns) {
110            $this->pdf->SetAligns($tbody_aligns);
111        }
112        $this->pdf->SetFontSize(8);
113    }
114   
115    /// Добавить изображение шапки
116    protected function addHeadBanner($firm_id) {
117        global $CONFIG;
118        if (@$CONFIG['site']['doc_header']) {
119            $header_img = str_replace('{FN}', $firm_id, $CONFIG['site']['doc_header']);
120            $size = getimagesize($header_img);
121            if (!$size) {
122                throw new \Exception("Не удалось открыть файл изображения");
123            }
124            if ($size[2] != IMAGETYPE_JPEG) {
125                throw new Exception("Файл изображения не в jpeg формате");
126            }
127            if ($size[0] < 800) {
128                throw new \Exception("Разрешение изображения слишком мало! Допустимя ширина - не менее 800px");
129            }
130            $width = 190;
131            $offset_y = $size[1] / $size[0] * $width + 14;
132            $this->pdf->Image($header_img, 8, 10, $width);
133            $this->pdf->Sety($offset_y);
134        }
135    }
136   
137    /// Добавить информацию о сайте
138    protected function addSiteBanner() {
139        global $CONFIG;
140        $pref = \pref::getInstance();
141        $this->pdf->SetFontSize(12);
142        $str = "Система интернет-заказов для постоянных клиентов доступна на нашем сайте";
143        $this->pdf->CellIconv(0, 5, $str, 0, 1, 'C', 0);
144
145        $this->pdf->SetTextColor(0, 0, 192);
146        $this->pdf->SetFont('', 'UI', 18);
147        $this->pdf->Cell(0, 7, 'http://' . $pref->site_name, 0, 1, 'C', 0, 'http://' . $pref->site_name);
148
149        $this->pdf->SetTextColor(0, 0, 0);
150        $this->pdf->SetFont('', '', 12);
151        $str = "При оформлении заказа через сайт предоставляются специальные цены!";
152        $this->pdf->CellIconv(0, 8, $str, 0, 1, 'C', 0);
153    }
154   
155    /// Добавить информацию о сторуднике в нижний правый угол страницы
156    protected function addWorkerInfo($doc_data) {
157        global $db;
158        $footer_info = array();
159        $res = $db->query("SELECT `worker_real_name`, `worker_post_name`, `worker_phone`, `worker_email`, `worker_jid`"
160            . " FROM `users_worker_info`"
161            . " WHERE `user_id`='{$doc_data['user']}'");
162        if ($res->num_rows) {
163            $worker_info = $res->fetch_assoc();
164            if ($worker_info['worker_post_name']) {
165                $footer_info[] = $worker_info['worker_post_name'] . ' ' . $worker_info['worker_real_name'];
166            } else {
167                $footer_info[] = "Сотрудник " . $worker_info['worker_real_name'];
168            }
169            if ($worker_info['worker_phone']) {
170                $footer_info[] = "Контактный телефон: " . $worker_info['worker_phone'];
171            }
172            if ($worker_info['worker_email']) {
173                $footer_info[] = "email адрес: " . $worker_info['worker_email'];
174            }
175            if ($worker_info['worker_jid']) {
176                $footer_info[] = "Идентификатор jabber/xmpp: " . $worker_info['worker_jid'];
177            }
178        }
179        else {       
180            $footer_info[] = "Login автора: " . $_SESSION['name'];
181        } 
182        $line_width = 4; 
183        $this->pdf->SetAutoPageBreak(0, 10);
184        $this->pdf->SetFontSize(10);
185        $this->pdf->SetY($this->pdf->h - 5 - count($footer_info)*$line_width);
186        $this->pdf->Ln(1);
187       
188        foreach($footer_info as $text) {           
189            $this->pdf->CellIconv(0, 4, $text, 0, 1, 'R', 0);
190        }
191    }
192
193    /// Вывод данных
194    /// @param $to_str Если истина - вернёт буфер с данными. Иначе - вывод в файл.
195    public function outData($to_str=false) {
196        $fname = get_class($this);
197        $matches = null;
198        if (preg_match('@\\\\([\w]+)$@', $fname, $matches)) {
199            $fname = $matches[1];
200        }
201       
202        if ($to_str) {
203            return $this->pdf->Output($fname.'.pdf', 'S');
204        }
205        else {
206            $this->pdf->Output($fname.'.pdf', 'I');
207        }
208    }
209   
210    /// Сформировать данные печатной формы
211    abstract public function make();
212   
213    /// Возвращает имя документа
214    abstract public function getName();
215}
Note: See TracBrowser for help on using the repository browser.