40include_once DOL_DOCUMENT_ROOT.
'/core/lib/signature.lib.php';
55 $head[$h][0] = DOL_URL_ROOT.
'/admin/pdf.php';
56 $head[$h][1] = $langs->trans(
"Parameters");
57 $head[$h][2] =
'general';
66 if (isModEnabled(
"propal") || isModEnabled(
'invoice') || isModEnabled(
'reception')) {
67 $head[$h][0] = DOL_URL_ROOT.
'/admin/pdf_other.php';
68 $head[$h][1] = $langs->trans(
"Others");
69 $head[$h][2] =
'other';
88 global $conf, $db, $langs;
90 dol_syslog(
"pdf_getFormat Get paper format with mode=".$mode.
" MAIN_PDF_FORMAT=".(!
getDolGlobalString(
'MAIN_PDF_FORMAT') ?
'null' : $conf->global->MAIN_PDF_FORMAT).
" outputlangs->defaultlang=".(is_object($outputlangs) ? $outputlangs->defaultlang :
'null').
" and langs->defaultlang=".(is_object($langs) ? $langs->defaultlang :
'null'));
98 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
104 $sql =
"SELECT code, label, width, height, unit FROM ".MAIN_DB_PREFIX.
"c_paper_format";
105 $sql .=
" WHERE code = '".$db->escape($pdfformat).
"'";
106 $resql = $db->query($sql);
108 $obj = $db->fetch_object($resql);
110 $width = (int) $obj->width;
111 $height = (int) $obj->height;
117 return array(
'width' => $width,
'height' => $height,
'unit' => $unit);
133 if (!defined(
'K_TCPDF_EXTERNAL_CONFIG')) {
134 define(
'K_TCPDF_EXTERNAL_CONFIG', 1);
135 define(
'K_PATH_CACHE', DOL_DATA_ROOT.
'/admin/temp/');
136 define(
'K_PATH_URL_CACHE', DOL_DATA_ROOT.
'/admin/temp/');
138 define(
'K_BLANK_IMAGE',
'_blank.png');
139 define(
'PDF_PAGE_FORMAT',
'A4');
140 define(
'PDF_PAGE_ORIENTATION',
'P');
141 define(
'PDF_CREATOR',
'TCPDF');
142 define(
'PDF_AUTHOR',
'TCPDF');
143 define(
'PDF_HEADER_TITLE',
'TCPDF Example');
144 define(
'PDF_HEADER_STRING',
"by Dolibarr ERP CRM");
145 define(
'PDF_UNIT',
'mm');
146 define(
'PDF_MARGIN_HEADER', 5);
147 define(
'PDF_MARGIN_FOOTER', 10);
148 define(
'PDF_MARGIN_TOP', 27);
149 define(
'PDF_MARGIN_BOTTOM', 25);
150 define(
'PDF_MARGIN_LEFT', 15);
151 define(
'PDF_MARGIN_RIGHT', 15);
152 define(
'PDF_FONT_NAME_MAIN',
'helvetica');
153 define(
'PDF_FONT_SIZE_MAIN', 10);
154 define(
'PDF_FONT_NAME_DATA',
'helvetica');
155 define(
'PDF_FONT_SIZE_DATA', 8);
156 define(
'PDF_FONT_MONOSPACED',
'courier');
157 define(
'PDF_IMAGE_SCALE_RATIO', 1.25);
158 define(
'HEAD_MAGNIFICATION', 1.1);
159 define(
'K_CELL_HEIGHT_RATIO', 1.25);
160 define(
'K_TITLE_MAGNIFICATION', 1.3);
161 define(
'K_SMALL_RATIO', 2 / 3);
162 define(
'K_THAI_TOPCHARS',
true);
163 define(
'K_TCPDF_CALLS_IN_HTML',
true);
165 define(
'K_TCPDF_THROW_EXCEPTION_ERROR',
true);
167 define(
'K_TCPDF_THROW_EXCEPTION_ERROR',
false);
172 require_once TCPDF_PATH.
'tcpdf.php';
176 require_once TCPDI_PATH.
'tcpdi.php';
187 $pdf =
new TCPDI($pagetype, $metric, $format,
true,
'UTF-8',
false, $pdfa);
189 $pdf =
new TCPDF($pagetype, $metric, $format,
true,
'UTF-8',
false, $pdfa);
207 $pdfrights = (
getDolGlobalString(
'PDF_SECURITY_ENCRYPTION_RIGHTS') ? json_decode($conf->global->PDF_SECURITY_ENCRYPTION_RIGHTS,
true) : array(
'modify',
'copy'));
220 $pubkeys = (
getDolGlobalString(
'PDF_SECURITY_ENCRYPTION_PUBKEYS') ? json_decode($conf->global->PDF_SECURITY_ENCRYPTION_PUBKEYS,
true) :
null);
222 $pdf->SetProtection($pdfrights, $pdfuserpass, $pdfownerpass, $encstrength, $pubkeys);
236 require_once TCPDF_PATH.
'tcpdf_parser.php';
238 $isencrypted =
false;
240 $content = file_get_contents($pathoffile);
243 @($parser =
new TCPDF_PARSER(ltrim($content)));
244 list($xref, $data) = $parser->getParsedData();
248 if (isset($xref[
'trailer'][
'encrypt'])) {
270 return $conf->global->MAIN_PDF_FORCE_FONT;
274 if (class_exists(
'TCPDF')) {
275 if ($outputlangs->trans(
'FONTFORPDF') !=
'FONTFORPDF') {
276 $font = $outputlangs->trans(
'FONTFORPDF');
293 if (class_exists(
'TCPDF')) {
294 if ($outputlangs->trans(
'FONTSIZEFORPDF') !=
'FONTSIZEFORPDF') {
295 $size = (int) $outputlangs->trans(
'FONTSIZEFORPDF');
316 $height = (!
getDolGlobalString(
'MAIN_DOCUMENTS_LOGO_HEIGHT') ? 20 : $conf->global->MAIN_DOCUMENTS_LOGO_HEIGHT);
318 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
320 if ($tmp[
'height']) {
321 $width = round($height * $tmp[
'width'] / $tmp[
'height']);
322 if ($width > $maxwidth) {
323 $height = $height * $maxwidth / $width;
341 $pdf->startTransaction();
343 $start_y = $pdf->GetY();
345 $start_page = $pdf->getPage();
347 $pdf->writeHTMLCell(0, 0, 0, $start_y, $htmlcontent, 0, 1,
false,
true,
'J',
true);
349 $end_y = $pdf->GetY();
350 $end_page = $pdf->getPage();
353 if ($end_page == $start_page) {
354 $height = $end_y - $start_y;
356 for ($page = $start_page; $page <= $end_page; ++$page) {
357 $pdf->setPage($page);
358 $tmpm = $pdf->getMargins();
359 $tMargin = $tmpm[
'top'];
360 if ($page == $start_page) {
362 $height = $pdf->getPageHeight() - $start_y - $pdf->getBreakMargin();
363 } elseif ($page == $end_page) {
365 $height = $end_y - $tMargin;
367 $height = $pdf->getPageHeight() - $tMargin - $pdf->getBreakMargin();
372 $pdf = $pdf->rollbackTransaction();
393 if ($thirdparty instanceof
Societe) {
394 $socname = $thirdparty->name;
395 if (($includealias ||
getDolGlobalInt(
'PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME')) && !empty($thirdparty->name_alias)) {
397 $socname = $thirdparty->name_alias.
" - ".$thirdparty->name;
399 $socname = $thirdparty->name.
" - ".$thirdparty->name_alias;
402 } elseif ($thirdparty instanceof
Contact) {
403 if ($thirdparty->socid > 0) {
404 $thirdparty->fetch_thirdparty();
405 $socname = $thirdparty->thirdparty->name;
406 if (($includealias ||
getDolGlobalInt(
'PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME')) && !empty($thirdparty->thirdparty->name_alias)) {
408 $socname = $thirdparty->thirdparty->name_alias.
" - ".$thirdparty->thirdparty->name;
410 $socname = $thirdparty->thirdparty->name.
" - ".$thirdparty->thirdparty->name_alias;
415 throw new InvalidArgumentException(
'Parameter 1 $thirdparty is not a Societe nor Contact');
418 return $outputlangs->convToOutputCharset($socname);
434function pdf_build_address($outputlangs, $sourcecompany, $targetcompany =
'', $targetcontact =
'', $usecontact = 0, $mode =
'source',
$object =
null)
438 if ($mode ==
'source' && !is_object($sourcecompany)) {
441 if ($mode ==
'target' && !is_object($targetcompany)) {
445 if (!empty($sourcecompany->state_id) && empty($sourcecompany->state)) {
446 $sourcecompany->state =
getState($sourcecompany->state_id);
448 if (!empty($targetcompany->state_id) && empty($targetcompany->state)) {
449 $targetcompany->state =
getState($targetcompany->state_id);
454 if (is_object($hookmanager)) {
455 $parameters = array(
'sourcecompany' => &$sourcecompany,
'targetcompany' => &$targetcompany,
'targetcontact' => &$targetcontact,
'outputlangs' => $outputlangs,
'mode' => $mode,
'usecontact' => $usecontact);
457 $reshook = $hookmanager->executeHooks(
'pdf_build_address', $parameters,
$object, $action);
458 $stringaddress .= $hookmanager->resPrint;
460 if (empty($reshook)) {
461 if ($mode ==
'source') {
463 if (isset($targetcompany->country_code) && !empty($sourcecompany->country_code) && ($targetcompany->country_code != $sourcecompany->country_code)) {
467 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($sourcecompany, $withCountry,
"\n", $outputlangs)).
"\n";
471 if ($sourcecompany->phone) {
472 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"PhoneShort").
": ".$outputlangs->convToOutputCharset($sourcecompany->phone);
475 if ($sourcecompany->fax) {
476 $stringaddress .= ($stringaddress ? ($sourcecompany->phone ?
" - " :
"\n") :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($sourcecompany->fax);
479 if ($sourcecompany->email) {
480 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($sourcecompany->email);
483 if ($sourcecompany->url) {
484 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($sourcecompany->url);
489 if ($sourcecompany->tva_intra) {
490 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"VATIntraShort").
': '.$outputlangs->convToOutputCharset($sourcecompany->tva_intra);
495 if (
getDolGlobalString(
'MAIN_PROFID1_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof1)) {
496 $tmp = $outputlangs->transcountrynoentities(
"ProfId1", $sourcecompany->country_code);
497 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
500 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof1);
502 if (
getDolGlobalString(
'MAIN_PROFID2_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof2)) {
503 $tmp = $outputlangs->transcountrynoentities(
"ProfId2", $sourcecompany->country_code);
504 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
507 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof2);
509 if (
getDolGlobalString(
'MAIN_PROFID3_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof3)) {
510 $tmp = $outputlangs->transcountrynoentities(
"ProfId3", $sourcecompany->country_code);
511 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
514 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof3);
516 if (
getDolGlobalString(
'MAIN_PROFID4_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof4)) {
517 $tmp = $outputlangs->transcountrynoentities(
"ProfId4", $sourcecompany->country_code);
518 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
521 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof4);
523 if (
getDolGlobalString(
'MAIN_PROFID5_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof5)) {
524 $tmp = $outputlangs->transcountrynoentities(
"ProfId5", $sourcecompany->country_code);
525 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
528 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof5);
530 if (
getDolGlobalString(
'MAIN_PROFID6_IN_SOURCE_ADDRESS') && !empty($sourcecompany->idprof6)) {
531 $tmp = $outputlangs->transcountrynoentities(
"ProfId6", $sourcecompany->country_code);
532 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
535 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof6);
538 $stringaddress .= ($stringaddress ?
"\n" :
'') .
getDolGlobalString(
'PDF_ADD_MORE_AFTER_SOURCE_ADDRESS');
542 if ($mode ==
'target' || preg_match(
'/targetwithdetails/', $mode)) {
543 if ($usecontact && (is_object($targetcontact))) {
544 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($targetcontact->getFullName($outputlangs, 1));
546 if (!empty($targetcontact->address)) {
547 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($targetcontact)).
"\n";
549 $companytouseforaddress = $targetcompany;
552 if ($targetcontact->socid > 0 && $targetcontact->socid != $targetcompany->id) {
553 $targetcontact->fetch_thirdparty();
554 $companytouseforaddress = $targetcontact->thirdparty;
557 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($companytouseforaddress)).
"\n";
560 if (!empty($targetcontact->country_code) && $targetcontact->country_code != $sourcecompany->country_code) {
561 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcontact->country_code));
562 } elseif (empty($targetcontact->country_code) && !empty($targetcompany->country_code) && ($targetcompany->country_code != $sourcecompany->country_code)) {
563 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcompany->country_code));
566 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || preg_match(
'/targetwithdetails/', $mode)) {
568 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_phone/', $mode)) {
569 if (!empty($targetcontact->phone_pro) || !empty($targetcontact->phone_mobile)) {
570 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Phone").
": ";
572 if (!empty($targetcontact->phone_pro)) {
573 $stringaddress .= $outputlangs->convToOutputCharset($targetcontact->phone_pro);
575 if (!empty($targetcontact->phone_pro) && !empty($targetcontact->phone_mobile)) {
576 $stringaddress .=
" / ";
578 if (!empty($targetcontact->phone_mobile)) {
579 $stringaddress .= $outputlangs->convToOutputCharset($targetcontact->phone_mobile);
583 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_fax/', $mode)) {
584 if ($targetcontact->fax) {
585 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($targetcontact->fax);
589 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_email/', $mode)) {
590 if ($targetcontact->email) {
591 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($targetcontact->email);
595 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_url/', $mode)) {
596 if ($targetcontact->url) {
597 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($targetcontact->url);
602 if (is_object($targetcompany)) {
603 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($targetcompany));
605 if (!empty($targetcompany->country_code) && $targetcompany->country_code != $sourcecompany->country_code) {
606 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcompany->country_code));
608 $stringaddress .= ($stringaddress ?
"\n" :
'');
611 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || preg_match(
'/targetwithdetails/', $mode)) {
613 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_phone/', $mode)) {
614 if (!empty($targetcompany->phone)) {
615 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Phone").
": ";
617 if (!empty($targetcompany->phone)) {
618 $stringaddress .= $outputlangs->convToOutputCharset($targetcompany->phone);
622 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_fax/', $mode)) {
623 if ($targetcompany->fax) {
624 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($targetcompany->fax);
628 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_email/', $mode)) {
629 if ($targetcompany->email) {
630 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($targetcompany->email);
634 if (
getDolGlobalString(
'MAIN_PDF_ADDALSOTARGETDETAILS') || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_url/', $mode)) {
635 if ($targetcompany->url) {
636 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($targetcompany->url);
645 if ($usecontact && is_object($targetcontact) &&
getDolGlobalInt(
'MAIN_USE_COMPANY_NAME_OF_CONTACT')) {
646 $targetcontact->fetch_thirdparty();
647 if (!empty($targetcontact->thirdparty->id) && $targetcontact->thirdparty->tva_intra) {
648 $stringaddress .= ($stringaddress ?
"\n" :
'') . $outputlangs->transnoentities(
"VATIntraShort") .
': ' . $outputlangs->convToOutputCharset($targetcontact->thirdparty->tva_intra);
650 } elseif (!empty($targetcompany->tva_intra)) {
651 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"VATIntraShort").
': '.$outputlangs->convToOutputCharset($targetcompany->tva_intra);
656 if (
getDolGlobalString(
'MAIN_LEGALFORM_IN_ADDRESS') && !empty($targetcompany->forme_juridique_code)) {
658 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp;
662 if (
getDolGlobalString(
'MAIN_PROFID1_IN_ADDRESS') && !empty($targetcompany->idprof1)) {
663 $tmp = $outputlangs->transcountrynoentities(
"ProfId1", $targetcompany->country_code);
664 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
667 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof1);
669 if (
getDolGlobalString(
'MAIN_PROFID2_IN_ADDRESS') && !empty($targetcompany->idprof2)) {
670 $tmp = $outputlangs->transcountrynoentities(
"ProfId2", $targetcompany->country_code);
671 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
674 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof2);
676 if (
getDolGlobalString(
'MAIN_PROFID3_IN_ADDRESS') && !empty($targetcompany->idprof3)) {
677 $tmp = $outputlangs->transcountrynoentities(
"ProfId3", $targetcompany->country_code);
678 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
681 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof3);
683 if (
getDolGlobalString(
'MAIN_PROFID4_IN_ADDRESS') && !empty($targetcompany->idprof4)) {
684 $tmp = $outputlangs->transcountrynoentities(
"ProfId4", $targetcompany->country_code);
685 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
688 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof4);
690 if (
getDolGlobalString(
'MAIN_PROFID5_IN_ADDRESS') && !empty($targetcompany->idprof5)) {
691 $tmp = $outputlangs->transcountrynoentities(
"ProfId5", $targetcompany->country_code);
692 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
695 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof5);
697 if (
getDolGlobalString(
'MAIN_PROFID6_IN_ADDRESS') && !empty($targetcompany->idprof6)) {
698 $tmp = $outputlangs->transcountrynoentities(
"ProfId6", $targetcompany->country_code);
699 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
702 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof6);
707 if ($mode ==
'source' && !empty($sourcecompany->note_public)) {
708 $stringaddress .= ($stringaddress ?
"\n" :
'').
dol_string_nohtmltag($sourcecompany->note_public);
710 if (($mode ==
'target' || preg_match(
'/targetwithdetails/', $mode)) && !empty($targetcompany->note_public)) {
711 $stringaddress .= ($stringaddress ?
"\n" :
'').
dol_string_nohtmltag($targetcompany->note_public);
717 return $stringaddress;
735 $filepath = $conf->mycompany->dir_output.
'/logos/' .
getDolGlobalString(
'MAIN_USE_BACKGROUND_ON_PDF');
736 if (file_exists($filepath)) {
737 $pdf->SetAutoPageBreak(0, 0);
739 $pdf->SetAlpha($conf->global->MAIN_USE_BACKGROUND_ON_PDF_ALPHA);
741 $pdf->Image($filepath, (isset($conf->global->MAIN_USE_BACKGROUND_ON_PDF_X) ? $conf->global->MAIN_USE_BACKGROUND_ON_PDF_X : 0), (isset($conf->global->MAIN_USE_BACKGROUND_ON_PDF_Y) ? $conf->global->MAIN_USE_BACKGROUND_ON_PDF_Y : 0), 0, $page_height);
746 $pdf->SetAutoPageBreak(1, 0);
768 $substitutionarray[
'__FROM_NAME__'] =
'__FROM_NAME__';
769 $substitutionarray[
'__FROM_EMAIL__'] =
'__FROM_EMAIL__';
770 return $substitutionarray;
790 } elseif ($unit ==
'mm') {
792 } elseif ($unit ==
'cm') {
794 } elseif ($unit ==
'in') {
798 dol_print_error(
null,
'Unexpected unit "'.$unit.
'" for pdf_watermark');
805 $text = $outputlangs->convToOutputCharset($text);
807 $savx = $pdf->getX();
808 $savy = $pdf->getY();
810 $watermark_angle = atan($h / $w) / 2;
811 $watermark_x_pos = 0;
812 $watermark_y_pos = $h / 3;
813 $watermark_x = $w / 2;
814 $watermark_y = $h / 3;
815 $pdf->SetFont(
'',
'B', 40);
816 $pdf->SetTextColor(255, 0, 0);
819 $pdf->_out(sprintf(
'q %.5F %.5F %.5F %.5F %.2F %.2F cm 1 0 0 1 %.2F %.2F cm', cos($watermark_angle), sin($watermark_angle), -sin($watermark_angle), cos($watermark_angle), $watermark_x * $k, ($h - $watermark_y) * $k, -$watermark_x * $k, -($h - $watermark_y) * $k));
822 $pdf->SetXY($watermark_x_pos, $watermark_y_pos);
826 $pdf->Cell($w - 20, 25, $outputlangs->convToOutputCharset($text),
"", 2,
"C", 0);
831 $pdf->SetXY($savx, $savy);
850function pdf_bank(&$pdf, $outputlangs, $curx, $cury, $account, $onlynumber = 0, $default_font_size = 10)
852 global $mysoc, $conf;
854 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formbank.class.php';
858 $pdf->SetXY($curx, $cury);
860 if (empty($onlynumber)) {
861 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizetitle);
862 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
'PaymentByTransferOnThisBankAccount').
':', 0,
'L', 0);
866 $outputlangs->load(
"banks");
869 $bickey =
"BICNumber";
870 if ($account->getCountryCode() ==
'IN') {
875 $usedetailedbban = $account->useDetailedBBAN();
878 if ($usedetailedbban) {
881 if (empty($onlynumber)) {
882 $pdf->SetFont(
'',
'', $default_font_size - $diffsizecontent);
883 $pdf->SetXY($curx, $cury);
884 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Bank").
': '.$outputlangs->convToOutputCharset($account->bank), 0,
'L', 0);
894 if (empty($onlynumber)) {
895 $pdf->line($curx + 1, $cury + 1, $curx + 1, $cury + 6);
899 foreach ($account->getFieldsToShow() as $val) {
900 $pdf->SetXY($curx, $cury + 4);
901 $pdf->SetFont(
'',
'', $default_font_size - 3);
903 if ($val ==
'BankCode') {
906 $content = $account->code_banque;
907 } elseif ($val ==
'DeskCode') {
910 $content = $account->code_guichet;
911 } elseif ($val ==
'BankAccountNumber') {
914 $content = $account->number;
915 } elseif ($val ==
'BankAccountNumberKey') {
918 $content = $account->cle_rib;
919 } elseif ($val ==
'IBAN' || $val ==
'BIC') {
924 dol_print_error($account->db,
'Unexpected value for getFieldsToShow: '.$val);
928 $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($content), 0,
'C', 0);
929 $pdf->SetXY($curx, $cury + 1);
931 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
932 $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities($val), 0,
'C', 0);
933 if (empty($onlynumber)) {
934 $pdf->line($curx, $cury + 1, $curx, $cury + 7);
941 } elseif (!empty($account->number)) {
942 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
943 $pdf->SetXY($curx, $cury);
944 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Bank").
': '.$outputlangs->convToOutputCharset($account->bank), 0,
'L', 0);
947 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
948 $pdf->SetXY($curx, $cury);
949 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"BankAccountNumber").
': '.$outputlangs->convToOutputCharset($account->number), 0,
'L', 0);
952 if ($diffsizecontent <= 2) {
957 $pdf->SetFont(
'',
'', $default_font_size - $diffsizecontent);
959 if (empty($onlynumber) && !empty($account->address)) {
960 $pdf->SetXY($curx, $cury);
961 $val = $outputlangs->transnoentities(
"Residence").
': '.$outputlangs->convToOutputCharset($account->address);
962 $pdf->MultiCell(100, 3, $val, 0,
'L', 0);
965 $tmpy = $pdf->getStringHeight(100, $val);
969 if (!empty($account->owner_name)) {
970 $pdf->SetXY($curx, $cury);
971 $val = $outputlangs->transnoentities(
"BankAccountOwner").
': '.$outputlangs->convToOutputCharset($account->owner_name);
972 $pdf->MultiCell(100, 3, $val, 0,
'L', 0);
973 $tmpy = $pdf->getStringHeight(100, $val);
975 } elseif (!$usedetailedbban) {
982 if (!empty($account->iban)) {
984 $ibanDisplay_temp = str_replace(
' ',
'', $outputlangs->convToOutputCharset($account->iban));
987 $nbIbanDisplay_temp =
dol_strlen($ibanDisplay_temp);
988 for ($i = 0; $i < $nbIbanDisplay_temp; $i++) {
989 $ibanDisplay .= $ibanDisplay_temp[$i];
990 if ($i % 4 == 3 && $i > 0) {
995 $pdf->SetFont(
'',
'B', $default_font_size - 3);
996 $pdf->SetXY($curx, $cury);
997 $pdf->MultiCell(100, 3, $outputlangs->transnoentities($ibankey).
': '.$ibanDisplay, 0,
'L', 0);
1001 if (!empty($account->bic)) {
1002 $pdf->SetFont(
'',
'B', $default_font_size - 3);
1003 $pdf->SetXY($curx, $cury);
1004 $pdf->MultiCell(100, 3, $outputlangs->transnoentities($bickey).
': '.$outputlangs->convToOutputCharset($account->bic), 0,
'L', 0);
1007 return $pdf->getY();
1027function pdf_pagefoot(&$pdf, $outputlangs, $paramfreetext, $fromcompany, $marge_basse, $marge_gauche, $page_hauteur,
$object, $showdetails = 0, $hidefreetext = 0, $page_largeur = 0, $watermark =
'')
1029 global $conf, $hookmanager;
1031 $outputlangs->load(
"dict");
1034 $marginwithfooter = 0;
1036 $dims = $pdf->getPageDimensions();
1042 if (is_object($fromcompany)) {
1043 $substitutionarray[
'__FROM_NAME__'] = $fromcompany->name;
1044 $substitutionarray[
'__FROM_EMAIL__'] = $fromcompany->email;
1053 $newfreetext = preg_replace(
'/(<img.*src=")[^\"]*viewimage\.php[^\"]*modulepart=medias[^\"]*file=([^\"]*)("[^\/]*\/>)/',
'\1file:/'.DOL_DATA_ROOT.
'/medias/\2\3', $newfreetext);
1055 $line .= $outputlangs->convToOutputCharset($newfreetext);
1064 if (is_object($fromcompany) && in_array($showdetails, array(1, 3))) {
1066 if ($fromcompany->name) {
1067 $line1 .= ($line1 ?
" - " :
"").$outputlangs->transnoentities(
"RegisteredOffice").
": ".$fromcompany->name;
1070 if ($fromcompany->address) {
1071 $line1 .= ($line1 ?
" - " :
"").str_replace(
"\n",
", ", $fromcompany->address);
1074 if ($fromcompany->zip) {
1075 $line1 .= ($line1 ?
" - " :
"").$fromcompany->zip;
1078 if ($fromcompany->town) {
1079 $line1 .= ($line1 ?
" " :
"").$fromcompany->town;
1082 if ($fromcompany->country) {
1083 $line1 .= ($line1 ?
", " :
"").$fromcompany->country;
1086 if ($fromcompany->phone) {
1087 $line2 .= ($line2 ?
" - " :
"").$outputlangs->transnoentities(
"Phone").
": ".$fromcompany->phone;
1090 if ($fromcompany->fax) {
1091 $line2 .= ($line2 ?
" - " :
"").$outputlangs->transnoentities(
"Fax").
": ".$fromcompany->fax;
1095 if ($fromcompany->url) {
1096 $line2 .= ($line2 ?
" - " :
"").$fromcompany->url;
1099 if ($fromcompany->email) {
1100 $line2 .= ($line2 ?
" - " :
"").$fromcompany->email;
1103 if ($showdetails == 2 || $showdetails == 3 || (!empty($fromcompany->country_code) && $fromcompany->country_code ==
'DE')) {
1105 if ($fromcompany->managers) {
1106 $line2 .= ($line2 ?
" - " :
"").$fromcompany->managers;
1112 if (!empty($fromcompany->forme_juridique_code) && $fromcompany->forme_juridique_code) {
1113 $line3 .= ($line3 ?
" - " :
"").$outputlangs->convToOutputCharset(
getFormeJuridiqueLabel((
string) $fromcompany->forme_juridique_code));
1116 if (!empty($fromcompany->capital)) {
1117 $tmpamounttoshow =
price2num($fromcompany->capital);
1118 if (is_numeric($tmpamounttoshow) && $tmpamounttoshow > 0) {
1119 $line3 .= ($line3 ?
" - " :
"").$outputlangs->transnoentities(
"CapitalOf",
price($tmpamounttoshow, 0, $outputlangs, 0, 0, 0, $conf->currency));
1120 } elseif (!empty($fromcompany->capital)) {
1121 $line3 .= ($line3 ?
" - " :
"").$outputlangs->transnoentities(
"CapitalOf", $fromcompany->capital, $outputlangs);
1125 if (!empty($fromcompany->idprof1) && $fromcompany->idprof1 && ($fromcompany->country_code !=
'FR' || !$fromcompany->idprof2)) {
1126 $field = $outputlangs->transcountrynoentities(
"ProfId1", $fromcompany->country_code);
1127 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1130 $line3 .= ($line3 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof1);
1133 if (!empty($fromcompany->idprof2) && $fromcompany->idprof2) {
1134 $field = $outputlangs->transcountrynoentities(
"ProfId2", $fromcompany->country_code);
1135 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1138 $line3 .= ($line3 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof2);
1143 if (!empty($fromcompany->idprof3) && $fromcompany->idprof3) {
1144 $field = $outputlangs->transcountrynoentities(
"ProfId3", $fromcompany->country_code);
1145 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1148 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof3);
1151 if (!empty($fromcompany->idprof4) && $fromcompany->idprof4) {
1152 $field = $outputlangs->transcountrynoentities(
"ProfId4", $fromcompany->country_code);
1153 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1156 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof4);
1159 if (!empty($fromcompany->idprof5) && $fromcompany->idprof5) {
1160 $field = $outputlangs->transcountrynoentities(
"ProfId5", $fromcompany->country_code);
1161 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1164 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof5);
1167 if (!empty($fromcompany->idprof6) && $fromcompany->idprof6) {
1168 $field = $outputlangs->transcountrynoentities(
"ProfId6", $fromcompany->country_code);
1169 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1172 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof6);
1175 if (!empty($fromcompany->idprof7) && $fromcompany->idprof7) {
1176 $field = $outputlangs->transcountrynoentities(
"ProfId7", $fromcompany->country_code);
1177 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1180 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof7);
1183 if (!empty($fromcompany->idprof8) && $fromcompany->idprof8) {
1184 $field = $outputlangs->transcountrynoentities(
"ProfId8", $fromcompany->country_code);
1185 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1188 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof8);
1191 if (!empty($fromcompany->idprof9) && $fromcompany->idprof9) {
1192 $field = $outputlangs->transcountrynoentities(
"ProfId9", $fromcompany->country_code);
1193 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1196 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof9);
1199 if (!empty($fromcompany->idprof10) && $fromcompany->idprof10) {
1200 $field = $outputlangs->transcountrynoentities(
"ProfId10", $fromcompany->country_code);
1201 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1204 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof10);
1207 if (!empty($fromcompany->tva_intra) && $fromcompany->tva_intra !=
'') {
1208 $line4 .= ($line4 ?
" - " :
"").$outputlangs->transnoentities(
"VATIntraShort").
": ".$outputlangs->convToOutputCharset($fromcompany->tva_intra);
1211 $pdf->SetFont(
'',
'', 7);
1212 $pdf->SetDrawColor(224, 224, 224);
1215 list($r, $g, $b) = sscanf($conf->global->PDF_FOOTER_TEXT_COLOR,
'%d, %d, %d');
1216 $pdf->SetTextColor($r, $g, $b);
1220 $freetextheight = 0;
1231 $freetextheight = $pdf->getStringHeight($width, $line);
1240 if (is_object($hookmanager)) {
1241 $parameters = array(
'line1' => $line1,
'line2' => $line2,
'line3' => $line3,
'line4' => $line4,
'outputlangs' => $outputlangs);
1243 $hookmanager->executeHooks(
'pdf_pagefoot', $parameters,
$object, $action);
1244 if (!empty($hookmanager->resPrint) && $hidefreetext == 0) {
1245 $mycustomfooter = $hookmanager->resPrint;
1248 $marginwithfooter = $marge_basse + $freetextheight + $mycustomfooterheight;
1249 $posy = (float) $marginwithfooter;
1253 list($r, $g, $b) = sscanf($conf->global->PDF_FOOTER_BACKGROUND_COLOR,
'%d, %d, %d');
1254 $pdf->SetAutoPageBreak(0, 0);
1255 $pdf->Rect(0, $dims[
'hk'] - $posy + $freetextheight, $dims[
'wk'] + 1, $marginwithfooter + 1,
'F', array(), $fill_color = array($r, $g, $b));
1256 $pdf->SetAutoPageBreak(1, 0);
1260 $pdf->SetAutoPageBreak(0, 0);
1263 $pdf->SetXY($dims[
'lm'], -$posy);
1265 $pdf->MultiCell(0, 3, $line, 0, $align, 0);
1267 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $freetextheight, $dims[
'lm'], $dims[
'hk'] - $marginwithfooter,
dol_htmlentitiesbr($line, 1,
'UTF-8', 0));
1269 $posy -= $freetextheight;
1272 $pdf->SetAutoPageBreak(1, 0);
1279 $pdf->line($dims[
'lm'], $dims[
'hk'] - $posy, $dims[
'wk'] - $dims[
'rm'], $dims[
'hk'] - $posy);
1290 $pdf->SetAutoPageBreak(0, 0);
1292 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $mycustomfooterheight, $dims[
'lm'], $dims[
'hk'] - $posy,
dol_htmlentitiesbr($mycustomfooter, 1,
'UTF-8', 0));
1294 $pdf->SetAutoPageBreak(1, 0);
1297 $posy -= $mycustomfooterheight - 3;
1300 $marginwithfooter = $marge_basse + $freetextheight + (!empty($line1) ? 3 : 0) + (!empty($line2) ? 3 : 0) + (!empty($line3) ? 3 : 0) + (!empty($line4) ? 3 : 0);
1301 $posy = (float) $marginwithfooter;
1305 list($r, $g, $b) = sscanf($conf->global->PDF_FOOTER_BACKGROUND_COLOR,
'%d, %d, %d');
1306 $pdf->SetAutoPageBreak(0, 0);
1307 $pdf->Rect(0, $dims[
'hk'] - $posy + $freetextheight, $dims[
'wk'] + 1, $marginwithfooter + 1,
'F', array(), $fill_color = array($r, $g, $b));
1308 $pdf->SetAutoPageBreak(1, 0);
1312 $pdf->SetAutoPageBreak(0, 0);
1315 $pdf->SetXY($dims[
'lm'], -$posy);
1317 $pdf->MultiCell(0, 3, $line, 0, $align, 0);
1319 $pdf->writeHTMLCell($dims[
'wk'] - $dims[
'lm'] - $dims[
'rm'], $freetextheight, $dims[
'lm'], $dims[
'hk'] - $marginwithfooter,
dol_htmlentitiesbr($line, 1,
'UTF-8', 0));
1321 $posy -= $freetextheight;
1324 $pdf->SetAutoPageBreak(1, 0);
1333 $pdf->line($dims[
'lm'], $dims[
'hk'] - $posy, $dims[
'wk'] - $dims[
'rm'], $dims[
'hk'] - $posy);
1343 if (!empty($line1)) {
1344 $pdf->SetFont(
'',
'B', 7);
1345 $pdf->SetXY($dims[
'lm'], -$posy);
1346 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line1, 0,
'C', 0);
1348 $pdf->SetFont(
'',
'', 7);
1351 if (!empty($line2)) {
1352 $pdf->SetFont(
'',
'B', 7);
1353 $pdf->SetXY($dims[
'lm'], -$posy);
1354 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line2, 0,
'C', 0);
1356 $pdf->SetFont(
'',
'', 7);
1359 if (!empty($line3)) {
1360 $pdf->SetXY($dims[
'lm'], -$posy);
1361 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line3, 0,
'C', 0);
1364 if (!empty($line4)) {
1366 $pdf->SetXY($dims[
'lm'], -$posy);
1367 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line4, 0,
'C', 0);
1374 $pdf->SetXY($dims[
'wk'] - $dims[
'rm'] - 18 -
getDolGlobalInt(
'PDF_FOOTER_PAGE_NUMBER_X', 0), -$posy -
getDolGlobalInt(
'PDF_FOOTER_PAGE_NUMBER_Y', 0));
1376 $pagination = $pdf->PageNo().
' / '.$pdf->getAliasNbPages();
1377 $fontRenderCorrection = 0;
1378 if (in_array(
pdf_getPDFFont($outputlangs), array(
'freemono',
'DejaVuSans'))) {
1379 $fontRenderCorrection = 10;
1381 $pdf->MultiCell(18 + $fontRenderCorrection, 2, $pagination, 0,
'R', 0);
1384 if (!empty($watermark)) {
1385 pdf_watermark($pdf, $outputlangs, $page_hauteur, $page_largeur,
'mm', $watermark);
1388 return $marginwithfooter;
1408 if (!empty($linkedobjects)) {
1409 foreach ($linkedobjects as $linkedobject) {
1410 $reftoshow = $linkedobject[
"ref_title"].
' : '.$linkedobject[
"ref_value"];
1411 if (!empty($linkedobject[
"date_value"])) {
1412 $reftoshow .=
' / '.$linkedobject[
"date_value"];
1416 $pdf->SetXY($posx, $posy);
1417 $pdf->SetFont(
'',
'', (
float) $default_font_size - 2);
1418 $pdf->MultiCell($w, $h, $reftoshow,
'', $align);
1422 return $pdf->getY();
1442function pdf_writelinedesc(&$pdf,
$object, $i, $outputlangs, $w, $h, $posx, $posy, $hideref = 0, $hidedesc = 0, $issupplierline = 0, $align =
'J')
1444 global $db, $conf, $langs, $hookmanager;
1449 if (is_object($hookmanager)) {
1450 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1451 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1452 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1454 $parameters = array(
'pdf' => $pdf,
'i' => $i,
'outputlangs' => $outputlangs,
'w' => $w,
'h' => $h,
'posx' => $posx,
'posy' => $posy,
'hideref' => $hideref,
'hidedesc' => $hidedesc,
'issupplierline' => $issupplierline,
'special_code' => $special_code);
1456 $reshook = $hookmanager->executeHooks(
'pdf_writelinedesc', $parameters,
$object, $action);
1458 if (!empty($hookmanager->resPrint)) {
1459 $result .= $hookmanager->resPrint;
1462 if (empty($reshook)) {
1464 $labelproductservice = preg_replace(
'/(<img[^>]*src=")[^\"]*viewimage\.php[^\"]*modulepart=medias[^\"]*file=([^\"]*)/',
'\1file:/'.DOL_DATA_ROOT.
'/medias/\2\3', $labelproductservice, -1, $nbrep);
1471 $labelproductservice = preg_replace(
'/(<img[^>]*src=")([^"]*)(&)([^"]*")/',
'\1\2&\4', $labelproductservice, -1, $nbrep);
1474 $pdf->setListIndentWidth(5);
1475 $TMarginList = [
'ul' => [[
'h' => 0.1, ],[
'h' => 0.1, ]],
'li' => [[
'h' => 0.1, ],],];
1476 $pdf->setHtmlVSpace($TMarginList);
1480 $pdf->writeHTMLCell($w, $h, $posx, $posy, $outputlangs->convToOutputCharset($labelproductservice), 0, 1,
false,
true, $align,
true);
1481 $result .= $labelproductservice;
1499 global $db, $conf, $langs;
1501 $idprod = (!empty(
$object->lines[$i]->fk_product) ?
$object->lines[$i]->fk_product :
false);
1502 $label = (!empty(
$object->lines[$i]->label) ?
$object->lines[$i]->label : (!empty(
$object->lines[$i]->product_label) ?
$object->lines[$i]->product_label :
''));
1503 $product_barcode = (!empty(
$object->lines[$i]->product_barcode) ?
$object->lines[$i]->product_barcode :
"");
1504 $desc = (!empty(
$object->lines[$i]->desc) ?
$object->lines[$i]->desc : (!empty(
$object->lines[$i]->description) ?
$object->lines[$i]->description :
''));
1505 $ref_supplier = (!empty(
$object->lines[$i]->ref_supplier) ?
$object->lines[$i]->ref_supplier : (!empty(
$object->lines[$i]->ref_fourn) ?
$object->lines[$i]->ref_fourn :
''));
1506 $note = (!empty(
$object->lines[$i]->note) ?
$object->lines[$i]->note :
'');
1507 $dbatch = (!empty(
$object->lines[$i]->detail_batch) ?
$object->lines[$i]->detail_batch :
false);
1509 if ($issupplierline) {
1510 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
1513 include_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
1517 include_once DOL_DOCUMENT_ROOT .
'/product/class/productcustomerprice.class.php';
1522 $prodser->fetch($idprod);
1524 if (
getDolGlobalInt(
'MAIN_MULTILANGS') && ($outputlangs->defaultlang != $langs->defaultlang)) {
1525 $translatealsoifmodified = (
getDolGlobalString(
'MAIN_MULTILANG_TRANSLATE_EVEN_IF_MODIFIED'));
1533 $textwasnotmodified = ($label == $prodser->label);
1534 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"label"]) && ($textwasnotmodified || $translatealsoifmodified)) {
1535 $label = $prodser->multilangs[$outputlangs->defaultlang][
"label"];
1540 $textwasnotmodified =
false;
1544 $textwasnotmodified = ($desc == $prodser->description);
1546 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"description"])) {
1547 if ($textwasnotmodified) {
1548 $desc = str_replace($prodser->description, $prodser->multilangs[$outputlangs->defaultlang][
"description"], $desc);
1549 } elseif ($translatealsoifmodified) {
1550 $desc = $prodser->multilangs[$outputlangs->defaultlang][
"description"];
1555 $textwasnotmodified = ($note == $prodser->note_public);
1556 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"other"]) && ($textwasnotmodified || $translatealsoifmodified)) {
1557 $note = $prodser->multilangs[$outputlangs->defaultlang][
"other"];
1560 } elseif ((
$object->element ==
'facture' ||
$object->element ==
'facturefourn') && preg_match(
'/^\(DEPOSIT\).+/', $desc)) {
1561 $desc = str_replace(
'(DEPOSIT)', $outputlangs->trans(
'Deposit'), $desc);
1564 $libelleproduitservice =
'';
1567 $libelleproduitservice = $label;
1568 if (!empty($libelleproduitservice) &&
getDolGlobalString(
'PDF_BOLD_PRODUCT_LABEL')) {
1572 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1574 $libelleproduitservice =
'<b>'.$libelleproduitservice.
'</b>';
1581 $prodser->get_sousproduits_arbo();
1582 if (!empty($prodser->sousprods) && is_array($prodser->sousprods) && count($prodser->sousprods)) {
1583 $outputlangs->load(
'mrp');
1584 $tmparrayofsubproducts = reset($prodser->sousprods);
1587 if (isset(
$object->lines[$i]->qty) && !empty(
$object->lines[$i]->qty)) {
1588 $qtyText =
$object->lines[$i]->qty;
1589 } elseif (isset(
$object->lines[$i]->qty_shipped) && !empty(
$object->lines[$i]->qty_shipped)) {
1590 $qtyText =
$object->lines[$i]->qty;
1594 foreach ($tmparrayofsubproducts as $subprodval) {
1598 $outputlangs->trans(
'Qty').
':'.$qtyText.
' x '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1].
'= '.$outputlangs->trans(
'QtyTot').
':'.$subprodval[1] * $qtyText :
1599 $outputlangs->trans(
'Qty').
' '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1])
1603 foreach ($tmparrayofsubproducts as $subprodval) {
1605 dol_concatdesc($libelleproduitservice,
" * ".$subprodval[5].(($subprodval[5] && $subprodval[3]) ?
' - ' :
'').$subprodval[3]),
1607 $outputlangs->trans(
'Qty').
':'.$qtyText.
' x '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1].
'= '.$outputlangs->trans(
'QtyTot').
':'.$subprodval[1] * $qtyText :
1608 $outputlangs->trans(
'Qty').
' '.$outputlangs->trans(
'AssociatedProducts').
':'.$subprodval[1])
1615 if (isModEnabled(
'barcode') &&
getDolGlobalString(
'MAIN_GENERATE_DOCUMENTS_SHOW_PRODUCT_BARCODE') && !empty($product_barcode)) {
1616 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $outputlangs->trans(
"BarCode").
" ".$product_barcode);
1620 if (!empty($desc) && ($desc != $label)) {
1621 if ($desc ==
'(CREDIT_NOTE)' &&
$object->lines[$i]->fk_remise_except) {
1623 $discount->fetch(
$object->lines[$i]->fk_remise_except);
1624 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
1625 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromCreditNote", $sourceref);
1626 } elseif ($desc ==
'(DEPOSIT)' &&
$object->lines[$i]->fk_remise_except) {
1628 $discount->fetch(
$object->lines[$i]->fk_remise_except);
1629 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
1630 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromDeposit", $sourceref);
1633 $libelleproduitservice .=
' ('.dol_print_date($discount->datec,
'day',
'', $outputlangs).
')';
1635 } elseif ($desc ==
'(EXCESS RECEIVED)' &&
$object->lines[$i]->fk_remise_except) {
1637 $discount->fetch(
$object->lines[$i]->fk_remise_except);
1638 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessReceived", $discount->ref_facture_source);
1639 } elseif ($desc ==
'(EXCESS PAID)' &&
$object->lines[$i]->fk_remise_except) {
1641 $discount->fetch(
$object->lines[$i]->fk_remise_except);
1642 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessPaid", $discount->ref_invoice_supplier_source);
1646 if (!empty(
$object->element)) {
1647 $tmpkey =
'MAIN_DOCUMENTS_HIDE_DESCRIPTION_FOR_'.strtoupper(
$object->element);
1652 if (empty($hidedesc)) {
1654 $libelleproduitservice =
dol_concatdesc($desc, $libelleproduitservice);
1657 $libelleproduitservice = $desc;
1659 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desc);
1664 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desc);
1670 $prefix_prodserv =
"";
1673 if ($prodser->isService()) {
1674 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Service").
" ";
1676 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Product").
" ";
1680 if (empty($hideref)) {
1681 if ($issupplierline) {
1683 $ref_prodserv = $prodser->ref;
1684 if ($ref_supplier) {
1685 $ref_prodserv .= ($prodser->ref ?
' (' :
'').$outputlangs->transnoentitiesnoconv(
"SupplierRef").
' '.$ref_supplier.($prodser->ref ?
')' :
'');
1687 } elseif (
getDolGlobalInt(
'PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES') == 1) {
1688 $ref_prodserv = $ref_supplier;
1689 } elseif (
getDolGlobalInt(
'PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES') == 2) {
1690 $ref_prodserv = $ref_supplier.
' ('.$outputlangs->transnoentitiesnoconv(
"InternalRef").
' '.$prodser->ref.
')';
1693 $ref_prodserv = $prodser->ref;
1697 $filter = array(
'fk_product' => $idprod,
'fk_soc' =>
$object->socid);
1699 $nbCustomerPrices = $productCustomerPriceStatic->fetchAll(
'',
'', 1, 0, $filter);
1701 if ($nbCustomerPrices > 0) {
1702 $productCustomerPrice = $productCustomerPriceStatic->lines[0];
1704 if (!empty($productCustomerPrice->ref_customer)) {
1705 switch ($conf->global->PRODUIT_CUSTOMER_PRICES_PDF_REF_MODE) {
1707 $ref_prodserv = $productCustomerPrice->ref_customer;
1711 $ref_prodserv = $productCustomerPrice->ref_customer .
' (' . $outputlangs->transnoentitiesnoconv(
'InternalRef') .
' ' . $ref_prodserv .
')';
1715 $ref_prodserv = $ref_prodserv .
' (' . $outputlangs->transnoentitiesnoconv(
'RefCustomer') .
' ' . $productCustomerPrice->ref_customer .
')';
1722 if (!empty($libelleproduitservice) && !empty($ref_prodserv)) {
1723 $ref_prodserv .=
" - ";
1727 if (!empty($ref_prodserv) &&
getDolGlobalString(
'PDF_BOLD_PRODUCT_REF_AND_PERIOD')) {
1729 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1731 $ref_prodserv =
'<b>'.$ref_prodserv.
'</b>';
1734 $libelleproduitservice = $prefix_prodserv.$ref_prodserv.$libelleproduitservice;
1737 if (
getDolGlobalString(
'CATEGORY_ADD_DESC_INTO_DOC') && $idprod && isModEnabled(
'category')) {
1738 include_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
1741 $tblcateg = $categstatic->containing($idprod, Categorie::TYPE_PRODUCT);
1742 foreach ($tblcateg as $cate) {
1744 $desccateg = $cate->description;
1746 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desccateg);
1751 if (!empty(
$object->lines[$i]->date_start) || !empty(
$object->lines[$i]->date_end)) {
1755 if (
$object->lines[$i]->date_start &&
$object->lines[$i]->date_end) {
1756 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateFromTo',
dol_print_date(
$object->lines[$i]->date_start, $format,
false, $outputlangs),
dol_print_date(
$object->lines[$i]->date_end, $format,
false, $outputlangs)).
')';
1758 if (
$object->lines[$i]->date_start && !
$object->lines[$i]->date_end) {
1759 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateFrom',
dol_print_date(
$object->lines[$i]->date_start, $format,
false, $outputlangs)).
')';
1761 if (!
$object->lines[$i]->date_start &&
$object->lines[$i]->date_end) {
1762 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateUntil',
dol_print_date(
$object->lines[$i]->date_end, $format,
false, $outputlangs)).
')';
1767 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1769 $libelleproduitservice .=
'<br><b style="color:#333666;" ><em>'.$period.
'</em></b>';
1771 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $period);
1777 if (!empty($dbatch)) {
1782 include_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
1783 include_once DOL_DOCUMENT_ROOT.
'/product/class/productbatch.class.php';
1788 foreach ($dbatch as $detail) {
1790 if ($detail->eatby) {
1791 $dte[] = $outputlangs->transnoentitiesnoconv(
'printEatby',
dol_print_date($detail->eatby, $format,
false, $outputlangs));
1793 if ($detail->sellby) {
1794 $dte[] = $outputlangs->transnoentitiesnoconv(
'printSellby',
dol_print_date($detail->sellby, $format,
false, $outputlangs));
1796 if ($detail->batch) {
1797 $dte[] = $outputlangs->transnoentitiesnoconv(
'printBatch', $detail->batch);
1799 $dte[] = $outputlangs->transnoentitiesnoconv(
'printQty', $detail->qty);
1802 if (
$object->element ==
'shipping' && $detail->fk_origin_stock > 0 &&
getDolGlobalInt(
'PRODUCTBATCH_SHOW_WAREHOUSE_ON_SHIPMENT')) {
1803 $resproductbatch = $tmpproductbatch->fetch($detail->fk_origin_stock);
1804 if ($resproductbatch > 0) {
1805 $reswarehouse = $tmpwarehouse->fetch($tmpproductbatch->warehouseid);
1806 if ($reswarehouse > 0) {
1807 $dte[] = $tmpwarehouse->ref;
1812 $libelleproduitservice .=
"__N__ ".implode(
" - ", $dte);
1822 $libelleproduitservice = preg_replace(
'/__N__/',
'<br>', $libelleproduitservice);
1824 $libelleproduitservice = preg_replace(
'/__N__/',
"\n", $libelleproduitservice);
1828 return $libelleproduitservice;
1842 global $hookmanager;
1847 if (is_object($hookmanager)) {
1848 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1849 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1850 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1852 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
1854 $reshook = $hookmanager->executeHooks(
'pdf_getlinenum', $parameters,
$object, $action);
1855 $result .= $hookmanager->resPrint;
1857 if (empty($reshook)) {
1875 global $hookmanager;
1880 if (is_object($hookmanager)) {
1881 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1882 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1883 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1885 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
1887 $reshook = $hookmanager->executeHooks(
'pdf_getlineref', $parameters,
$object, $action);
1888 $result .= $hookmanager->resPrint;
1890 if (empty($reshook)) {
1908 global $hookmanager;
1913 if (is_object($hookmanager)) {
1914 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1915 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1916 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1918 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
1920 $reshook = $hookmanager->executeHooks(
'pdf_getlineref_supplier', $parameters,
$object, $action);
1921 $result .= $hookmanager->resPrint;
1923 if (empty($reshook)) {
1940 global $conf, $hookmanager, $mysoc;
1945 if (is_object($hookmanager)) {
1946 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
1947 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
1948 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
1950 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
1952 $reshook = $hookmanager->executeHooks(
'pdf_getlinevatrate', $parameters,
$object, $action);
1954 if (!empty($hookmanager->resPrint)) {
1955 $result .= $hookmanager->resPrint;
1958 if (empty($reshook)) {
1959 if (empty($hidedetails) || $hidedetails > 1) {
1964 if (
$object->lines[$i]->total_localtax1 != 0) {
1965 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
1970 $tmpresult .=
vatrate((
string) abs(
$object->lines[$i]->localtax1_tx), 0);
1974 if (
$object->lines[$i]->total_localtax2 != 0) {
1975 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
1980 $tmpresult .=
vatrate((
string) abs(
$object->lines[$i]->localtax2_tx), 0);
1985 $result .= $tmpresult;
2002 global $conf, $hookmanager;
2012 if (is_object($hookmanager)) {
2013 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2014 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2015 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2017 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2019 $reshook = $hookmanager->executeHooks(
'pdf_getlineupexcltax', $parameters,
$object, $action);
2021 if (!empty($hookmanager->resPrint)) {
2022 $result .= $hookmanager->resPrint;
2025 if (empty($reshook)) {
2026 if (empty($hidedetails) || $hidedetails > 1) {
2027 $subprice = (isModEnabled(
"multicurrency") &&
$object->multicurrency_tx != 1 ?
$object->lines[$i]->multicurrency_subprice :
$object->lines[$i]->subprice);
2028 $result .=
price($sign * $subprice, 0, $outputlangs);
2045 global $hookmanager, $conf;
2055 if (is_object($hookmanager)) {
2056 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2057 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2058 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2060 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2062 $reshook = $hookmanager->executeHooks(
'pdf_getlineupwithtax', $parameters,
$object, $action);
2064 if (!empty($hookmanager->resPrint)) {
2065 $result .= $hookmanager->resPrint;
2068 if (empty($reshook)) {
2069 if (empty($hidedetails) || $hidedetails > 1) {
2070 $result .=
price($sign * ((
$object->lines[$i]->subprice) + (
$object->lines[$i]->subprice) * (
$object->lines[$i]->tva_tx) / 100), 0, $outputlangs);
2087 global $hookmanager;
2092 if (is_object($hookmanager)) {
2093 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2094 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2095 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2097 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2099 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty', $parameters,
$object, $action);
2101 if (!empty($hookmanager->resPrint)) {
2102 $result = $hookmanager->resPrint;
2105 if (empty($reshook)) {
2106 if (
$object->lines[$i]->special_code == 3) {
2109 if (empty($hidedetails) || $hidedetails > 1) {
2110 $result .=
$object->lines[$i]->qty;
2127 global $hookmanager;
2132 if (is_object($hookmanager)) {
2133 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2134 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2135 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2137 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2139 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_asked', $parameters,
$object, $action);
2141 if (!empty($hookmanager->resPrint)) {
2142 $result .= $hookmanager->resPrint;
2145 if (empty($reshook)) {
2146 if (
$object->lines[$i]->special_code == 3) {
2149 if (empty($hidedetails) || $hidedetails > 1) {
2150 $result .=
$object->lines[$i]->qty_asked;
2167 global $hookmanager;
2172 if (is_object($hookmanager)) {
2173 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2174 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2175 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2177 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2179 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_shipped', $parameters,
$object, $action);
2181 if (!empty($hookmanager->resPrint)) {
2182 $result .= $hookmanager->resPrint;
2185 if (empty($reshook)) {
2186 if (
$object->lines[$i]->special_code == 3) {
2189 if (empty($hidedetails) || $hidedetails > 1) {
2190 $result .=
$object->lines[$i]->qty_shipped;
2207 global $hookmanager;
2212 if (is_object($hookmanager)) {
2213 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2214 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2215 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2217 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2219 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_keeptoship', $parameters,
$object, $action);
2221 if (!empty($hookmanager->resPrint)) {
2222 $result .= $hookmanager->resPrint;
2225 if (empty($reshook)) {
2226 if (
$object->lines[$i]->special_code == 3) {
2229 if (empty($hidedetails) || $hidedetails > 1) {
2230 $result .= (
$object->lines[$i]->qty_asked -
$object->lines[$i]->qty_shipped);
2247 global $hookmanager, $langs;
2252 if (is_object($hookmanager)) {
2253 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2254 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2255 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2257 $parameters = array(
2259 'outputlangs' => $outputlangs,
2260 'hidedetails' => $hidedetails,
2261 'special_code' => $special_code
2264 $reshook = $hookmanager->executeHooks(
'pdf_getlineunit', $parameters,
$object, $action);
2266 if (!empty($hookmanager->resPrint)) {
2267 $result .= $hookmanager->resPrint;
2270 if (empty($reshook)) {
2271 if (empty($hidedetails) || $hidedetails > 1) {
2272 $result .= $langs->transnoentitiesnoconv(
$object->lines[$i]->getLabelOfUnit(
'short'));
2290 global $hookmanager;
2292 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
2297 if (is_object($hookmanager)) {
2298 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2299 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2300 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2302 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2304 $reshook = $hookmanager->executeHooks(
'pdf_getlineremisepercent', $parameters,
$object, $action);
2306 if (!empty($hookmanager->resPrint)) {
2307 $result .= $hookmanager->resPrint;
2310 if (empty($reshook)) {
2311 if (
$object->lines[$i]->special_code == 3) {
2314 if (empty($hidedetails) || $hidedetails > 1) {
2333 if (empty($hookmanager)) {
2334 global $hookmanager;
2341 if (is_object($hookmanager)) {
2342 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2343 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2344 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2346 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2348 $reshook = $hookmanager->executeHooks(
'pdf_getlineprogress', $parameters,
$object, $action);
2350 if (!empty($hookmanager->resPrint)) {
2351 return $hookmanager->resPrint;
2354 if (empty($reshook)) {
2355 if (
$object->lines[$i]->special_code == 3) {
2358 if (empty($hidedetails) || $hidedetails > 1) {
2361 if (method_exists(
$object->lines[$i],
'get_prev_progress')) {
2362 $prev_progress =
$object->lines[$i]->get_prev_progress(
$object->id);
2364 $result = round(
$object->lines[$i]->situation_percent - $prev_progress, 1).
'%';
2366 $result = round(
$object->lines[$i]->situation_percent, 1).
'%';
2384 global $conf, $hookmanager;
2394 if (is_object($hookmanager)) {
2395 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2396 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2397 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2399 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code,
'sign' => $sign);
2401 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalexcltax', $parameters,
$object, $action);
2403 if (!empty($hookmanager->resPrint)) {
2404 $result .= $hookmanager->resPrint;
2407 if (empty($reshook)) {
2408 if (!empty(
$object->lines[$i]) &&
$object->lines[$i]->special_code == 3) {
2409 $result .= $outputlangs->transnoentities(
"Option");
2410 } elseif (empty($hidedetails) || $hidedetails > 1) {
2411 $total_ht = (isModEnabled(
"multicurrency") &&
$object->multicurrency_tx != 1 ?
$object->lines[$i]->multicurrency_total_ht :
$object->lines[$i]->total_ht);
2412 if (!empty(
$object->lines[$i]->situation_percent) &&
$object->lines[$i]->situation_percent > 0) {
2416 if (method_exists(
$object->lines[$i],
'get_prev_progress')) {
2417 $prev_progress =
$object->lines[$i]->get_prev_progress(
$object->id);
2418 $progress = (
$object->lines[$i]->situation_percent - $prev_progress) / 100;
2420 $result .=
price($sign * ($total_ht / (
$object->lines[$i]->situation_percent / 100)) * $progress, 0, $outputlangs);
2422 $result .=
price($sign * $total_ht, 0, $outputlangs);
2440 global $hookmanager, $conf;
2450 if (is_object($hookmanager)) {
2451 $special_code = empty(
$object->lines[$i]->special_code) ?
'' :
$object->lines[$i]->special_code;
2452 if (!empty(
$object->lines[$i]->fk_parent_line) &&
$object->lines[$i]->fk_parent_line > 0) {
2453 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2455 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2457 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalwithtax', $parameters,
$object, $action);
2459 if (!empty($hookmanager->resPrint)) {
2460 $result .= $hookmanager->resPrint;
2463 if (empty($reshook)) {
2464 if (
$object->lines[$i]->special_code == 3) {
2465 $result .= $outputlangs->transnoentities(
"Option");
2466 } elseif (empty($hidedetails) || $hidedetails > 1) {
2467 $total_ttc = (isModEnabled(
"multicurrency") &&
$object->multicurrency_tx != 1 ?
$object->lines[$i]->multicurrency_total_ttc :
$object->lines[$i]->total_ttc);
2468 if (isset(
$object->lines[$i]->situation_percent) &&
$object->lines[$i]->situation_percent > 0) {
2472 if (method_exists(
$object->lines[$i],
'get_prev_progress')) {
2473 $prev_progress =
$object->lines[$i]->get_prev_progress(
$object->id);
2474 $progress = (
$object->lines[$i]->situation_percent - $prev_progress) / 100;
2476 $result .=
price($sign * ($total_ttc / (
$object->lines[$i]->situation_percent / 100)) * $progress, 0, $outputlangs);
2478 $result .=
price($sign * $total_ttc, 0, $outputlangs);
2495 global $db, $hookmanager;
2497 $linkedobjects = array();
2501 foreach (
$object->linkedObjects as $objecttype => $objects) {
2502 if ($objecttype ==
'facture') {
2504 } elseif ($objecttype ==
'propal' || $objecttype ==
'supplier_proposal') {
2505 '@phan-var-force array<Propal|SupplierProposal> $objects';
2506 $outputlangs->load(
'propal');
2508 foreach ($objects as $elementobject) {
2509 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefProposal");
2510 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2511 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DatePropal");
2512 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
2514 } elseif ($objecttype ==
'commande' || $objecttype ==
'supplier_order') {
2515 '@phan-var-force array<Commande|CommandeFournisseur> $objects';
2516 $outputlangs->load(
'orders');
2519 if (empty(
$object->context[
'DolPublicNoteAppendedGetLinkedObjects'])) {
2521 foreach ($objects as $elementobject) {
2522 $object->note_public =
dol_concatdesc(
$object->note_public, $outputlangs->transnoentities($elementobject->ref).(empty($elementobject->ref_client) ?
'' :
' ('.$elementobject->ref_client.
')').(empty($elementobject->ref_supplier) ?
'' :
' ('.$elementobject->ref_supplier.
')').
' ');
2526 } elseif (count($objects) == 1) {
2527 $elementobject = array_shift($objects);
2528 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder");
2529 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref).(!empty($elementobject->ref_client) ?
' ('.$elementobject->ref_client.
')' :
'').(!empty($elementobject->ref_supplier) ?
' ('.$elementobject->ref_supplier.
')' :
'');
2530 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"OrderDate");
2531 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
2533 } elseif ($objecttype ==
'contrat') {
2534 '@phan-var-force Contrat[] $objects';
2535 $outputlangs->load(
'contracts');
2536 foreach ($objects as $elementobject) {
2537 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefContract");
2538 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2539 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DateContract");
2540 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date_contrat,
'day',
'', $outputlangs);
2542 } elseif ($objecttype ==
'fichinter') {
2543 '@phan-var-force Fichinter[] $objects';
2544 $outputlangs->load(
'interventions');
2545 foreach ($objects as $elementobject) {
2546 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"InterRef");
2547 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2548 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"InterDate");
2549 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->datec,
'day',
'', $outputlangs);
2551 } elseif ($objecttype ==
'shipping') {
2552 '@phan-var-force Expedition[] $objects';
2553 $outputlangs->loadLangs(array(
"orders",
"sendings"));
2555 if (count($objects) > 1) {
2559 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
2560 $refListsTxt .= $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending").
' :';
2562 $refListsTxt .= $outputlangs->transnoentities(
"RefSending").
' :';
2565 foreach ($objects as $elementobject) {
2566 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
2567 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
2568 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
2569 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2571 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
2577 $refListsTxt .= (!empty($refListsTxt) ?
' ' :
'');
2578 if (! is_object($order)) {
2579 $refListsTxt .= $outputlangs->transnoentities($elementobject->ref);
2581 $refListsTxt .= $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
'');
2582 $refListsTxt .=
' / '.$outputlangs->transnoentities($elementobject->ref);
2586 if (empty(
$object->context[
'DolPublicNoteAppendedGetLinkedObjects'])) {
2589 } elseif (count($objects) == 1) {
2590 $elementobject = array_shift($objects);
2593 if (empty(
$object->linkedObjects[
'commande']) &&
$object->element !=
'commande') {
2594 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
2595 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
2596 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2598 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
2605 if (! is_object($order)) {
2606 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefSending");
2607 if (empty($linkedobjects[$objecttype][
'ref_value'])) {
2608 $linkedobjects[$objecttype][
'ref_value'] =
'';
2610 $linkedobjects[$objecttype][
'ref_value'] .=
' / ';
2612 $linkedobjects[$objecttype][
'ref_value'] .= $outputlangs->transnoentities($elementobject->ref);
2613 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
2615 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending");
2616 if (empty($linkedobjects[$objecttype][
'ref_value'])) {
2617 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
'');
2619 $linkedobjects[$objecttype][
'ref_value'] .=
' / '.$outputlangs->transnoentities($elementobject->ref);
2620 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
2626 $object->context[
'DolPublicNoteAppendedGetLinkedObjects'] = 1;
2629 if (is_object($hookmanager)) {
2630 $parameters = array(
'linkedobjects' => $linkedobjects,
'outputlangs' => $outputlangs);
2632 $hookmanager->executeHooks(
'pdf_getLinkedObjects', $parameters,
$object, $action);
2633 if (!empty($hookmanager->resArray)) {
2634 $linkedobjects = $hookmanager->resArray;
2638 return $linkedobjects;
2653 $maxheight =
getDolGlobalInt(
'MAIN_DOCUMENTS_WITH_PICTURE_HEIGHT', 32);
2654 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
2658 if ($tmp[
'height']) {
2659 $width = (int) round($maxheight * $tmp[
'width'] / $tmp[
'height']);
2660 if ($width > $maxwidth) {
2662 $height = (int) round($maxwidth * $tmp[
'height'] / $tmp[
'width']);
2664 $height = $maxheight;
2667 return array(
'width' => $width,
'height' => $height);
2681 global $conf, $hookmanager;
2687 if (
$object->lines[$i]->special_code == 3) {
2688 return $outputlangs->transnoentities(
"Option");
2690 if (is_object($hookmanager)) {
2691 $special_code =
$object->lines[$i]->special_code;
2692 if (!empty(
$object->lines[$i]->fk_parent_line)) {
2693 $special_code =
$object->getSpecialCode(
$object->lines[$i]->fk_parent_line);
2696 $parameters = array(
2698 'outputlangs' => $outputlangs,
2699 'hidedetails' => $hidedetails,
2700 'special_code' => $special_code
2705 if ($hookmanager->executeHooks(
'getlinetotalremise', $parameters,
$object, $action) > 0) {
2706 if (isset($hookmanager->resArray[
'linetotalremise'])) {
2707 return $hookmanager->resArray[
'linetotalremise'];
2709 return (
float) $hookmanager->resPrint;
2714 if (empty($hidedetails) || $hidedetails > 1) {
2715 return $sign * ((
$object->lines[$i]->subprice * (float)
$object->lines[$i]->qty) -
$object->lines[$i]->total_ht);
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Class to manage categories.
Class to manage customers orders.
Class to manage absolute discounts.
Class to manage warehouses.
File of class to manage predefined price products or services by customer.
Class to manage predefined suppliers products.
Class to manage products or services.
Manage record for batch number management.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
getState($id, $withcode='0', $dbtouse=null, $withregion=0, $outputlangs=null, $entconv=1)
Return state translated from an id.
getFormeJuridiqueLabel($code)
Return the name translated of juridical status.
dol_print_reduction($reduction, $langs)
Returns formatted reduction.
dol_getDefaultFormat($outputlangs=null)
Try to guess default paper format according to language into $langs.
dol_html_entity_decode($a, $b, $c='UTF-8', $keepsomeentities=0)
Replace html_entity_decode functions to manage errors.
vatrate($rate, $addpercent=false, $info_bits=0, $usestarfornpr=0, $html=0)
Return a string with VAT rate label formatted for view output Used into pdf and HTML pages.
dol_format_address($object, $withcountry=0, $sep="\n", $outputlangs=null, $mode=0, $extralangcode='')
Return a formatted address (part address/zip/town/state) according to country rules.
dol_string_nohtmltag($stringtoclean, $removelinefeed=1, $pagecodeto='UTF-8', $strip_tags=0, $removedoublespaces=1)
Clean a string from all HTML tags and entities.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dol_concatdesc($text1, $text2, $forxml=false, $invert=false)
Concat 2 descriptions with a new line between them (second operand after first one with appropriate n...
complete_substitutions_array(&$substitutionarray, $outputlangs, $object=null, $parameters=null, $callfunc="completesubstitutionarray")
Complete the $substitutionarray with more entries coming from external module that had set the "subst...
make_substitutions($text, $substitutionarray, $outputlangs=null, $converttextinhtmlifnecessary=0)
Make substitution into a text string, replacing keys with vals from $substitutionarray (oldval=>newva...
dol_textishtml($msg, $option=0)
Return if a text is a html content.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
complete_head_from_modules($conf, $langs, $object, &$head, &$h, $type, $mode='add', $filterorigmodule='')
Complete or removed entries into a head array (used to build tabs).
dol_htmlentitiesbr($stringtoencode, $nl2brmode=0, $pagecodefrom='UTF-8', $removelasteolbr=1)
This function is called to encode a string into a HTML string but differs from htmlentities because a...
getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $object=null, $include=null)
Return array of possible common substitutions.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_mkdir($dir, $dataroot='', $newmask='')
Creation of a directory (this can create recursive subdir)
dol_getImageSize($file, $url=false)
Return size of image file on disk (Supported extensions are gif, jpg, png, bmp and webp)
pdf_getSizeForImage($realpath)
Return dimensions to use for images onto PDF checking that width and height are not higher than maxim...
pdf_writelinedesc(&$pdf, $object, $i, $outputlangs, $w, $h, $posx, $posy, $hideref=0, $hidedesc=0, $issupplierline=0, $align='J')
Output line description into PDF.
pdf_getlinetotalexcltax($object, $i, $outputlangs, $hidedetails=0)
Return line total excluding tax.
pdf_getlinedesc($object, $i, $outputlangs, $hideref=0, $hidedesc=0, $issupplierline=0)
Return line description translated in outputlangs and encoded into htmlentities and with
pdfGetLineTotalDiscountAmount($object, $i, $outputlangs, $hidedetails=0)
Return line total amount discount.
pdf_getFormat($outputlangs=null, $mode='setup')
Return array with format properties of default PDF format.
pdf_getPDFFontSize($outputlangs)
Return font size to use for PDF generation.
pdf_getlineqty_shipped($object, $i, $outputlangs, $hidedetails=0)
Return line quantity shipped.
pdf_getlinenum($object, $i, $outputlangs, $hidedetails=0)
Return line num.
pdf_getEncryption($pathoffile)
Return if pdf file is protected/encrypted.
pdf_getlineupwithtax($object, $i, $outputlangs, $hidedetails=0)
Return line unit price including tax.
pdf_getLinkedObjects(&$object, $outputlangs)
Return linked objects to use for document generation.
pdf_getHeightForLogo($logo, $url=false)
Return height to use for Logo onto PDF.
pdf_getlineref_supplier($object, $i, $outputlangs, $hidedetails=0)
Return line ref_supplier.
pdf_getlinetotalwithtax($object, $i, $outputlangs, $hidedetails=0)
Return line total including tax.
pdf_pagefoot(&$pdf, $outputlangs, $paramfreetext, $fromcompany, $marge_basse, $marge_gauche, $page_hauteur, $object, $showdetails=0, $hidefreetext=0, $page_largeur=0, $watermark='')
Show footer of page for PDF generation.
pdf_getlineupexcltax($object, $i, $outputlangs, $hidedetails=0)
Return line unit price excluding tax.
pdf_getlineprogress($object, $i, $outputlangs, $hidedetails=0, $hookmanager=null)
Return line percent.
pdf_getlinevatrate($object, $i, $outputlangs, $hidedetails=0)
Return line vat rate.
pdfGetHeightForHtmlContent(&$pdf, $htmlcontent)
Function to try to calculate height of a HTML Content.
pdf_admin_prepare_head()
Return array head with list of tabs to view object information.
pdf_pagehead(&$pdf, $outputlangs, $page_height)
Show header of page for PDF generation.
pdf_writeLinkedObjects(&$pdf, $object, $outputlangs, $posx, $posy, $w, $h, $align, $default_font_size)
Show linked objects for PDF generation.
pdf_bank(&$pdf, $outputlangs, $curx, $cury, $account, $onlynumber=0, $default_font_size=10)
Show bank information for PDF generation.
pdf_getPDFFont($outputlangs)
Return font name to use for PDF generation.
pdf_getlineqty_keeptoship($object, $i, $outputlangs, $hidedetails=0)
Return line keep to ship quantity.
pdf_getlineref($object, $i, $outputlangs, $hidedetails=0)
Return line product ref.
pdf_build_address($outputlangs, $sourcecompany, $targetcompany='', $targetcontact='', $usecontact=0, $mode='source', $object=null)
Return a string with full address formatted for output on PDF documents.
pdf_getlineunit($object, $i, $outputlangs, $hidedetails=0)
Return line unit.
pdf_getlineremisepercent($object, $i, $outputlangs, $hidedetails=0)
Return line remise percent.
pdf_getlineqty_asked($object, $i, $outputlangs, $hidedetails=0)
Return line quantity asked.
pdf_getlineqty($object, $i, $outputlangs, $hidedetails=0)
Return line quantity.
pdf_getSubstitutionArray($outputlangs, $exclude=null, $object=null, $onlykey=0, $include=null)
Return array of possible substitutions for PDF content (without external module substitutions).
pdf_getInstance($format='', $metric='mm', $pagetype='P')
Return a PDF instance object.
pdfBuildThirdpartyName($thirdparty, Translate $outputlangs, $includealias=0)
Returns the name of the thirdparty.
pdf_watermark(&$pdf, $outputlangs, $h, $w, $unit, $text)
Add a draft watermark on PDF files.