1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
template_pdf.php
См. документацию.
1<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();?><?
2
4Loc::loadMessages(__FILE__);
5
6$arPaySysAction["ENCODING"] = "";
7
9 die();
10
11if ($_REQUEST['BLANK'] == 'Y')
12 $blank = true;
13
15$pdf = new CSalePdf('P', 'pt', 'A4');
16
17if ($params['BILL_BACKGROUND'])
18{
19 $pdf->SetBackground(
20 $params['BILL_BACKGROUND'],
21 $params['BILL_BACKGROUND_STYLE']
22 );
23}
24
25$pageWidth = $pdf->GetPageWidth();
26$pageHeight = $pdf->GetPageHeight();
27
28$pdf->AddFont('Font', '', 'pt_sans-regular.ttf', true);
29$pdf->AddFont('Font', 'B', 'pt_sans-bold.ttf', true);
30
31$fontFamily = 'Font';
32$fontSize = 10.5;
33
35 'top' => intval($params['BILL_MARGIN_TOP'] ?: 15) * 72/25.4,
36 'right' => intval($params['BILL_MARGIN_RIGHT'] ?: 15) * 72/25.4,
37 'bottom' => intval($params['BILL_MARGIN_BOTTOM'] ?: 15) * 72/25.4,
38 'left' => intval($params['BILL_MARGIN_LEFT'] ?: 20) * 72/25.4
39);
40
41$width = $pageWidth - $margin['left'] - $margin['right'];
42
43$pdf->SetDisplayMode(100, 'continuous');
44$pdf->SetMargins($margin['left'], $margin['top'], $margin['right']);
45$pdf->SetAutoPageBreak(true, $margin['bottom']);
46
47$pdf->AddPage();
48
49
50$y0 = $pdf->GetY();
53
54if ($params['BILL_HEADER_SHOW'] == 'Y')
55{
56 if ($params['BILL_PATH_TO_LOGO'])
57 {
58 list($imageHeight, $imageWidth) = $pdf->GetImageSize($params['BILL_PATH_TO_LOGO']);
59
60 $imgDpi = intval($params['BILL_LOGO_DPI']) ?: 96;
61 $imgZoom = 96 / $imgDpi;
62
63 $logoHeight = $imageHeight * $imgZoom + 5;
64 $logoWidth = $imageWidth * $imgZoom + 5;
65
66 if ($logoWidth >= $width)
67 {
68 $imgDpi = 96 * $imageWidth/($width*0.6 + 5);
69 $imgZoom = 96 / $imgDpi;
70
71 $logoHeight = $imageHeight * $imgZoom + 5;
72 $logoWidth = $imageWidth * $imgZoom + 5;
73 }
74
75 $pdf->Image($params['BILL_PATH_TO_LOGO'], $pdf->GetX(), $pdf->GetY(), -$imgDpi, -$imgDpi);
76 }
77
78 $pdf->SetFont($fontFamily, 'B', $fontSize);
79
80 $text = CSalePdf::prepareToPdf($params["SELLER_COMPANY_NAME"]);
82 while ($pdf->GetStringWidth($text))
83 {
84 list($string, $text) = $pdf->splitString($text, $textWidth);
85 $pdf->SetX($pdf->GetX() + $logoWidth);
86 $pdf->Cell($textWidth, 15, $string, 0, 0, 'L');
87 $pdf->Ln();
88 }
89
90 if ($params["SELLER_COMPANY_ADDRESS"])
91 {
92 $sellerAddr = $params["SELLER_COMPANY_ADDRESS"];
93 if (is_array($sellerAddr))
94 $sellerAddr = implode(', ', $sellerAddr);
95 else
96 $sellerAddr = str_replace(array("\r\n", "\n", "\r"), ', ', strval($sellerAddr));
97 $pdf->SetX($pdf->GetX() + $logoWidth);
98 $pdf->MultiCell(0, 15, CSalePdf::prepareToPdf($sellerAddr), 0, 'L');
99 }
100
101 if ($params["SELLER_COMPANY_PHONE"])
102 {
103 $text = CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILL_SELLER_COMPANY_PHONE', array('#PHONE#' => $params["SELLER_COMPANY_PHONE"])));
105 while ($pdf->GetStringWidth($text))
106 {
107 list($string, $text) = $pdf->splitString($text, $textWidth);
108 $pdf->SetX($pdf->GetX() + $logoWidth);
109 $pdf->Cell($textWidth, 15, $string, 0, 0, 'L');
110 $pdf->Ln();
111 }
112}
113
114 $pdf->Ln();
115 $pdf->SetY(max($y0 + $logoHeight, $pdf->GetY()));
116
117 if ($params["SELLER_COMPANY_BANK_NAME"])
118 {
119 $sellerBankCity = '';
120 if ($params["SELLER_COMPANY_BANK_CITY"])
121 {
122 $sellerBankCity = $params["SELLER_COMPANY_BANK_CITY"];
123 if (is_array($sellerBankCity))
124 $sellerBankCity = implode(', ', $sellerBankCity);
125 else
126 $sellerBankCity = str_replace(array("\r\n", "\n", "\r"), ', ', strval($sellerBankCity));
127 }
128 $sellerBank = sprintf(
129 "%s %s",
130 $params["SELLER_COMPANY_BANK_NAME"],
131 $sellerBankCity
132 );
133 unset($sellerBankCity);
134 $sellerRs = $params["SELLER_COMPANY_BANK_ACCOUNT"];
135 }
136 else
137 {
138 $rsPattern = '/\s*\d{10,100}\s*/';
139
140 $sellerBank = trim(preg_replace($rsPattern, ' ', $params["SELLER_COMPANY_BANK_ACCOUNT"]));
141
142 preg_match($rsPattern, $params["SELLER_COMPANY_BANK_ACCOUNT"], $matches);
143 $sellerRs = trim($matches[0]);
144 }
145
146 $pdf->SetFont($fontFamily, '', $fontSize);
147
148 $x0 = $pdf->GetX();
149 $y0 = $pdf->GetY();
150
151 $pdf->Cell(
152 150, 18,
153 ($params["SELLER_COMPANY_INN"])
154 ? CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILL_INN', array('#INN#' => $params["SELLER_COMPANY_INN"])))
155 : ''
156 );
157 $x1 = $pdf->GetX();
158 $pdf->Cell(
159 150, 18,
160 ($params["SELLER_COMPANY_KPP"])
161 ? CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILL_KPP', array('#KPP#' => $params["SELLER_COMPANY_KPP"])))
162 : ''
163 );
164 $x2 = $pdf->GetX();
165 $pdf->Cell(50, 18);
166 $x3 = $pdf->GetX();
167 $pdf->Cell(0, 18);
168 $x4 = $pdf->GetX();
169
170 $pdf->Line($x0, $y0, $x4, $y0);
171
172 $pdf->Ln();
173 $y1 = $pdf->GetY();
174
175 $pdf->Line($x1, $y0, $x1, $y1);
176
177 $pdf->Cell(300, 18, CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILL_SELLER_NAME')));
178 $pdf->Cell(50, 18);
179 $pdf->Cell(0, 18);
180
181 $pdf->Line($x0, $y1, $x2, $y1);
182
183 $pdf->Ln();
184 $y2 = $pdf->GetY();
185
186$text = CSalePdf::prepareToPdf($params["SELLER_COMPANY_NAME"]);
187 while ($pdf->GetStringWidth($text) > 0)
188 {
189 list($string, $text) = $pdf->splitString($text, 300-5);
190
191 $pdf->Cell(300, 18, $string);
192 if ($text)
193 $pdf->Ln();
194 }
195 $pdf->Cell(50, 18, CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILL_SELLER_ACC')));
196 $size = $pdf->GetPageWidth()-$pdf->GetX()-$margin['right'];
198 while ($pdf->GetStringWidth($sellerRs) > 0)
199 {
200 list($string, $sellerRs) = $pdf->splitString($sellerRs, $size-5);
201
202 $pdf->Cell(0, 18, $string);
203 if ($sellerRs)
204 {
205 $pdf->Ln();
206 $pdf->Cell(300, 18, '');
207 $pdf->Cell(50, 18, '');
208 }
209 }
210
211 $pdf->Ln();
212 $y3 = $pdf->GetY();
213
214 $pdf->Cell(300, 18, CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILL_SELLER_BANK_NAME')));
215 $pdf->Cell(50, 18, CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILL_SELLER_BANK_BIK')));
216 $pdf->Cell(0, 18, CSalePdf::prepareToPdf($params["SELLER_COMPANY_BANK_BIC"]));
217
218 $pdf->Line($x0, $y3, $x4, $y3);
219
220 $pdf->Ln();
221 $y4 = $pdf->GetY();
222
224 while ($pdf->GetStringWidth($text) > 0)
225 {
226 list($string, $text) = $pdf->splitString($text, 300-5);
227
228 $pdf->Cell(300, 18, $string);
229 if ($text)
230 $pdf->Ln();
231 }
232 $pdf->Cell(50, 18, CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILL_SELLER_ACC_CORR')));
233
234 $bankAccountCorr = CSalePdf::prepareToPdf($params["SELLER_COMPANY_BANK_ACCOUNT_CORR"]);
235 while ($pdf->GetStringWidth($bankAccountCorr) > 0)
236 {
237 list($string, $bankAccountCorr) = $pdf->splitString($bankAccountCorr, $size-5);
238
239 $pdf->Cell(0, 18, $string);
240 if ($bankAccountCorr)
241 {
242 $pdf->Ln();
243 $pdf->Cell(300, 18, '');
244 $pdf->Cell(50, 18, '');
245 }
246 }
247
248 $pdf->Ln();
249 $y5 = $pdf->GetY();
250
251 $pdf->Line($x0, $y5, $x4, $y5);
252
253 $pdf->Line($x0, $y0, $x0, $y5);
254 $pdf->Line($x2, $y0, $x2, $y5);
255 $pdf->Line($x3, $y0, $x3, $y5);
256 $pdf->Line($x4, $y0, $x4, $y5);
257
258 $pdf->Ln();
259 $pdf->Ln();
260}
261if ($params['BILL_HEADER'])
262{
263 $pdf->SetFont($fontFamily, 'B', $fontSize * 2);
265 $params['BILL_HEADER'].' '.Loc::getMessage('SALE_HPS_BILL_SELLER_TITLE', array('#PAYMENT_NUM#' => $params["ACCOUNT_NUMBER"], '#PAYMENT_DATE#' => $params["PAYMENT_DATE_INSERT"]))
266 );
267
268 $billNo_width = $pdf->GetStringWidth($billNo_tmp);
269 $pdf->Cell(0, 20, $billNo_tmp, 0, 0, 'C');
270 $pdf->Ln();
271}
272$pdf->SetFont($fontFamily, '', $fontSize);
273
274if ($params["BILL_ORDER_SUBJECT"])
275{
276 $pdf->Cell($width/2-$billNo_width/2-2, 15, '');
277 $pdf->MultiCell(0, 15, CSalePdf::prepareToPdf($params["BILL_ORDER_SUBJECT"]), 0, 'L');
278}
279
280if ($params["PAYMENT_DATE_PAY_BEFORE"])
281{
282 $pdf->Cell($width/2-$billNo_width/2-2, 15, '');
283 $pdf->MultiCell(0, 15, CSalePdf::prepareToPdf(
284 Loc::getMessage('SALE_HPS_BILL_SELLER_DATE_END', array('#PAYMENT_DATE_END#' => ConvertDateTime($params["PAYMENT_DATE_PAY_BEFORE"], FORMAT_DATE) ?: $params["PAYMENT_DATE_PAY_BEFORE"]))), 0, 'L');
285}
286
287$pdf->Ln();
288if ($params['BILL_PAYER_SHOW'] == 'Y')
289{
290 if ($params["BUYER_PERSON_COMPANY_NAME"])
291 {
292 $pdf->Write(15, CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILL_BUYER_NAME', array('#BUYER_NAME#' => $params["BUYER_PERSON_COMPANY_NAME"]))));
293 if ($params["BUYER_PERSON_COMPANY_INN"])
294 $pdf->Write(15, CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILL_BUYER_PERSON_INN', array('#INN#' => $params["BUYER_PERSON_COMPANY_INN"]))));
295 if ($params["BUYER_PERSON_COMPANY_ADDRESS"])
296 {
297 $buyerAddr = $params["BUYER_PERSON_COMPANY_ADDRESS"];
298 if (is_array($buyerAddr))
299 $buyerAddr = implode(', ', $buyerAddr);
300 else
301 $buyerAddr = str_replace(array("\r\n", "\n", "\r"), ', ', strval($buyerAddr));
302 $pdf->Write(15, CSalePdf::prepareToPdf(sprintf(", %s", $buyerAddr)));
303 }
304 if ($params["BUYER_PERSON_COMPANY_PHONE"])
305 $pdf->Write(15, CSalePdf::prepareToPdf(sprintf(", %s", $params["BUYER_PERSON_COMPANY_PHONE"])));
306 if ($params["BUYER_PERSON_COMPANY_FAX"])
307 $pdf->Write(15, CSalePdf::prepareToPdf(sprintf(", %s", $params["BUYER_PERSON_COMPANY_FAX"])));
308 if ($params["BUYER_PERSON_COMPANY_NAME_CONTACT"])
309 $pdf->Write(15, CSalePdf::prepareToPdf(sprintf(", %s", $params["BUYER_PERSON_COMPANY_NAME_CONTACT"])));
310 $pdf->Ln();
311 }
312}
313
314$arCurFormat = CCurrencyLang::GetCurrencyFormat($params['CURRENCY']);
315$currency = preg_replace('/(^|[^&])#/', '${1}', $arCurFormat['FORMAT_STRING']);
316 $currency = strip_tags($currency);
317
318$columnList = array('NUMBER', 'NAME', 'QUANTITY', 'MEASURE', 'PRICE', 'VAT_RATE', 'SUM');
321foreach ($columnList as $column)
322{
323 if ($params['BILL_COLUMN_'.$column.'_SHOW'] == 'Y')
324 {
325 $caption = $params['BILL_COLUMN_'.$column.'_TITLE'];
326 if (in_array($column, array('PRICE', 'SUM')))
327 $caption .= ', '.$currency;
328
329 $arCols[$column] = array(
330 'NAME' => CSalePdf::prepareToPdf($caption),
331 'SORT' => $params['BILL_COLUMN_'.$column.'_SORT']
332 );
333 }
334}
335if ($params['USER_COLUMNS'])
336{
337 $columnList = array_merge($columnList, array_keys($params['USER_COLUMNS']));
338 foreach ($params['USER_COLUMNS'] as $id => $val)
339 {
340 $arCols[$id] = array(
341 'NAME' => CSalePdf::prepareToPdf($val['NAME']),
342 'SORT' => $val['SORT']
343 );
344 }
345}
346
347uasort($arCols, function ($a, $b) {return ($a['SORT'] < $b['SORT']) ? -1 : 1;});
348$arColumnKeys = array_keys($arCols);
350
351if (count($params['BASKET_ITEMS']) > 0)
352{
353 $arCells = array();
354 $arProps = array();
355
356 $n = 0;
357 $sum = 0.00;
358 $vat = 0;
359 foreach ($params['BASKET_ITEMS'] as $basketItem)
360 {
361 $productName = $basketItem["NAME"];
362 if ($productName == "OrderDelivery")
363 $productName = Loc::getMessage('SALE_HPS_BILL_DELIVERY');
364 else if ($productName == "OrderDiscount")
365 $productName = Loc::getMessage('SALE_HPS_BILL_DISCOUNT');
366
367 if ($basketItem['IS_VAT_IN_PRICE'])
368 $basketItemPrice = $basketItem['PRICE'];
369 else
370 $basketItemPrice = $basketItem['PRICE']*(1 + $basketItem['VAT_RATE']);
371
372 $arCells[++$n] = array();
373 foreach ($arCols as $columnId => $col)
374 {
375 $data = null;
376
377 switch ($columnId)
378 {
379 case 'NUMBER':
381 $arCols[$columnId]['IS_DIGIT'] = true;
382 break;
383 case 'NAME':
384 $data = CSalePdf::prepareToPdf($productName);
385 break;
386 case 'QUANTITY':
387 $data = CSalePdf::prepareToPdf(roundEx($basketItem['QUANTITY'], SALE_VALUE_PRECISION));
388 $arCols[$columnId]['IS_DIGIT'] = true;
389 break;
390 case 'MEASURE':
391 $data = CSalePdf::prepareToPdf($basketItem["MEASURE_NAME"] ? $basketItem["MEASURE_NAME"] : Loc::getMessage('SALE_HPS_BILL_BASKET_MEASURE_DEFAULT'));
392 $arCols[$columnId]['IS_DIGIT'] = true;
393 break;
394 case 'PRICE':
395 $data = CSalePdf::prepareToPdf(SaleFormatCurrency($basketItem['PRICE'], $basketItem['CURRENCY'], true));
396 $arCols[$columnId]['IS_DIGIT'] = true;
397 break;
398 case 'VAT_RATE':
399 $data = CSalePdf::prepareToPdf(roundEx($basketItem['VAT_RATE']*100, SALE_VALUE_PRECISION)."%");
400 $arCols[$columnId]['IS_DIGIT'] = true;
401 break;
402 case 'SUM':
403 $data = CSalePdf::prepareToPdf(SaleFormatCurrency($basketItemPrice * $basketItem['QUANTITY'], $basketItem['CURRENCY'], true));
404 $arCols[$columnId]['IS_DIGIT'] = true;
405 break;
406 default:
407 if (preg_match('/[^0-9 ,\.]/', $basketItem[$columnId]) === 0)
408 {
409 if (!array_key_exists('IS_DIGIT', $arCols[$columnId]))
410 $arCols[$columnId]['IS_DIGIT'] = true;
411 }
412 else
413 {
414 $arCols[$columnId]['IS_DIGIT'] = false;
415 }
416 $data = ($basketItem[$columnId]) ? CSalePdf::prepareToPdf($basketItem[$columnId]) : '';
417 }
418 if ($data !== null)
419 $arCells[$n][$columnId] = $data;
420 }
421
422 $arProps[$n] = array();
423 foreach ($basketItem['PROPS'] as $basketPropertyItem)
424 {
425 if ($basketPropertyItem['CODE'] == 'CATALOG.XML_ID' || $basketPropertyItem['CODE'] == 'PRODUCT.XML_ID')
426 continue;
427
428 $arProps[$n][] = $pdf::prepareToPdf(sprintf("%s: %s", $basketPropertyItem["NAME"], $basketPropertyItem["VALUE"]));
429 }
430
431 $sum += doubleval($basketItem['PRICE'] * $basketItem['QUANTITY']);
432 $vat = max($vat, $basketItem['VAT_RATE']);
433 }
434
435 if ($vat <= 0)
436 {
437 unset($arCols['VAT_RATE']);
439 $arColumnKeys = array_keys($arCols);
440 foreach ($arCells as $i => $cell)
441 unset($arCells[$i]['VAT_RATE']);
442 }
443
444 if ($params['DELIVERY_PRICE'] > 0)
445 {
446 $sDeliveryItem = Loc::getMessage('SALE_HPS_BILL_DELIVERY');
447 if ($params['DELIVERY_NAME'])
448 $sDeliveryItem .= sprintf(" (%s)", $params['DELIVERY_NAME']);
449 $arCells[++$n] = array();
450 foreach ($arCols as $columnId => $col)
451 {
452 $data = null;
453
454 switch ($columnId)
455 {
456 case 'NUMBER':
458 break;
459 case 'NAME':
460 $data = CSalePdf::prepareToPdf($sDeliveryItem);
461 break;
462 case 'QUANTITY':
464 break;
465 case 'MEASURE':
467 break;
468 case 'PRICE':
469 $data = CSalePdf::prepareToPdf(SaleFormatCurrency($params['DELIVERY_PRICE'], $params['CURRENCY'], true));
470 break;
471 case 'VAT_RATE':
472 $data = CSalePdf::prepareToPdf(roundEx($params['DELIVERY_VAT_RATE']*100, SALE_VALUE_PRECISION)."%");
473 break;
474 case 'SUM':
475 $data = CSalePdf::prepareToPdf(SaleFormatCurrency($params['DELIVERY_PRICE'], $params['CURRENCY'], true));
476 break;
477 default:
478 $data = '';
479 }
480 if ($data !== null)
481 $arCells[$n][$columnId] = $data;
482 }
483
484 $sum += doubleval($params['DELIVERY_PRICE']);
485 }
486
488 if ($params['BILL_TOTAL_SHOW'] == 'Y')
489 {
490 $eps = 0.0001;
491 if ($params['SUM'] - $sum > $eps)
492 {
493 $arCells[++$n] = array();
494 for ($i = 0; $i < $columnCount; $i++)
495 $arCells[$n][$arColumnKeys[$i]] = null;
496
497 $arCells[$n][$arColumnKeys[$columnCount-2]] = CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILL_SUBTOTAL'));
499 }
500
501 if ($params['TAXES'])
502 {
503 foreach ($params['TAXES'] as $tax)
504 {
505 $arCells[++$n] = array();
506 for ($i = 0; $i < $columnCount; $i++)
507 $arCells[$n][$arColumnKeys[$i]] = null;
508
510 "%s%s%s:",
511 ($tax["IS_IN_PRICE"] == "Y") ? Loc::getMessage('SALE_HPS_BILL_INCLUDING') : "",
512 $tax["TAX_NAME"],
513 ($vat <= 0 && $tax["IS_PERCENT"] == "Y") ? sprintf(' (%s%%)', roundEx($tax["VALUE"], SALE_VALUE_PRECISION)) : ""
514 ));
515 $arCells[$n][$arColumnKeys[$columnCount-1]] = CSalePdf::prepareToPdf(SaleFormatCurrency($tax["VALUE_MONEY"], $params['CURRENCY'], true));
516 }
517 }
518
519 if (!$params['TAXES'])
520 {
521 $arCells[++$n] = array();
522 for ($i = 0; $i < $columnCount; $i++)
523 $arCells[$n][$arColumnKeys[$i]] = null;
524
525 $arCells[$n][$arColumnKeys[$columnCount-2]] = CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILL_TOTAL_VAT_RATE'));
526 $arCells[$n][$arColumnKeys[$columnCount-1]] = CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILL_TOTAL_VAT_RATE_NO'));
527 }
528
529 if ($params['SUM_PAID'] > 0)
530 {
531 $arCells[++$n] = array();
532 for ($i = 0; $i < $columnCount; $i++)
533 $arCells[$n][$arColumnKeys[$i]] = null;
534
535 $arCells[$n][$arColumnKeys[$columnCount-2]] = CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILL_TOTAL_PAID'));
537 }
538
539 if ($params['DISCOUNT_PRICE'] > 0)
540 {
541 $arCells[++$n] = array();
542 for ($i = 0; $i < $columnCount; $i++)
543 $arCells[$n][$arColumnKeys[$i]] = null;
544
545 $arCells[$n][$arColumnKeys[$columnCount-2]] = CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILL_TOTAL_DISCOUNT'));
547 }
548
549
550 $arCells[++$n] = array();
551 for ($i = 0; $i < $columnCount; $i++)
552 $arCells[$n][$arColumnKeys[$i]] = null;
553
554 $arCells[$n][$arColumnKeys[$columnCount-2]] = CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILL_TOTAL_SUM'));
556 }
557
558 $rowsInfo = $pdf->calculateRowsWidth($arCols, $arCells, $cntBasketItem, $width);
559 $arRowsWidth = $rowsInfo['ROWS_WIDTH'];
560 $arRowsContentWidth = $rowsInfo['ROWS_CONTENT_WIDTH'];
561}
562$pdf->Ln();
563
564$x0 = $pdf->GetX();
565$y0 = $pdf->GetY();
566
567$k = 0;
569{
570 $newLine = false;
571 foreach ($arCols as $columnId => $column)
572 {
573 list($string, $arCols[$columnId]['NAME']) = $pdf->splitString($column['NAME'], $arRowsWidth[$columnId]);
574 if ($vat > 0 || $columnId !== 'VAT_RATE')
575 $pdf->Cell($arRowsWidth[$columnId], 20, $string, 0, 0, $k ? 'L' : 'C');
576
577 if ($arCols[$columnId]['NAME'])
578 {
579 $k++;
580 $newLine = true;
581 }
582
583 $i = array_search($columnId, $arColumnKeys);
584 ${"x".($i+1)} = $pdf->GetX();
585 }
586
587 $pdf->Ln();
588}
589while($newLine);
590
591$y5 = $pdf->GetY();
592
593$pdf->Line($x0, $y0, ${"x".$columnCount}, $y0);
594for ($i = 0; $i <= $columnCount; $i++)
595{
596 if ($vat > 0 || $arColumnKeys[$i] != 'VAT_RATE')
597 $pdf->Line(${"x$i"}, $y0, ${"x$i"}, $y5);
598}
599$pdf->Line($x0, $y5, ${'x'.$columnCount}, $y5);
600
602for ($n = 1; $n <= $rowsCnt; $n++)
603{
604 $arRowsWidth_tmp = $arRowsWidth;
605 $arRowsContentWidth_tmp = $arRowsContentWidth;
606 $accumulated = 0;
607 $accumulatedContent = 0;
608 foreach ($arCols as $columnId => $column)
609 {
610 if (is_null($arCells[$n][$columnId]))
611 {
612 $accumulated += $arRowsWidth_tmp[$columnId];
613 $arRowsWidth_tmp[$columnId] = null;
614 $accumulatedContent += $arRowsContentWidth_tmp[$columnId];
615 $arRowsContentWidth_tmp[$columnId] = null;
616 }
617 else
618 {
619 $arRowsWidth_tmp[$columnId] += $accumulated;
620 $arRowsContentWidth_tmp[$columnId] += $accumulatedContent;
621 $accumulated = 0;
622 $accumulatedContent = 0;
623 }
624 }
625
626 $x0 = $pdf->GetX();
627 $y0 = $pdf->GetY();
628
629 $pdf->SetFont($fontFamily, '', $fontSize);
630
631 $l = 0;
632 do
633 {
634 $newLine = false;
635 foreach ($arCols as $columnId => $column)
636 {
637 $string = '';
638 if (!is_null($arCells[$n][$columnId]))
639 list($string, $arCells[$n][$columnId]) = $pdf->splitString($arCells[$n][$columnId], $arRowsContentWidth_tmp[$columnId]);
640
641 $rowWidth = $arRowsWidth_tmp[$columnId];
642
643 if (in_array($columnId, array('QUANTITY', 'MEASURE', 'PRICE', 'SUM')))
644 {
645 if (!is_null($arCells[$n][$columnId]))
646 {
647 $pdf->Cell($rowWidth, 15, $string, 0, 0, 'R');
648 }
649 }
650 elseif ($columnId == 'NUMBER')
651 {
652 if (!is_null($arCells[$n][$columnId]))
653 $pdf->Cell($rowWidth, 15, ($l == 0) ? $string : '', 0, 0, 'C');
654 }
655 elseif ($columnId == 'NAME')
656 {
657 if (!is_null($arCells[$n][$columnId]))
658 $pdf->Cell($rowWidth, 15, $string, 0, 0, ($n > $cntBasketItem) ? 'R' : '');
659 }
660 elseif ($columnId == 'VAT_RATE')
661 {
662 if (!is_null($arCells[$n][$columnId]))
663 $pdf->Cell($rowWidth, 15, $string, 0, 0, 'R');
664 }
665 else
666 {
667 if (!is_null($arCells[$n][$columnId]))
668 {
669 $pdf->Cell($rowWidth, 15, $string, 0, 0, ($n > $cntBasketItem) ? 'R' : 'L');
670 }
671 }
672
673 if ($l == 0)
674 {
675 $pos = array_search($columnId, $arColumnKeys);
676 ${'x'.($pos+1)} = $pdf->GetX();
677 }
678
679 if ($arCells[$n][$columnId])
680 $newLine = true;
681 }
682
683 $pdf->Ln();
684 $l++;
685 }
686 while($newLine);
687
688 if ($params['BILL_COLUMN_NAME_SHOW'] == 'Y')
689 {
690 if (isset($arProps[$n]) && is_array($arProps[$n]))
691 {
692 $pdf->SetFont($fontFamily, '', $fontSize - 2);
693 foreach ($arProps[$n] as $property)
694 {
695 $i = 0;
696 $line = 0;
697 foreach ($arCols as $columnId => $caption)
698 {
699 $i++;
700 if ($i == $columnCount)
701 $line = 1;
702 if ($columnId == 'NAME')
703 $pdf->Cell($arRowsWidth_tmp[$columnId], 12, $property, 0, $line);
704 else
705 $pdf->Cell($arRowsWidth_tmp[$columnId], 12, '', 0, $line);
706 }
707 }
708 }
709 }
710
711 $y5 = $pdf->GetY();
712
713 if ($y0 > $y5)
714 $y0 = $margin['top'];
715
716 for ($i = ($n > $cntBasketItem) ? $columnCount - 1 : 0; $i <= $columnCount; $i++)
717 {
718 if ($vat > 0 || $arColumnKeys[$i] != 'VAT_RATE')
719 $pdf->Line(${"x$i"}, $y0, ${"x$i"}, $y5);
720 }
721
722 $pdf->Line(($n <= $cntBasketItem) ? $x0 : ${'x'.($columnCount-1)}, $y5, ${'x'.$columnCount}, $y5);
723}
724$pdf->Ln();
725
726if ($params['BILL_TOTAL_SHOW'] == 'Y')
727{
728 $pdf->SetFont($fontFamily, '', $fontSize);
729 $pdf->Write(15, CSalePdf::prepareToPdf(Loc::getMessage(
730 'SALE_HPS_BILL_BASKET_TOTAL',
731 array(
732 '#BASKET_COUNT#' => $cntBasketItem,
733 '#BASKET_PRICE#' => strip_tags(SaleFormatCurrency($params['SUM'], $params['CURRENCY'], false))
734 )
735 )));
736 $pdf->Ln();
737
738 $pdf->SetFont($fontFamily, 'B', $fontSize);
739 if (in_array($params['CURRENCY'], array("RUR", "RUB")))
740 {
742 }
743 else
744 {
745 $pdf->Write(15, CSalePdf::prepareToPdf(strip_tags(SaleFormatCurrency(
746 $params['SUM'],
747 $params["CURRENCY"],
748 false
749 ))));
750 }
751 $pdf->Ln();
752 $pdf->Ln();
753}
754if ($params["BILL_COMMENT1"] || $params["BILL_COMMENT2"])
755{
756 $pdf->Write(15, CSalePdf::prepareToPdf(Loc::getMessage('SALE_HPS_BILL_COND_COMM')));
757 $pdf->Ln();
758
759 $pdf->SetFont($fontFamily, '', $fontSize);
760
761 if ($params["BILL_COMMENT1"])
762 {
763 $pdf->Write(15, HTMLToTxt(preg_replace(
764 array('#</div>\s*<div[^>]*>#i', '#</?div>#i'), array('<br>', '<br>'),
765 CSalePdf::prepareToPdf($params["BILL_COMMENT1"])
766 ), '', array(), 0));
767 $pdf->Ln();
768 $pdf->Ln();
769 }
770
771 if ($params["BILL_COMMENT2"])
772 {
773 $pdf->Write(15, HTMLToTxt(preg_replace(
774 array('#</div>\s*<div[^>]*>#i', '#</?div>#i'), array('<br>', '<br>'),
775 CSalePdf::prepareToPdf($params["BILL_COMMENT2"])
776 ), '', array(), 0));
777 $pdf->Ln();
778 $pdf->Ln();
779 }
780}
781
782$pdf->Ln();
783$pdf->Ln();
784
785if ($params['BILL_SIGN_SHOW'] == 'Y')
786{
787 if ($params['BILL_PATH_TO_STAMP'])
788 {
789 $filePath = $pdf->GetImagePath($params['BILL_PATH_TO_STAMP']);
790
791 if ($filePath != '' && !$blank && \Bitrix\Main\IO\File::isFileExists($filePath))
792 {
793 list($stampHeight, $stampWidth) = $pdf->GetImageSize($params['BILL_PATH_TO_STAMP']);
794 if ($stampHeight && $stampWidth)
795 {
796 if ($stampHeight > 120 || $stampWidth > 120)
797 {
798 $ratio = 120 / max($stampHeight, $stampWidth);
799 $stampHeight = $ratio * $stampHeight;
800 $stampWidth = $ratio * $stampWidth;
801 }
802
803 if ($pdf->GetY() + $stampHeight > $pageHeight)
804 $pdf->AddPage();
805
806 $pdf->Image(
807 $params['BILL_PATH_TO_STAMP'],
808 $margin['left'] + 40, $pdf->GetY(),
809 $stampWidth, $stampHeight
810 );
811 }
812 }
813 }
814
815 $pdf->SetFont($fontFamily, 'B', $fontSize);
816
817 if ($params["SELLER_COMPANY_DIRECTOR_POSITION"])
818 {
819 $isDirSign = false;
820 if (!$blank && $params['SELLER_COMPANY_DIR_SIGN'])
821 {
822 list($signHeight, $signWidth) = $pdf->GetImageSize($params['SELLER_COMPANY_DIR_SIGN']);
823
824 if ($signHeight && $signWidth)
825 {
826 $ratio = min(37.5/$signHeight, 150/$signWidth);
827 $signHeight = $ratio * $signHeight;
828 $signWidth = $ratio * $signWidth;
829
830 $isDirSign = true;
831 }
832 }
833
834 $sellerDirPos = CSalePdf::prepareToPdf($params["SELLER_COMPANY_DIRECTOR_POSITION"]);
835 if ($isDirSign && $pdf->GetStringWidth($sellerDirPos) <= 160)
836 $pdf->SetY($pdf->GetY() + min($signHeight, 30) - 15);
837 $pdf->MultiCell(150, 15, $sellerDirPos, 0, 'L');
838 $pdf->SetXY($margin['left'] + 150, $pdf->GetY() - 15);
839
840 if ($isDirSign)
841 {
842 $pdf->Image(
843 $params['SELLER_COMPANY_DIR_SIGN'],
844 $pdf->GetX() + 80 - $signWidth/2, $pdf->GetY() - $signHeight + 15,
845 $signWidth, $signHeight
846 );
847 }
848
849 $x1 = $pdf->GetX();
850 $pdf->Cell(160, 15, '');
851 $x2 = $pdf->GetX();
852
853 if ($params["SELLER_COMPANY_DIRECTOR_NAME"])
854 $pdf->Write(15, CSalePdf::prepareToPdf('('.$params["SELLER_COMPANY_DIRECTOR_NAME"].')'));
855 $pdf->Ln();
856
857 $y2 = $pdf->GetY();
858 $pdf->Line($x1, $y2, $x2, $y2);
859
860 $pdf->Ln();
861 }
862
863 if ($params["SELLER_COMPANY_ACCOUNTANT_POSITION"])
864 {
865 $isAccSign = false;
866 if (!$blank && $params['SELLER_COMPANY_ACC_SIGN'])
867 {
868 list($signHeight, $signWidth) = $pdf->GetImageSize($params['SELLER_COMPANY_ACC_SIGN']);
869
870 if ($signHeight && $signWidth)
871 {
872 $ratio = min(37.5/$signHeight, 150/$signWidth);
873 $signHeight = $ratio * $signHeight;
874 $signWidth = $ratio * $signWidth;
875
876 $isAccSign = true;
877 }
878 }
879
880 $sellerAccPos = CSalePdf::prepareToPdf($params["SELLER_COMPANY_ACCOUNTANT_POSITION"]);
881 if ($isAccSign && $pdf->GetStringWidth($sellerAccPos) <= 160)
882 $pdf->SetY($pdf->GetY() + min($signHeight, 30) - 15);
883 $pdf->MultiCell(150, 15, $sellerAccPos, 0, 'L');
884 $pdf->SetXY($margin['left'] + 150, $pdf->GetY() - 15);
885
886 if ($isAccSign)
887 {
888 $pdf->Image(
889 $params['SELLER_COMPANY_ACC_SIGN'],
890 $pdf->GetX() + 80 - $signWidth/2, $pdf->GetY() - $signHeight + 15,
891 $signWidth, $signHeight
892 );
893 }
894
895 $x1 = $pdf->GetX();
896 $pdf->Cell(($params["SELLER_COMPANY_DIRECTOR_NAME"]) ? $x2-$x1 : 160, 15, '');
897 $x2 = $pdf->GetX();
898
899 if ($params["SELLER_COMPANY_ACCOUNTANT_NAME"])
900 $pdf->Write(15, CSalePdf::prepareToPdf('('.$params["SELLER_COMPANY_ACCOUNTANT_NAME"].')'));
901 $pdf->Ln();
902
903 $y2 = $pdf->GetY();
904 $pdf->Line($x1, $y2, $x2, $y2);
905 }
906}
907
908$dest = 'I';
909if ($_REQUEST['GET_CONTENT'] == 'Y')
910 $dest = 'S';
911else if ($_REQUEST['DOWNLOAD'] == 'Y')
912 $dest = 'D';
913
914$fileName = sprintf(
915 'Schet No %s ot %s.pdf',
916 str_replace(
917 array(
918 chr(0), chr(1), chr(2), chr(3), chr(4), chr(5), chr(6), chr(7), chr(8), chr(9), chr(10), chr(11),
919 chr(12), chr(13), chr(14), chr(15), chr(16), chr(17), chr(18), chr(19), chr(20), chr(21), chr(22),
920 chr(23), chr(24), chr(25), chr(26), chr(27), chr(28), chr(29), chr(30), chr(31),
921 '"', '*', '/', ':', '<', '>', '?', '\\', '|'
922 ),
923 '_',
924 strval($params["ACCOUNT_NUMBER"])
925 ),
926 ConvertDateTime($params['PAYMENT_DATE_INSERT'], 'YYYY-MM-DD')
927);
928
929$trFileName = CUtil::translit($fileName, 'ru', array('max_len' => 1024, 'safe_chars' => '.', 'replace_space' => '-'));
930
931return $pdf->Output($trFileName, $dest, $fileName);
932?>
$sum
Определения checkout.php:6
Определения pdf.php:312
static isPdfAvailable()
Определения pdf.php:316
static prepareToPdf($string)
Определения pdf.php:324
$data['IS_AVAILABLE']
Определения .description.php:13
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$_REQUEST["admin_mnu_menu_id"]
Определения get_menu.php:8
const FORMAT_DATE
Определения include.php:63
$l
Определения options.php:783
ConvertDateTime($datetime, $to_format=false, $from_site=false, $bSearchInSitesOnly=false)
Определения tools.php:724
roundEx($value, $prec=0)
Определения tools.php:4635
HTMLToTxt($str, $strSiteUrl="", $aDelete=[], $maxlen=70)
Определения tools.php:2587
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$fileName
Определения quickway.php:305
die
Определения quickway.php:367
$text
Определения template_pdf.php:79
$textWidth
Определения template_pdf.php:80
$i
Определения factura.php:643
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$pageWidth
Определения html.php:24
if( $arBasket=$dbBasket->Fetch()) if($vat > 0) $rowsCnt
Определения html.php:430
$sellerAddr
Определения html.php:558
$width
Определения html.php:68
if(CSalePaySystemAction::GetParamValue('BACKGROUND', false)) $margin
Определения html.php:61
$pageHeight
Определения html.php:25
$logoWidth
Определения pdf.php:49
$y5
Определения pdf.php:464
$logoHeight
Определения pdf.php:48
if(!empty($sellerData)) $dest
Определения pdf.php:818
$fontSize
Определения pdf.php:30
$pdf
Определения pdf.php:13
$arPaySysAction["ENCODING"]
Определения pdf.php:2
$fontFamily
Определения pdf.php:29
$x0
Определения pdf.php:452
$y0
Определения pdf.php:47
$vatRateColumn
Определения template.php:278
$currency
Определения template.php:266
$arCurFormat
Определения template.php:265
$arColumnKeys
Определения template.php:310
$columnList
Определения template.php:276
$sellerBank
Определения template.php:134
$vat
Определения template.php:273
$columnCount
Определения template.php:311
$sellerRs
Определения template.php:137
$arCols
Определения template.php:277
$cntBasketItem
Определения template.php:274
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$arCells
Определения template.php:223
else $a
Определения template.php:137
SaleFormatCurrency($fSum, $strCurrency, $OnlyValue=false, $withoutFormat=false)
Определения include.php:142
const SALE_VALUE_PRECISION
Определения include.php:46
$val
Определения options.php:1793
Number2Word_Rus($source, $IS_MONEY="Y", $currency="")
Определения include.php:2
$x4
Определения pdf.php:128
$y1
Определения pdf.php:133
$y3
Определения pdf.php:159
$y2
Определения pdf.php:144
$billNo_width
Определения pdf.php:202
$billNo_tmp
Определения pdf.php:197
$x2
Определения pdf.php:124
$x3
Определения pdf.php:126
$y4
Определения pdf.php:168
$isAccSign
Определения pdf.php:601
$matches
Определения index.php:22
$trFileName
Определения template_pdf.php:929
$k
Определения template_pdf.php:567
$n
Определения update_log.php:107
$arRowsContentWidth
Определения template_pdf.php:447
$arRowsWidth
Определения template_pdf.php:446
$blank
Определения template_pdf.php:11
$x1
Определения template_pdf.php:419