39include_once DOL_DOCUMENT_ROOT.
'/core/lib/signature.lib.php';
49 global $langs, $conf, $user;
54 $head[$h][0] = DOL_URL_ROOT.
'/admin/pdf.php';
55 $head[$h][1] = $langs->trans(
"Parameters");
56 $head[$h][2] =
'general';
65 if (isModEnabled(
"propal") || isModEnabled(
'facture') || isModEnabled(
'reception')) {
66 $head[$h][0] = DOL_URL_ROOT.
'/admin/pdf_other.php';
67 $head[$h][1] = $langs->trans(
"Others");
68 $head[$h][2] =
'other';
87 global $conf, $db, $langs;
89 dol_syslog(
"pdf_getFormat Get paper format with mode=".$mode.
" MAIN_PDF_FORMAT=".(empty($conf->global->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'));
96 if ($mode ==
'auto' || empty($conf->global->MAIN_PDF_FORMAT) || $conf->global->MAIN_PDF_FORMAT ==
'auto') {
97 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
100 $pdfformat = $conf->global->MAIN_PDF_FORMAT;
103 $sql =
"SELECT code, label, width, height, unit FROM ".MAIN_DB_PREFIX.
"c_paper_format";
104 $sql .=
" WHERE code = '".$db->escape($pdfformat).
"'";
105 $resql = $db->query($sql);
107 $obj = $db->fetch_object($resql);
109 $width = (int) $obj->width;
110 $height = (int) $obj->height;
116 return array(
'width'=>$width,
'height'=>$height,
'unit'=>$unit);
132 if (!defined(
'K_TCPDF_EXTERNAL_CONFIG')) {
133 define(
'K_TCPDF_EXTERNAL_CONFIG', 1);
134 define(
'K_PATH_CACHE', DOL_DATA_ROOT.
'/admin/temp/');
135 define(
'K_PATH_URL_CACHE', DOL_DATA_ROOT.
'/admin/temp/');
137 define(
'K_BLANK_IMAGE',
'_blank.png');
138 define(
'PDF_PAGE_FORMAT',
'A4');
139 define(
'PDF_PAGE_ORIENTATION',
'P');
140 define(
'PDF_CREATOR',
'TCPDF');
141 define(
'PDF_AUTHOR',
'TCPDF');
142 define(
'PDF_HEADER_TITLE',
'TCPDF Example');
143 define(
'PDF_HEADER_STRING',
"by Dolibarr ERP CRM");
144 define(
'PDF_UNIT',
'mm');
145 define(
'PDF_MARGIN_HEADER', 5);
146 define(
'PDF_MARGIN_FOOTER', 10);
147 define(
'PDF_MARGIN_TOP', 27);
148 define(
'PDF_MARGIN_BOTTOM', 25);
149 define(
'PDF_MARGIN_LEFT', 15);
150 define(
'PDF_MARGIN_RIGHT', 15);
151 define(
'PDF_FONT_NAME_MAIN',
'helvetica');
152 define(
'PDF_FONT_SIZE_MAIN', 10);
153 define(
'PDF_FONT_NAME_DATA',
'helvetica');
154 define(
'PDF_FONT_SIZE_DATA', 8);
155 define(
'PDF_FONT_MONOSPACED',
'courier');
156 define(
'PDF_IMAGE_SCALE_RATIO', 1.25);
157 define(
'HEAD_MAGNIFICATION', 1.1);
158 define(
'K_CELL_HEIGHT_RATIO', 1.25);
159 define(
'K_TITLE_MAGNIFICATION', 1.3);
160 define(
'K_SMALL_RATIO', 2 / 3);
161 define(
'K_THAI_TOPCHARS',
true);
162 define(
'K_TCPDF_CALLS_IN_HTML',
true);
163 if (!empty($conf->global->TCPDF_THROW_ERRORS_INSTEAD_OF_DIE)) {
164 define(
'K_TCPDF_THROW_EXCEPTION_ERROR',
true);
166 define(
'K_TCPDF_THROW_EXCEPTION_ERROR',
false);
171 require_once TCPDF_PATH.
'tcpdf.php';
174 if (empty($conf->global->MAIN_DISABLE_TCPDI)) {
175 require_once TCPDI_PATH.
'tcpdi.php';
183 if (!empty($conf->global->PDF_USE_A)) {
184 $pdfa = $conf->global->PDF_USE_A;
187 if (class_exists(
'TCPDI')) {
188 $pdf =
new TCPDI($pagetype, $metric, $format,
true,
'UTF-8',
false, $pdfa);
190 $pdf =
new TCPDF($pagetype, $metric, $format,
true,
'UTF-8',
false, $pdfa);
194 if (!empty($conf->global->PDF_SECURITY_ENCRYPTION)) {
208 $pdfrights = (!empty($conf->global->PDF_SECURITY_ENCRYPTION_RIGHTS) ?json_decode($conf->global->PDF_SECURITY_ENCRYPTION_RIGHTS,
true) : array(
'modify',
'copy'));
211 $pdfuserpass = (!empty($conf->global->PDF_SECURITY_ENCRYPTION_USERPASS) ? $conf->global->PDF_SECURITY_ENCRYPTION_USERPASS :
'');
214 $pdfownerpass = (!empty($conf->global->PDF_SECURITY_ENCRYPTION_OWNERPASS) ? $conf->global->PDF_SECURITY_ENCRYPTION_OWNERPASS :
null);
217 $encstrength = (!empty($conf->global->PDF_SECURITY_ENCRYPTION_STRENGTH) ? $conf->global->PDF_SECURITY_ENCRYPTION_STRENGTH : 0);
221 $pubkeys = (!empty($conf->global->PDF_SECURITY_ENCRYPTION_PUBKEYS) ?json_decode($conf->global->PDF_SECURITY_ENCRYPTION_PUBKEYS,
true) :
null);
223 $pdf->SetProtection($pdfrights, $pdfuserpass, $pdfownerpass, $encstrength, $pubkeys);
237 require_once TCPDF_PATH.
'tcpdf_parser.php';
239 $isencrypted =
false;
241 $content = file_get_contents($pathoffile);
244 @($parser =
new TCPDF_PARSER(ltrim($content)));
245 list($xref, $data) = $parser->getParsedData();
249 if (isset($xref[
'trailer'][
'encrypt'])) {
270 if (!empty($conf->global->MAIN_PDF_FORCE_FONT)) {
271 return $conf->global->MAIN_PDF_FORCE_FONT;
275 if (class_exists(
'TCPDF')) {
276 if ($outputlangs->trans(
'FONTFORPDF') !=
'FONTFORPDF') {
277 $font = $outputlangs->trans(
'FONTFORPDF');
294 if (class_exists(
'TCPDF')) {
295 if ($outputlangs->trans(
'FONTSIZEFORPDF') !=
'FONTSIZEFORPDF') {
296 $size = (int) $outputlangs->trans(
'FONTSIZEFORPDF');
299 if (!empty($conf->global->MAIN_PDF_FORCE_FONT_SIZE)) {
300 $size = $conf->global->MAIN_PDF_FORCE_FONT_SIZE;
317 $height = (empty($conf->global->MAIN_DOCUMENTS_LOGO_HEIGHT) ? 20 : $conf->global->MAIN_DOCUMENTS_LOGO_HEIGHT);
319 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
321 if ($tmp[
'height']) {
322 $width = round($height * $tmp[
'width'] / $tmp[
'height']);
323 if ($width > $maxwidth) {
324 $height = $height * $maxwidth / $width;
342 $pdf->startTransaction();
344 $start_y = $pdf->GetY();
346 $start_page = $pdf->getPage();
348 $pdf->writeHTMLCell(0, 0, 0, $start_y, $htmlcontent, 0, 1,
false,
true,
'J',
true);
350 $end_y = $pdf->GetY();
351 $end_page = $pdf->getPage();
354 if ($end_page == $start_page) {
355 $height = $end_y - $start_y;
357 for ($page = $start_page; $page <= $end_page; ++$page) {
358 $pdf->setPage($page);
359 $tmpm = $pdf->getMargins();
360 $tMargin = $tmpm[
'top'];
361 if ($page == $start_page) {
363 $height = $pdf->getPageHeight() - $start_y - $pdf->getBreakMargin();
364 } elseif ($page == $end_page) {
366 $height = $end_y - $tMargin;
368 $height = $pdf->getPageHeight() - $tMargin - $pdf->getBreakMargin();
373 $pdf = $pdf->rollbackTransaction();
394 if ($thirdparty instanceof
Societe) {
395 $socname = $thirdparty->name;
396 if (($includealias ||
getDolGlobalInt(
'PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME')) && !empty($thirdparty->name_alias)) {
398 $socname = $thirdparty->name_alias.
" - ".$thirdparty->name;
400 $socname = $thirdparty->name.
" - ".$thirdparty->name_alias;
403 } elseif ($thirdparty instanceof
Contact) {
404 if ($thirdparty->socid > 0) {
405 $thirdparty->fetch_thirdparty();
406 $socname = $thirdparty->thirdparty->name;
407 if (($includealias ||
getDolGlobalInt(
'PDF_INCLUDE_ALIAS_IN_THIRDPARTY_NAME')) && !empty($thirdparty->thirdparty->name_alias)) {
409 $socname = $thirdparty->thirdparty->name_alias.
" - ".$thirdparty->thirdparty->name;
411 $socname = $thirdparty->thirdparty->name.
" - ".$thirdparty->thirdparty->name_alias;
416 throw new InvalidArgumentException(
'Parameter 1 $thirdparty is not a Societe nor Contact');
419 return $outputlangs->convToOutputCharset($socname);
435function pdf_build_address($outputlangs, $sourcecompany, $targetcompany =
'', $targetcontact =
'', $usecontact = 0, $mode =
'source', $object =
null)
437 global $conf, $hookmanager;
439 if ($mode ==
'source' && !is_object($sourcecompany)) {
442 if ($mode ==
'target' && !is_object($targetcompany)) {
446 if (!empty($sourcecompany->state_id) && empty($sourcecompany->state)) {
447 $sourcecompany->state =
getState($sourcecompany->state_id);
449 if (!empty($targetcompany->state_id) && empty($targetcompany->state)) {
450 $targetcompany->state =
getState($targetcompany->state_id);
455 if (is_object($hookmanager)) {
456 $parameters = array(
'sourcecompany' => &$sourcecompany,
'targetcompany' => &$targetcompany,
'targetcontact' => &$targetcontact,
'outputlangs' => $outputlangs,
'mode' => $mode,
'usecontact' => $usecontact);
458 $reshook = $hookmanager->executeHooks(
'pdf_build_address', $parameters, $object, $action);
459 $stringaddress .= $hookmanager->resPrint;
461 if (empty($reshook)) {
462 if ($mode ==
'source') {
464 if (isset($targetcompany->country_code) && !empty($sourcecompany->country_code) && ($targetcompany->country_code != $sourcecompany->country_code)) {
468 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($sourcecompany, $withCountry,
"\n", $outputlangs)).
"\n";
470 if (empty($conf->global->MAIN_PDF_DISABLESOURCEDETAILS)) {
472 if ($sourcecompany->phone) {
473 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"PhoneShort").
": ".$outputlangs->convToOutputCharset($sourcecompany->phone);
476 if ($sourcecompany->fax) {
477 $stringaddress .= ($stringaddress ? ($sourcecompany->phone ?
" - " :
"\n") :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($sourcecompany->fax);
480 if ($sourcecompany->email) {
481 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($sourcecompany->email);
484 if ($sourcecompany->url) {
485 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($sourcecompany->url);
489 if (!empty($conf->global->MAIN_TVAINTRA_IN_SOURCE_ADDRESS)) {
490 if ($sourcecompany->tva_intra) {
491 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"VATIntraShort").
': '.$outputlangs->convToOutputCharset($sourcecompany->tva_intra);
496 if (!empty($conf->global->MAIN_PROFID1_IN_SOURCE_ADDRESS) && !empty($sourcecompany->idprof1)) {
497 $tmp = $outputlangs->transcountrynoentities(
"ProfId1", $sourcecompany->country_code);
498 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
501 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof1);
503 if (!empty($conf->global->MAIN_PROFID2_IN_SOURCE_ADDRESS) && !empty($sourcecompany->idprof2)) {
504 $tmp = $outputlangs->transcountrynoentities(
"ProfId2", $sourcecompany->country_code);
505 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
508 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof2);
510 if (!empty($conf->global->MAIN_PROFID3_IN_SOURCE_ADDRESS) && !empty($sourcecompany->idprof3)) {
511 $tmp = $outputlangs->transcountrynoentities(
"ProfId3", $sourcecompany->country_code);
512 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
515 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof3);
517 if (!empty($conf->global->MAIN_PROFID4_IN_SOURCE_ADDRESS) && !empty($sourcecompany->idprof4)) {
518 $tmp = $outputlangs->transcountrynoentities(
"ProfId4", $sourcecompany->country_code);
519 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
522 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof4);
524 if (!empty($conf->global->MAIN_PROFID5_IN_SOURCE_ADDRESS) && !empty($sourcecompany->idprof5)) {
525 $tmp = $outputlangs->transcountrynoentities(
"ProfId5", $sourcecompany->country_code);
526 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
529 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof5);
531 if (!empty($conf->global->MAIN_PROFID6_IN_SOURCE_ADDRESS) && !empty($sourcecompany->idprof6)) {
532 $tmp = $outputlangs->transcountrynoentities(
"ProfId6", $sourcecompany->country_code);
533 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
536 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($sourcecompany->idprof6);
538 if (!empty($conf->global->PDF_ADD_MORE_AFTER_SOURCE_ADDRESS)) {
539 $stringaddress .= ($stringaddress ?
"\n" :
'').$conf->global->PDF_ADD_MORE_AFTER_SOURCE_ADDRESS;
543 if ($mode ==
'target' || preg_match(
'/targetwithdetails/', $mode)) {
545 if (is_object($targetcontact)) {
546 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($targetcontact->getFullName($outputlangs, 1));
548 if (!empty($targetcontact->address)) {
549 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($targetcontact)).
"\n";
551 $companytouseforaddress = $targetcompany;
554 if ($targetcontact->socid > 0 && $targetcontact->socid != $targetcompany->id) {
555 $targetcontact->fetch_thirdparty();
556 $companytouseforaddress = $targetcontact->thirdparty;
559 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($companytouseforaddress)).
"\n";
562 if (!empty($targetcontact->country_code) && $targetcontact->country_code != $sourcecompany->country_code) {
563 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcontact->country_code));
564 } elseif (empty($targetcontact->country_code) && !empty($targetcompany->country_code) && ($targetcompany->country_code != $sourcecompany->country_code)) {
565 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcompany->country_code));
568 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || preg_match(
'/targetwithdetails/', $mode)) {
570 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_phone/', $mode)) {
571 if (!empty($targetcontact->phone_pro) || !empty($targetcontact->phone_mobile)) {
572 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Phone").
": ";
574 if (!empty($targetcontact->phone_pro)) {
575 $stringaddress .= $outputlangs->convToOutputCharset($targetcontact->phone_pro);
577 if (!empty($targetcontact->phone_pro) && !empty($targetcontact->phone_mobile)) {
578 $stringaddress .=
" / ";
580 if (!empty($targetcontact->phone_mobile)) {
581 $stringaddress .= $outputlangs->convToOutputCharset($targetcontact->phone_mobile);
585 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_fax/', $mode)) {
586 if ($targetcontact->fax) {
587 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($targetcontact->fax);
591 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_email/', $mode)) {
592 if ($targetcontact->email) {
593 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($targetcontact->email);
597 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_url/', $mode)) {
598 if ($targetcontact->url) {
599 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($targetcontact->url);
605 if (is_object($targetcompany)) {
606 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset(
dol_format_address($targetcompany));
608 if (!empty($targetcompany->country_code) && $targetcompany->country_code != $sourcecompany->country_code) {
609 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->convToOutputCharset($outputlangs->transnoentitiesnoconv(
"Country".$targetcompany->country_code));
611 $stringaddress .= ($stringaddress ?
"\n" :
'');
614 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || preg_match(
'/targetwithdetails/', $mode)) {
616 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_phone/', $mode)) {
617 if (!empty($targetcompany->phone)) {
618 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Phone").
": ";
620 if (!empty($targetcompany->phone)) {
621 $stringaddress .= $outputlangs->convToOutputCharset($targetcompany->phone);
625 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_fax/', $mode)) {
626 if ($targetcompany->fax) {
627 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Fax").
": ".$outputlangs->convToOutputCharset($targetcompany->fax);
631 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_email/', $mode)) {
632 if ($targetcompany->email) {
633 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Email").
": ".$outputlangs->convToOutputCharset($targetcompany->email);
637 if (!empty($conf->global->MAIN_PDF_ADDALSOTARGETDETAILS) || $mode ==
'targetwithdetails' || preg_match(
'/targetwithdetails_url/', $mode)) {
638 if ($targetcompany->url) {
639 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"Web").
": ".$outputlangs->convToOutputCharset($targetcompany->url);
647 if (empty($conf->global->MAIN_TVAINTRA_NOT_IN_ADDRESS)) {
648 if ($usecontact && is_object($targetcontact) &&
getDolGlobalInt(
'MAIN_USE_COMPANY_NAME_OF_CONTACT')) {
649 $targetcontact->fetch_thirdparty();
650 if (!empty($targetcontact->thirdparty->id) && $targetcontact->thirdparty->tva_intra) {
651 $stringaddress .= ($stringaddress ?
"\n" :
'') . $outputlangs->transnoentities(
"VATIntraShort") .
': ' . $outputlangs->convToOutputCharset($targetcontact->thirdparty->tva_intra);
653 } elseif ($targetcompany->tva_intra) {
654 $stringaddress .= ($stringaddress ?
"\n" :
'').$outputlangs->transnoentities(
"VATIntraShort").
': '.$outputlangs->convToOutputCharset($targetcompany->tva_intra);
659 if (!empty($conf->global->MAIN_PROFID1_IN_ADDRESS) && !empty($targetcompany->idprof1)) {
660 $tmp = $outputlangs->transcountrynoentities(
"ProfId1", $targetcompany->country_code);
661 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
664 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof1);
666 if (!empty($conf->global->MAIN_PROFID2_IN_ADDRESS) && !empty($targetcompany->idprof2)) {
667 $tmp = $outputlangs->transcountrynoentities(
"ProfId2", $targetcompany->country_code);
668 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
671 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof2);
673 if (!empty($conf->global->MAIN_PROFID3_IN_ADDRESS) && !empty($targetcompany->idprof3)) {
674 $tmp = $outputlangs->transcountrynoentities(
"ProfId3", $targetcompany->country_code);
675 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
678 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof3);
680 if (!empty($conf->global->MAIN_PROFID4_IN_ADDRESS) && !empty($targetcompany->idprof4)) {
681 $tmp = $outputlangs->transcountrynoentities(
"ProfId4", $targetcompany->country_code);
682 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
685 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof4);
687 if (!empty($conf->global->MAIN_PROFID5_IN_ADDRESS) && !empty($targetcompany->idprof5)) {
688 $tmp = $outputlangs->transcountrynoentities(
"ProfId5", $targetcompany->country_code);
689 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
692 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof5);
694 if (!empty($conf->global->MAIN_PROFID6_IN_ADDRESS) && !empty($targetcompany->idprof6)) {
695 $tmp = $outputlangs->transcountrynoentities(
"ProfId6", $targetcompany->country_code);
696 if (preg_match(
'/\((.+)\)/', $tmp, $reg)) {
699 $stringaddress .= ($stringaddress ?
"\n" :
'').$tmp.
': '.$outputlangs->convToOutputCharset($targetcompany->idprof6);
703 if (!empty($conf->global->MAIN_PUBLIC_NOTE_IN_ADDRESS)) {
704 if ($mode ==
'source' && !empty($sourcecompany->note_public)) {
705 $stringaddress .= ($stringaddress ?
"\n" :
'').
dol_string_nohtmltag($sourcecompany->note_public);
707 if (($mode ==
'target' || preg_match(
'/targetwithdetails/', $mode)) && !empty($targetcompany->note_public)) {
708 $stringaddress .= ($stringaddress ?
"\n" :
'').
dol_string_nohtmltag($targetcompany->note_public);
714 return $stringaddress;
731 if (!empty($conf->global->MAIN_USE_BACKGROUND_ON_PDF) && ($conf->global->MAIN_USE_BACKGROUND_ON_PDF !=
'-1')) {
732 $filepath = $conf->mycompany->dir_output.
'/logos/'.$conf->global->MAIN_USE_BACKGROUND_ON_PDF;
733 if (file_exists($filepath)) {
734 $pdf->SetAutoPageBreak(0, 0);
735 if (
getDolGlobalString(
'MAIN_USE_BACKGROUND_ON_PDF_ALPHA')) { $pdf->SetAlpha($conf->global->MAIN_USE_BACKGROUND_ON_PDF_ALPHA); }
736 $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);
739 $pdf->SetAutoPageBreak(1, 0);
761 $substitutionarray[
'__FROM_NAME__'] =
'__FROM_NAME__';
762 $substitutionarray[
'__FROM_EMAIL__'] =
'__FROM_EMAIL__';
763 return $substitutionarray;
780 global $langs, $mysoc, $user;
785 } elseif ($unit ==
'mm') {
787 } elseif ($unit ==
'cm') {
789 } elseif ($unit ==
'in') {
797 $text = $outputlangs->convToOutputCharset($text);
799 $savx = $pdf->getX();
800 $savy = $pdf->getY();
802 $watermark_angle = atan($h / $w) / 2;
803 $watermark_x_pos = 0;
804 $watermark_y_pos = $h / 3;
805 $watermark_x = $w / 2;
806 $watermark_y = $h / 3;
807 $pdf->SetFont(
'',
'B', 40);
808 $pdf->SetTextColor(255, 192, 203);
810 $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));
812 $pdf->SetXY($watermark_x_pos, $watermark_y_pos);
813 $pdf->Cell($w - 20, 25, $outputlangs->convToOutputCharset($text),
"", 2,
"C", 0);
817 $pdf->SetXY($savx, $savy);
833function pdf_bank(&$pdf, $outputlangs, $curx, $cury, $account, $onlynumber = 0, $default_font_size = 10)
835 global $mysoc, $conf;
837 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formbank.class.php';
839 $diffsizetitle = (empty($conf->global->PDF_DIFFSIZE_TITLE) ? 3 : $conf->global->PDF_DIFFSIZE_TITLE);
840 $diffsizecontent = (empty($conf->global->PDF_DIFFSIZE_CONTENT) ? 4 : $conf->global->PDF_DIFFSIZE_CONTENT);
841 $pdf->SetXY($curx, $cury);
843 if (empty($onlynumber)) {
844 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizetitle);
845 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
'PaymentByTransferOnThisBankAccount').
':', 0,
'L', 0);
849 $outputlangs->load(
"banks");
852 $bickey =
"BICNumber";
853 if ($account->getCountryCode() ==
'IN') {
858 $usedetailedbban = $account->useDetailedBBAN();
861 if ($usedetailedbban) {
864 if (empty($onlynumber)) {
865 $pdf->SetFont(
'',
'', $default_font_size - $diffsizecontent);
866 $pdf->SetXY($curx, $cury);
867 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Bank").
': '.$outputlangs->convToOutputCharset($account->bank), 0,
'L', 0);
871 if (empty($conf->global->PDF_BANK_HIDE_NUMBER_SHOW_ONLY_BICIBAN)) {
877 if (empty($onlynumber)) {
878 $pdf->line($curx + 1, $cury + 1, $curx + 1, $cury + 6);
882 foreach ($account->getFieldsToShow() as $val) {
883 $pdf->SetXY($curx, $cury + 4);
884 $pdf->SetFont(
'',
'', $default_font_size - 3);
886 if ($val ==
'BankCode') {
889 $content = $account->code_banque;
890 } elseif ($val ==
'DeskCode') {
893 $content = $account->code_guichet;
894 } elseif ($val ==
'BankAccountNumber') {
897 $content = $account->number;
898 } elseif ($val ==
'BankAccountNumberKey') {
901 $content = $account->cle_rib;
902 } elseif ($val ==
'IBAN' || $val ==
'BIC') {
907 dol_print_error($account->db,
'Unexpected value for getFieldsToShow: '.$val);
911 $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($content), 0,
'C', 0);
912 $pdf->SetXY($curx, $cury + 1);
914 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
915 $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities($val), 0,
'C', 0);
916 if (empty($onlynumber)) {
917 $pdf->line($curx, $cury + 1, $curx, $cury + 7);
925 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
926 $pdf->SetXY($curx, $cury);
927 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"Bank").
': '.$outputlangs->convToOutputCharset($account->bank), 0,
'L', 0);
930 $pdf->SetFont(
'',
'B', $default_font_size - $diffsizecontent);
931 $pdf->SetXY($curx, $cury);
932 $pdf->MultiCell(100, 3, $outputlangs->transnoentities(
"BankAccountNumber").
': '.$outputlangs->convToOutputCharset($account->number), 0,
'L', 0);
935 if ($diffsizecontent <= 2) {
940 $pdf->SetFont(
'',
'', $default_font_size - $diffsizecontent);
942 if (empty($onlynumber) && !empty($account->domiciliation)) {
943 $pdf->SetXY($curx, $cury);
944 $val = $outputlangs->transnoentities(
"Residence").
': '.$outputlangs->convToOutputCharset($account->domiciliation);
945 $pdf->MultiCell(100, 3, $val, 0,
'L', 0);
948 $tmpy = $pdf->getStringHeight(100, $val);
952 if (!empty($account->proprio)) {
953 $pdf->SetXY($curx, $cury);
954 $val = $outputlangs->transnoentities(
"BankAccountOwner").
': '.$outputlangs->convToOutputCharset($account->proprio);
955 $pdf->MultiCell(100, 3, $val, 0,
'L', 0);
956 $tmpy = $pdf->getStringHeight(100, $val);
958 } elseif (!$usedetailedbban) {
965 if (!empty($account->iban)) {
967 $ibanDisplay_temp = str_replace(
' ',
'', $outputlangs->convToOutputCharset($account->iban));
970 $nbIbanDisplay_temp =
dol_strlen($ibanDisplay_temp);
971 for ($i = 0; $i < $nbIbanDisplay_temp; $i++) {
972 $ibanDisplay .= $ibanDisplay_temp[$i];
973 if ($i % 4 == 3 && $i > 0) {
978 $pdf->SetFont(
'',
'B', $default_font_size - 3);
979 $pdf->SetXY($curx, $cury);
980 $pdf->MultiCell(100, 3, $outputlangs->transnoentities($ibankey).
': '.$ibanDisplay, 0,
'L', 0);
984 if (!empty($account->bic)) {
985 $pdf->SetFont(
'',
'B', $default_font_size - 3);
986 $pdf->SetXY($curx, $cury);
987 $pdf->MultiCell(100, 3, $outputlangs->transnoentities($bickey).
': '.$outputlangs->convToOutputCharset($account->bic), 0,
'L', 0);
1010function pdf_pagefoot(&$pdf, $outputlangs, $paramfreetext, $fromcompany, $marge_basse, $marge_gauche, $page_hauteur, $object, $showdetails = 0, $hidefreetext = 0, $page_largeur = 0, $watermark =
'')
1012 global $conf, $user, $mysoc, $hookmanager;
1014 $outputlangs->load(
"dict");
1018 $dims = $pdf->getPageDimensions();
1021 if (empty($hidefreetext) && !empty($conf->global->$paramfreetext)) {
1024 $substitutionarray[
'__FROM_NAME__'] = $fromcompany->name;
1025 $substitutionarray[
'__FROM_EMAIL__'] = $fromcompany->email;
1027 $newfreetext =
make_substitutions($conf->global->$paramfreetext, $substitutionarray, $outputlangs);
1033 $newfreetext = preg_replace(
'/(<img.*src=")[^\"]*viewimage\.php[^\"]*modulepart=medias[^\"]*file=([^\"]*)("[^\/]*\/>)/',
'\1file:/'.DOL_DATA_ROOT.
'/medias/\2\3', $newfreetext);
1035 $line .= $outputlangs->convToOutputCharset($newfreetext);
1044 if ($showdetails == 1 || $showdetails == 3) {
1046 if ($fromcompany->name) {
1047 $line1 .= ($line1 ?
" - " :
"").$outputlangs->transnoentities(
"RegisteredOffice").
": ".$fromcompany->name;
1050 if ($fromcompany->address) {
1051 $line1 .= ($line1 ?
" - " :
"").str_replace(
"\n",
", ", $fromcompany->address);
1054 if ($fromcompany->zip) {
1055 $line1 .= ($line1 ?
" - " :
"").$fromcompany->zip;
1058 if ($fromcompany->town) {
1059 $line1 .= ($line1 ?
" " :
"").$fromcompany->town;
1062 if ($fromcompany->country) {
1063 $line1 .= ($line1 ?
", " :
"").$fromcompany->country;
1066 if ($fromcompany->phone) {
1067 $line2 .= ($line2 ?
" - " :
"").$outputlangs->transnoentities(
"Phone").
": ".$fromcompany->phone;
1070 if ($fromcompany->fax) {
1071 $line2 .= ($line2 ?
" - " :
"").$outputlangs->transnoentities(
"Fax").
": ".$fromcompany->fax;
1075 if ($fromcompany->url) {
1076 $line2 .= ($line2 ?
" - " :
"").$fromcompany->url;
1079 if ($fromcompany->email) {
1080 $line2 .= ($line2 ?
" - " :
"").$fromcompany->email;
1083 if ($showdetails == 2 || $showdetails == 3 || (!empty($fromcompany->country_code) && $fromcompany->country_code ==
'DE')) {
1085 if ($fromcompany->managers) {
1086 $line2 .= ($line2 ?
" - " :
"").$fromcompany->managers;
1092 if (!empty($fromcompany->forme_juridique_code) && $fromcompany->forme_juridique_code) {
1093 $line3 .= ($line3 ?
" - " :
"").$outputlangs->convToOutputCharset(
getFormeJuridiqueLabel($fromcompany->forme_juridique_code));
1096 if (!empty($fromcompany->capital)) {
1097 $tmpamounttoshow =
price2num($fromcompany->capital);
1098 if (is_numeric($tmpamounttoshow) && $tmpamounttoshow > 0) {
1099 $line3 .= ($line3 ?
" - " :
"").$outputlangs->transnoentities(
"CapitalOf",
price($tmpamounttoshow, 0, $outputlangs, 0, 0, 0, $conf->currency));
1100 } elseif (!empty($fromcompany->capital)) {
1101 $line3 .= ($line3 ?
" - " :
"").$outputlangs->transnoentities(
"CapitalOf", $fromcompany->capital, $outputlangs);
1105 if (!empty($fromcompany->idprof1) && $fromcompany->idprof1 && ($fromcompany->country_code !=
'FR' || !$fromcompany->idprof2)) {
1106 $field = $outputlangs->transcountrynoentities(
"ProfId1", $fromcompany->country_code);
1107 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1110 $line3 .= ($line3 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof1);
1113 if (!empty($fromcompany->idprof2) && $fromcompany->idprof2) {
1114 $field = $outputlangs->transcountrynoentities(
"ProfId2", $fromcompany->country_code);
1115 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1118 $line3 .= ($line3 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof2);
1123 if (!empty($fromcompany->idprof3) && $fromcompany->idprof3) {
1124 $field = $outputlangs->transcountrynoentities(
"ProfId3", $fromcompany->country_code);
1125 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1128 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof3);
1131 if (!empty($fromcompany->idprof4) && $fromcompany->idprof4) {
1132 $field = $outputlangs->transcountrynoentities(
"ProfId4", $fromcompany->country_code);
1133 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1136 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof4);
1139 if (!empty($fromcompany->idprof5) && $fromcompany->idprof5) {
1140 $field = $outputlangs->transcountrynoentities(
"ProfId5", $fromcompany->country_code);
1141 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1144 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof5);
1147 if (!empty($fromcompany->idprof6) && $fromcompany->idprof6) {
1148 $field = $outputlangs->transcountrynoentities(
"ProfId6", $fromcompany->country_code);
1149 if (preg_match(
'/\((.*)\)/i', $field, $reg)) {
1152 $line4 .= ($line4 ?
" - " :
"").$field.
": ".$outputlangs->convToOutputCharset($fromcompany->idprof6);
1155 if (!empty($fromcompany->tva_intra) && $fromcompany->tva_intra !=
'') {
1156 $line4 .= ($line4 ?
" - " :
"").$outputlangs->transnoentities(
"VATIntraShort").
": ".$outputlangs->convToOutputCharset($fromcompany->tva_intra);
1159 $pdf->SetFont(
'',
'', 7);
1160 $pdf->SetDrawColor(224, 224, 224);
1162 if (!empty($conf->global->PDF_FOOTER_TEXT_COLOR)) {
1163 list($r, $g, $b) = sscanf($conf->global->PDF_FOOTER_TEXT_COLOR,
'%d, %d, %d');
1164 $pdf->SetTextColor($r, $g, $b);
1168 $freetextheight = 0;
1171 if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT)) {
1174 if (!empty($conf->global->MAIN_USE_AUTOWRAP_ON_FREETEXT)) {
1178 $freetextheight = $pdf->getStringHeight($width, $line);
1186 if (is_object($hookmanager)) {
1187 $parameters = array(
'line1' => $line1,
'line2' => $line2,
'line3' => $line3,
'line4' => $line4,
'outputlangs'=>$outputlangs);
1189 $hookmanager->executeHooks(
'pdf_pagefoot', $parameters, $object, $action);
1190 if (!empty($hookmanager->resPrint) && $hidefreetext == 0) {
1191 $mycustomfooter = $hookmanager->resPrint;
1194 $marginwithfooter = $marge_basse + $freetextheight + $mycustomfooterheight;
1195 $posy = (float) $marginwithfooter;
1199 list($r, $g, $b) = sscanf($conf->global->PDF_FOOTER_BACKGROUND_COLOR,
'%d, %d, %d');
1200 $pdf->SetAutoPageBreak(0, 0);
1201 $pdf->Rect(0, $dims[
'hk'] - $posy + $freetextheight, $dims[
'wk'] + 1, $marginwithfooter + 1,
'F',
'', $fill_color = array($r, $g, $b));
1202 $pdf->SetAutoPageBreak(1, 0);
1205 if (
getDolGlobalInt(
'PDF_FREETEXT_DISABLE_PAGEBREAK') === 1) { $pdf->SetAutoPageBreak(0, 0); }
1207 $pdf->SetXY($dims[
'lm'], -$posy);
1209 $pdf->MultiCell(0, 3, $line, 0, $align, 0);
1211 $pdf->writeHTMLCell($pdf->page_largeur - $pdf->margin_left - $pdf->margin_right, $freetextheight, $dims[
'lm'], $dims[
'hk'] - $marginwithfooter,
dol_htmlentitiesbr($line, 1,
'UTF-8', 0));
1213 $posy -= $freetextheight;
1215 if (
getDolGlobalInt(
'PDF_FREETEXT_DISABLE_PAGEBREAK') === 1) { $pdf->SetAutoPageBreak(1, 0); }
1221 $pdf->line($dims[
'lm'], $dims[
'hk'] - $posy, $dims[
'wk'] - $dims[
'rm'], $dims[
'hk'] - $posy);
1231 if (
getDolGlobalInt(
'PDF_FOOTER_DISABLE_PAGEBREAK') === 1) { $pdf->SetAutoPageBreak(0, 0); }
1232 $pdf->writeHTMLCell($pdf->page_largeur - $pdf->margin_left - $pdf->margin_right, $mycustomfooterheight, $dims[
'lm'], $dims[
'hk'] - $posy,
dol_htmlentitiesbr($mycustomfooter, 1,
'UTF-8', 0));
1233 if (
getDolGlobalInt(
'PDF_FOOTER_DISABLE_PAGEBREAK') === 1) { $pdf->SetAutoPageBreak(1, 0); }
1235 $posy -= $mycustomfooterheight - 3;
1238 $marginwithfooter = $marge_basse + $freetextheight + (!empty($line1) ? 3 : 0) + (!empty($line2) ? 3 : 0) + (!empty($line3) ? 3 : 0) + (!empty($line4) ? 3 : 0);
1239 $posy = (float) $marginwithfooter;
1243 list($r, $g, $b) = sscanf($conf->global->PDF_FOOTER_BACKGROUND_COLOR,
'%d, %d, %d');
1244 $pdf->SetAutoPageBreak(0, 0);
1245 $pdf->Rect(0, $dims[
'hk'] - $posy + $freetextheight, $dims[
'wk'] + 1, $marginwithfooter + 1,
'F',
'', $fill_color = array($r, $g, $b));
1246 $pdf->SetAutoPageBreak(1, 0);
1249 if (
getDolGlobalInt(
'PDF_FREETEXT_DISABLE_PAGEBREAK') === 1) { $pdf->SetAutoPageBreak(0, 0); }
1251 $pdf->SetXY($dims[
'lm'], -$posy);
1253 $pdf->MultiCell(0, 3, $line, 0, $align, 0);
1255 $pdf->writeHTMLCell($pdf->page_largeur - $pdf->margin_left - $pdf->margin_right, $freetextheight, $dims[
'lm'], $dims[
'hk'] - $marginwithfooter,
dol_htmlentitiesbr($line, 1,
'UTF-8', 0));
1257 $posy -= $freetextheight;
1259 if (
getDolGlobalInt(
'PDF_FREETEXT_DISABLE_PAGEBREAK') === 1) { $pdf->SetAutoPageBreak(1, 0); }
1267 $pdf->line($dims[
'lm'], $dims[
'hk'] - $posy, $dims[
'wk'] - $dims[
'rm'], $dims[
'hk'] - $posy);
1277 if (!empty($line1)) {
1278 $pdf->SetFont(
'',
'B', 7);
1279 $pdf->SetXY($dims[
'lm'], -$posy);
1280 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line1, 0,
'C', 0);
1282 $pdf->SetFont(
'',
'', 7);
1285 if (!empty($line2)) {
1286 $pdf->SetFont(
'',
'B', 7);
1287 $pdf->SetXY($dims[
'lm'], -$posy);
1288 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line2, 0,
'C', 0);
1290 $pdf->SetFont(
'',
'', 7);
1293 if (!empty($line3)) {
1294 $pdf->SetXY($dims[
'lm'], -$posy);
1295 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line3, 0,
'C', 0);
1298 if (!empty($line4)) {
1300 $pdf->SetXY($dims[
'lm'], -$posy);
1301 $pdf->MultiCell($dims[
'wk'] - $dims[
'rm'] - $dims[
'lm'], 2, $line4, 0,
'C', 0);
1308 $pdf->SetXY($dims[
'wk'] - $dims[
'rm'] - 18 -
getDolGlobalInt(
'PDF_FOOTER_PAGE_NUMBER_X', 0), -$posy -
getDolGlobalInt(
'PDF_FOOTER_PAGE_NUMBER_Y', 0));
1309 $pagination = $pdf->PageNo().
' / '.$pdf->getAliasNbPages();
1310 $fontRenderCorrection = 0;
1311 if (in_array(
pdf_getPDFFont($outputlangs), array(
'freemono',
'DejaVuSans'))) {
1312 $fontRenderCorrection = 10;
1314 $pdf->MultiCell(18 + $fontRenderCorrection, 2, $pagination, 0,
'R', 0);
1317 if (!empty($watermark)) {
1318 pdf_watermark($pdf, $outputlangs, $page_hauteur, $page_largeur,
'mm', $watermark);
1321 return $marginwithfooter;
1341 if (!empty($linkedobjects)) {
1342 foreach ($linkedobjects as $linkedobject) {
1343 $reftoshow = $linkedobject[
"ref_title"].
' : '.$linkedobject[
"ref_value"];
1344 if (!empty($linkedobject[
"date_value"])) {
1345 $reftoshow .=
' / '.$linkedobject[
"date_value"];
1349 $pdf->SetXY($posx, $posy);
1350 $pdf->SetFont(
'',
'', $default_font_size - 2);
1351 $pdf->MultiCell($w, $h, $reftoshow,
'', $align);
1355 return $pdf->getY();
1374function pdf_writelinedesc(&$pdf, $object, $i, $outputlangs, $w, $h, $posx, $posy, $hideref = 0, $hidedesc = 0, $issupplierline = 0)
1376 global $db, $conf, $langs, $hookmanager;
1381 if (is_object($hookmanager)) {
1382 $special_code = empty($object->lines[$i]->special_code) ?
'' : $object->lines[$i]->special_code;
1383 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
1384 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
1386 $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);
1388 $reshook = $hookmanager->executeHooks(
'pdf_writelinedesc', $parameters, $object, $action);
1390 if (!empty($hookmanager->resPrint)) {
1391 $result .= $hookmanager->resPrint;
1394 if (empty($reshook)) {
1395 $labelproductservice =
pdf_getlinedesc($object, $i, $outputlangs, $hideref, $hidedesc, $issupplierline);
1402 $labelproductservice = preg_replace(
'/(<img[^>]*src=")([^"]*)(&)([^"]*")/',
'\1\2&\4', $labelproductservice, -1, $nbrep);
1407 $pdf->writeHTMLCell($w, $h, $posx, $posy, $outputlangs->convToOutputCharset($labelproductservice), 0, 1,
false,
true,
'J',
true);
1408 $result .= $labelproductservice;
1424function pdf_getlinedesc($object, $i, $outputlangs, $hideref = 0, $hidedesc = 0, $issupplierline = 0)
1426 global $db, $conf, $langs;
1430 if ($issupplierline) {
1431 include_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
1434 include_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
1437 if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
1438 include_once DOL_DOCUMENT_ROOT .
'/product/class/productcustomerprice.class.php';
1443 $idprod = (!empty($object->lines[$i]->fk_product) ? $object->lines[$i]->fk_product :
false);
1445 $prodser->fetch($idprod);
1447 if ($multilangsactive) {
1448 $prodser->getMultiLangs();
1449 $object->lines[$i]->multilangs = $prodser->multilangs;
1453 if (!empty($object->lines[$i]->label)) {
1454 $label = $object->lines[$i]->label;
1456 if (!empty($object->lines[$i]->multilangs[$outputlangs->defaultlang][
'label']) && $multilangsactive) {
1457 $label = $object->lines[$i]->multilangs[$outputlangs->defaultlang][
'label'];
1459 if (!empty($object->lines[$i]->product_label)) {
1460 $label = $object->lines[$i]->product_label;
1467 if (!empty($object->lines[$i]->desc)) {
1468 $desc = $object->lines[$i]->desc;
1470 if (!empty($object->lines[$i]->multilangs[$outputlangs->defaultlang][
'description']) && $multilangsactive) {
1471 $desc = $object->lines[$i]->multilangs[$outputlangs->defaultlang][
'description'];
1473 if (!empty($object->lines[$i]->description)) {
1474 $desc = $object->lines[$i]->description;
1481 $ref_supplier = (!empty($object->lines[$i]->ref_supplier) ? $object->lines[$i]->ref_supplier : (!empty($object->lines[$i]->ref_fourn) ? $object->lines[$i]->ref_fourn :
''));
1483 $note = (!empty($object->lines[$i]->note) ? $object->lines[$i]->note :
'');
1485 $dbatch = (!empty($object->lines[$i]->detail_batch) ? $object->lines[$i]->detail_batch :
false);
1489 if ($multilangsactive && ($outputlangs->defaultlang != $langs->defaultlang)) {
1490 $translatealsoifmodified = (!empty($conf->global->MAIN_MULTILANG_TRANSLATE_EVEN_IF_MODIFIED));
1498 $textwasnotmodified = ($label == $prodser->label);
1499 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"label"]) && ($textwasnotmodified || $translatealsoifmodified)) {
1500 $label = $prodser->multilangs[$outputlangs->defaultlang][
"label"];
1505 $textwasnotmodified =
false;
1509 $textwasnotmodified = ($desc == $prodser->description);
1511 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"description"])) {
1512 if ($textwasnotmodified) {
1513 $desc = str_replace($prodser->description, $prodser->multilangs[$outputlangs->defaultlang][
"description"], $desc);
1514 } elseif ($translatealsoifmodified) {
1515 $desc = $prodser->multilangs[$outputlangs->defaultlang][
"description"];
1520 $textwasnotmodified = ($note == $prodser->note_public);
1521 if (!empty($prodser->multilangs[$outputlangs->defaultlang][
"other"]) && ($textwasnotmodified || $translatealsoifmodified)) {
1522 $note = $prodser->multilangs[$outputlangs->defaultlang][
"other"];
1525 } elseif (($object->element ==
'facture' || $object->element ==
'facturefourn') && preg_match(
'/^\(DEPOSIT\).+/', $desc)) {
1526 $desc = str_replace(
'(DEPOSIT)', $outputlangs->trans(
'Deposit'), $desc);
1529 if (empty($conf->global->PDF_HIDE_PRODUCT_LABEL_IN_SUPPLIER_LINES)) {
1531 $libelleproduitservice = $label;
1532 if (!empty($libelleproduitservice) && !empty($conf->global->PDF_BOLD_PRODUCT_LABEL)) {
1536 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1538 $libelleproduitservice =
'<b>'.$libelleproduitservice.
'</b>';
1544 if (!empty($conf->global->SHOW_SUBPRODUCT_REF_IN_PDF)) {
1545 $prodser->get_sousproduits_arbo();
1546 if (!empty($prodser->sousprods) && is_array($prodser->sousprods) && count($prodser->sousprods)) {
1547 $tmparrayofsubproducts = reset($prodser->sousprods);
1548 if (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF)) {
1549 foreach ($tmparrayofsubproducts as $subprodval) {
1550 $libelleproduitservice =
dol_concatdesc($libelleproduitservice,
" * ".$subprodval[3].
' ('.$subprodval[1].
')');
1553 foreach ($tmparrayofsubproducts as $subprodval) {
1554 $libelleproduitservice =
dol_concatdesc($libelleproduitservice,
" * ".$subprodval[5].(($subprodval[5] && $subprodval[3]) ?
' - ' :
'').$subprodval[3].
' ('.$subprodval[1].
')');
1561 if (!empty($desc) && ($desc != $label)) {
1562 if ($desc ==
'(CREDIT_NOTE)' && $object->lines[$i]->fk_remise_except) {
1564 $discount->fetch($object->lines[$i]->fk_remise_except);
1565 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
1566 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromCreditNote", $sourceref);
1567 } elseif ($desc ==
'(DEPOSIT)' && $object->lines[$i]->fk_remise_except) {
1569 $discount->fetch($object->lines[$i]->fk_remise_except);
1570 $sourceref = !empty($discount->discount_type) ? $discount->ref_invoice_supplier_source : $discount->ref_facture_source;
1571 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromDeposit", $sourceref);
1573 if (!empty($conf->global->INVOICE_ADD_DEPOSIT_DATE)) {
1574 $libelleproduitservice .=
' ('.dol_print_date($discount->datec,
'day',
'', $outputlangs).
')';
1576 } elseif ($desc ==
'(EXCESS RECEIVED)' && $object->lines[$i]->fk_remise_except) {
1578 $discount->fetch($object->lines[$i]->fk_remise_except);
1579 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessReceived", $discount->ref_facture_source);
1580 } elseif ($desc ==
'(EXCESS PAID)' && $object->lines[$i]->fk_remise_except) {
1582 $discount->fetch($object->lines[$i]->fk_remise_except);
1583 $libelleproduitservice = $outputlangs->transnoentitiesnoconv(
"DiscountFromExcessPaid", $discount->ref_invoice_supplier_source);
1587 if (!empty($object->element)) {
1588 $tmpkey =
'MAIN_DOCUMENTS_HIDE_DESCRIPTION_FOR_'.strtoupper($object->element);
1589 if (!empty($conf->global->$tmpkey)) {
1593 if (empty($hidedesc)) {
1594 if (!empty($conf->global->MAIN_DOCUMENTS_DESCRIPTION_FIRST)) {
1595 $libelleproduitservice =
dol_concatdesc($desc, $libelleproduitservice);
1597 if (!empty($conf->global->HIDE_LABEL_VARIANT_PDF) && $prodser->isVariant()) {
1598 $libelleproduitservice = $desc;
1600 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desc);
1605 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desc);
1611 $prefix_prodserv =
"";
1613 if (!empty($conf->global->PRODUCT_ADD_TYPE_IN_DOCUMENTS)) {
1614 if ($prodser->isService()) {
1615 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Service").
" ";
1617 $prefix_prodserv = $outputlangs->transnoentitiesnoconv(
"Product").
" ";
1621 if (empty($hideref)) {
1622 if ($issupplierline) {
1623 if (empty($conf->global->PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES)) {
1624 $ref_prodserv = $prodser->ref;
1625 if ($ref_supplier) {
1626 $ref_prodserv .= ($prodser->ref ?
' (' :
'').$outputlangs->transnoentitiesnoconv(
"SupplierRef").
' '.$ref_supplier.($prodser->ref ?
')' :
'');
1628 } elseif ($conf->global->PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES == 1) {
1629 $ref_prodserv = $ref_supplier;
1630 } elseif ($conf->global->PDF_HIDE_PRODUCT_REF_IN_SUPPLIER_LINES == 2) {
1631 $ref_prodserv = $ref_supplier.
' ('.$outputlangs->transnoentitiesnoconv(
"InternalRef").
' '.$prodser->ref.
')';
1634 $ref_prodserv = $prodser->ref;
1636 if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
1638 $filter = array(
'fk_product' => $idprod,
'fk_soc' => $object->socid);
1640 $nbCustomerPrices = $productCustomerPriceStatic->fetchAll(
'',
'', 1, 0, $filter);
1642 if ($nbCustomerPrices > 0) {
1643 $productCustomerPrice = $productCustomerPriceStatic->lines[0];
1645 if (!empty($productCustomerPrice->ref_customer)) {
1646 switch ($conf->global->PRODUIT_CUSTOMER_PRICES_PDF_REF_MODE) {
1648 $ref_prodserv = $productCustomerPrice->ref_customer;
1652 $ref_prodserv = $productCustomerPrice->ref_customer .
' (' . $outputlangs->transnoentitiesnoconv(
'InternalRef') .
' ' . $ref_prodserv .
')';
1656 $ref_prodserv = $ref_prodserv .
' (' . $outputlangs->transnoentitiesnoconv(
'RefCustomer') .
' ' . $productCustomerPrice->ref_customer .
')';
1663 if (!empty($libelleproduitservice) && !empty($ref_prodserv)) {
1664 $ref_prodserv .=
" - ";
1668 if (!empty($ref_prodserv) && !empty($conf->global->PDF_BOLD_PRODUCT_REF_AND_PERIOD)) {
1670 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1672 $ref_prodserv =
'<b>'.$ref_prodserv.
'</b>';
1675 $libelleproduitservice = $prefix_prodserv.$ref_prodserv.$libelleproduitservice;
1678 if (!empty($conf->global->CATEGORY_ADD_DESC_INTO_DOC) && $idprod && isModEnabled(
'categorie')) {
1679 include_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
1682 $tblcateg = $categstatic->containing($idprod, Categorie::TYPE_PRODUCT);
1683 foreach ($tblcateg as $cate) {
1685 $desccateg = $cate->description;
1687 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $desccateg);
1692 if (!empty($object->lines[$i]->date_start) || !empty($object->lines[$i]->date_end)) {
1696 if ($object->lines[$i]->date_start && $object->lines[$i]->date_end) {
1697 $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)).
')';
1699 if ($object->lines[$i]->date_start && !$object->lines[$i]->date_end) {
1700 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateFrom',
dol_print_date($object->lines[$i]->date_start, $format,
false, $outputlangs)).
')';
1702 if (!$object->lines[$i]->date_start && $object->lines[$i]->date_end) {
1703 $period =
'('.$outputlangs->transnoentitiesnoconv(
'DateUntil',
dol_print_date($object->lines[$i]->date_end, $format,
false, $outputlangs)).
')';
1706 if (!empty($conf->global->PDF_BOLD_PRODUCT_REF_AND_PERIOD)) {
1708 $libelleproduitservice = str_replace(
"\n",
'<br>', $libelleproduitservice);
1710 $libelleproduitservice .=
'<br><b style="color:#333666;" ><em>'.$period.
'</em></b>';
1712 $libelleproduitservice =
dol_concatdesc($libelleproduitservice, $period);
1718 if (!empty($dbatch)) {
1723 include_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
1724 include_once DOL_DOCUMENT_ROOT.
'/product/class/productbatch.class.php';
1729 foreach ($dbatch as $detail) {
1731 if ($detail->eatby) {
1732 $dte[] = $outputlangs->transnoentitiesnoconv(
'printEatby',
dol_print_date($detail->eatby, $format,
false, $outputlangs));
1734 if ($detail->sellby) {
1735 $dte[] = $outputlangs->transnoentitiesnoconv(
'printSellby',
dol_print_date($detail->sellby, $format,
false, $outputlangs));
1737 if ($detail->batch) {
1738 $dte[] = $outputlangs->transnoentitiesnoconv(
'printBatch', $detail->batch);
1740 $dte[] = $outputlangs->transnoentitiesnoconv(
'printQty', $detail->qty);
1743 if ($object->element ==
'shipping' && $detail->fk_origin_stock > 0 &&
getDolGlobalInt(
'PRODUCTBATCH_SHOW_WAREHOUSE_ON_SHIPMENT')) {
1744 $resproductbatch = $tmpproductbatch->fetch($detail->fk_origin_stock);
1745 if ($resproductbatch > 0) {
1746 $reswarehouse = $tmpwarehouse->fetch($tmpproductbatch->warehouseid);
1747 if ($reswarehouse > 0) {
1748 $dte[] = $tmpwarehouse->ref;
1753 $libelleproduitservice .=
"__N__ ".implode(
" - ", $dte);
1763 $libelleproduitservice = preg_replace(
'/__N__/',
'<br>', $libelleproduitservice);
1765 $libelleproduitservice = preg_replace(
'/__N__/',
"\n", $libelleproduitservice);
1769 return $libelleproduitservice;
1783 global $hookmanager;
1788 if (is_object($hookmanager)) {
1789 $special_code = $object->lines[$i]->special_code;
1790 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
1791 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
1793 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
1795 $reshook = $hookmanager->executeHooks(
'pdf_getlinenum', $parameters, $object, $action);
1796 $result .= $hookmanager->resPrint;
1798 if (empty($reshook)) {
1816 global $hookmanager;
1821 if (is_object($hookmanager)) {
1822 $special_code = $object->lines[$i]->special_code;
1823 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
1824 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
1826 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
1828 $reshook = $hookmanager->executeHooks(
'pdf_getlineref', $parameters, $object, $action);
1829 $result .= $hookmanager->resPrint;
1831 if (empty($reshook)) {
1848 global $hookmanager;
1853 if (is_object($hookmanager)) {
1854 $special_code = $object->lines[$i]->special_code;
1855 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
1856 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
1858 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
1860 $reshook = $hookmanager->executeHooks(
'pdf_getlineref_supplier', $parameters, $object, $action);
1861 $result .= $hookmanager->resPrint;
1863 if (empty($reshook)) {
1880 global $conf, $hookmanager, $mysoc;
1885 if (is_object($hookmanager)) {
1886 $special_code = empty($object->lines[$i]) ?
'' : $object->lines[$i]->special_code;
1887 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
1888 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
1890 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
1892 $reshook = $hookmanager->executeHooks(
'pdf_getlinevatrate', $parameters, $object, $action);
1894 if (!empty($hookmanager->resPrint)) {
1895 $result .= $hookmanager->resPrint;
1898 if (empty($reshook)) {
1899 if (empty($hidedetails) || $hidedetails > 1) {
1902 $tmpresult .=
vatrate($object->lines[$i]->tva_tx, 0, $object->lines[$i]->info_bits, -1);
1903 if (empty($conf->global->MAIN_PDF_MAIN_HIDE_SECOND_TAX)) {
1904 if ($object->lines[$i]->total_localtax1 != 0) {
1905 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
1910 $tmpresult .=
vatrate(abs($object->lines[$i]->localtax1_tx), 0);
1913 if (empty($conf->global->MAIN_PDF_MAIN_HIDE_THIRD_TAX)) {
1914 if ($object->lines[$i]->total_localtax2 != 0) {
1915 if (preg_replace(
'/[\s0%]/',
'', $tmpresult)) {
1920 $tmpresult .=
vatrate(abs($object->lines[$i]->localtax2_tx), 0);
1925 $result .= $tmpresult;
1942 global $conf, $hookmanager;
1945 if (isset($object->type) && $object->type == 2 && !empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) {
1952 if (is_object($hookmanager)) {
1953 $special_code = empty($object->lines[$i]) ?
'' : $object->lines[$i]->special_code;
1954 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
1955 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
1957 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
1959 $reshook = $hookmanager->executeHooks(
'pdf_getlineupexcltax', $parameters, $object, $action);
1961 if (!empty($hookmanager->resPrint)) {
1962 $result .= $hookmanager->resPrint;
1965 if (empty($reshook)) {
1966 if (empty($hidedetails) || $hidedetails > 1) {
1967 $subprice = (isModEnabled(
"multicurrency") && $object->multicurrency_tx != 1 ? $object->lines[$i]->multicurrency_subprice : $object->lines[$i]->subprice);
1968 $result .=
price($sign * $subprice, 0, $outputlangs);
1985 global $hookmanager, $conf;
1988 if (isset($object->type) && $object->type == 2 && !empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) {
1995 if (is_object($hookmanager)) {
1996 $special_code = $object->lines[$i]->special_code;
1997 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
1998 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2000 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
2002 $reshook = $hookmanager->executeHooks(
'pdf_getlineupwithtax', $parameters, $object, $action);
2004 if (!empty($hookmanager->resPrint)) {
2005 $result .= $hookmanager->resPrint;
2008 if (empty($reshook)) {
2009 if (empty($hidedetails) || $hidedetails > 1) {
2010 $result .=
price($sign * (($object->lines[$i]->subprice) + ($object->lines[$i]->subprice) * ($object->lines[$i]->tva_tx) / 100), 0, $outputlangs);
2027 global $hookmanager;
2032 if (is_object($hookmanager)) {
2033 $special_code = empty($object->lines[$i]) ?
'' : $object->lines[$i]->special_code;
2034 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
2035 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2037 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
2039 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty', $parameters, $object, $action);
2041 if (!empty($hookmanager->resPrint)) {
2042 $result = $hookmanager->resPrint;
2045 if (empty($reshook)) {
2046 if ($object->lines[$i]->special_code == 3) {
2049 if (empty($hidedetails) || $hidedetails > 1) {
2050 $result .= $object->lines[$i]->qty;
2067 global $hookmanager;
2072 if (is_object($hookmanager)) {
2073 $special_code = $object->lines[$i]->special_code;
2074 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
2075 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2077 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
2079 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_asked', $parameters, $object, $action);
2081 if (!empty($hookmanager->resPrint)) {
2082 $result .= $hookmanager->resPrint;
2085 if (empty($reshook)) {
2086 if ($object->lines[$i]->special_code == 3) {
2089 if (empty($hidedetails) || $hidedetails > 1) {
2090 $result .= $object->lines[$i]->qty_asked;
2107 global $hookmanager;
2112 if (is_object($hookmanager)) {
2113 $special_code = $object->lines[$i]->special_code;
2114 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
2115 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2117 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
2119 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_shipped', $parameters, $object, $action);
2121 if (!empty($hookmanager->resPrint)) {
2122 $result .= $hookmanager->resPrint;
2125 if (empty($reshook)) {
2126 if ($object->lines[$i]->special_code == 3) {
2129 if (empty($hidedetails) || $hidedetails > 1) {
2130 $result .= $object->lines[$i]->qty_shipped;
2147 global $hookmanager;
2152 if (is_object($hookmanager)) {
2153 $special_code = $object->lines[$i]->special_code;
2154 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
2155 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2157 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
2159 $reshook = $hookmanager->executeHooks(
'pdf_getlineqty_keeptoship', $parameters, $object, $action);
2161 if (!empty($hookmanager->resPrint)) {
2162 $result .= $hookmanager->resPrint;
2165 if (empty($reshook)) {
2166 if ($object->lines[$i]->special_code == 3) {
2169 if (empty($hidedetails) || $hidedetails > 1) {
2170 $result .= ($object->lines[$i]->qty_asked - $object->lines[$i]->qty_shipped);
2186function pdf_getlineunit($object, $i, $outputlangs, $hidedetails = 0, $hookmanager =
false)
2193 if (is_object($hookmanager)) {
2194 $special_code = $object->lines[$i]->special_code;
2195 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
2196 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2198 $parameters = array(
2200 'outputlangs' => $outputlangs,
2201 'hidedetails' => $hidedetails,
2202 'special_code' => $special_code
2205 $reshook = $hookmanager->executeHooks(
'pdf_getlineunit', $parameters, $object, $action);
2207 if (!empty($hookmanager->resPrint)) {
2208 $result .= $hookmanager->resPrint;
2211 if (empty($reshook)) {
2212 if (empty($hidedetails) || $hidedetails > 1) {
2213 $result .= $langs->transnoentitiesnoconv($object->lines[$i]->getLabelOfUnit(
'short'));
2231 global $hookmanager;
2233 include_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
2238 if (is_object($hookmanager)) {
2239 $special_code = $object->lines[$i]->special_code;
2240 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
2241 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2243 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
2245 $reshook = $hookmanager->executeHooks(
'pdf_getlineremisepercent', $parameters, $object, $action);
2247 if (!empty($hookmanager->resPrint)) {
2248 $result .= $hookmanager->resPrint;
2251 if (empty($reshook)) {
2252 if ($object->lines[$i]->special_code == 3) {
2255 if (empty($hidedetails) || $hidedetails > 1) {
2274 if (empty($hookmanager)) {
2275 global $hookmanager;
2282 if (is_object($hookmanager)) {
2283 $special_code = $object->lines[$i]->special_code;
2284 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
2285 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2287 $parameters = array(
'i' => $i,
'outputlangs' => $outputlangs,
'hidedetails' => $hidedetails,
'special_code' => $special_code);
2289 $reshook = $hookmanager->executeHooks(
'pdf_getlineprogress', $parameters, $object, $action);
2291 if (!empty($hookmanager->resPrint)) {
2292 return $hookmanager->resPrint;
2295 if (empty($reshook)) {
2296 if ($object->lines[$i]->special_code == 3) {
2299 if (empty($hidedetails) || $hidedetails > 1) {
2300 if (!empty($conf->global->SITUATION_DISPLAY_DIFF_ON_PDF)) {
2302 if (method_exists($object->lines[$i],
'get_prev_progress')) {
2303 $prev_progress = $object->lines[$i]->get_prev_progress($object->id);
2305 $result = round($object->lines[$i]->situation_percent - $prev_progress, 1).
'%';
2307 $result = round($object->lines[$i]->situation_percent, 1).
'%';
2325 global $conf, $hookmanager;
2328 if (isset($object->type) && $object->type == 2 && !empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) {
2335 if (is_object($hookmanager)) {
2336 $special_code = empty($object->lines[$i]) ?
'' : $object->lines[$i]->special_code;
2337 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
2338 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2340 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code,
'sign'=>$sign);
2342 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalexcltax', $parameters, $object, $action);
2344 if (!empty($hookmanager->resPrint)) {
2345 $result .= $hookmanager->resPrint;
2348 if (empty($reshook)) {
2349 if (!empty($object->lines[$i]) && $object->lines[$i]->special_code == 3) {
2350 $result .= $outputlangs->transnoentities(
"Option");
2351 } elseif (empty($hidedetails) || $hidedetails > 1) {
2352 $total_ht = (isModEnabled(
"multicurrency") && $object->multicurrency_tx != 1 ? $object->lines[$i]->multicurrency_total_ht : $object->lines[$i]->total_ht);
2353 if (!empty($object->lines[$i]->situation_percent) && $object->lines[$i]->situation_percent > 0) {
2357 if (method_exists($object->lines[$i],
'get_prev_progress')) {
2358 $prev_progress = $object->lines[$i]->get_prev_progress($object->id);
2359 $progress = ($object->lines[$i]->situation_percent - $prev_progress) / 100;
2361 $result .=
price($sign * ($total_ht / ($object->lines[$i]->situation_percent / 100)) * $progress, 0, $outputlangs);
2363 $result .=
price($sign * $total_ht, 0, $outputlangs);
2381 global $hookmanager, $conf;
2384 if (isset($object->type) && $object->type == 2 && !empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) {
2391 if (is_object($hookmanager)) {
2392 $special_code = $object->lines[$i]->special_code;
2393 if (!empty($object->lines[$i]->fk_parent_line) && $object->lines[$i]->fk_parent_line > 0) {
2394 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2396 $parameters = array(
'i'=>$i,
'outputlangs'=>$outputlangs,
'hidedetails'=>$hidedetails,
'special_code'=>$special_code);
2398 $reshook = $hookmanager->executeHooks(
'pdf_getlinetotalwithtax', $parameters, $object, $action);
2400 if (!empty($hookmanager->resPrint)) {
2401 $result .= $hookmanager->resPrint;
2404 if (empty($reshook)) {
2405 if ($object->lines[$i]->special_code == 3) {
2406 $result .= $outputlangs->transnoentities(
"Option");
2407 } elseif (empty($hidedetails) || $hidedetails > 1) {
2408 $total_ttc = (isModEnabled(
"multicurrency") && $object->multicurrency_tx != 1 ? $object->lines[$i]->multicurrency_total_ttc : $object->lines[$i]->total_ttc);
2409 if ($object->lines[$i]->situation_percent > 0) {
2413 if (method_exists($object->lines[$i],
'get_prev_progress')) {
2414 $prev_progress = $object->lines[$i]->get_prev_progress($object->id);
2415 $progress = ($object->lines[$i]->situation_percent - $prev_progress) / 100;
2417 $result .=
price($sign * ($total_ttc / ($object->lines[$i]->situation_percent / 100)) * $progress, 0, $outputlangs);
2419 $result .=
price($sign * $total_ttc, 0, $outputlangs);
2436 global $db, $hookmanager;
2438 $linkedobjects = array();
2440 $object->fetchObjectLinked();
2442 foreach ($object->linkedObjects as $objecttype => $objects) {
2443 if ($objecttype ==
'facture') {
2445 } elseif ($objecttype ==
'propal' || $objecttype ==
'supplier_proposal') {
2446 $outputlangs->load(
'propal');
2448 foreach ($objects as $elementobject) {
2449 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefProposal");
2450 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2451 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DatePropal");
2452 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
2454 } elseif ($objecttype ==
'commande' || $objecttype ==
'supplier_order') {
2455 $outputlangs->load(
'orders');
2458 $object->note_public =
dol_concatdesc($object->note_public, $outputlangs->transnoentities(
"RefOrder").
' :');
2459 foreach ($objects as $elementobject) {
2460 $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.
')').
' ');
2461 $object->note_public =
dol_concatdesc($object->note_public, $outputlangs->transnoentities(
"OrderDate").
' : '.
dol_print_date($elementobject->date,
'day',
'', $outputlangs));
2463 } elseif (count($objects) == 1) {
2464 $elementobject = array_shift($objects);
2465 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder");
2466 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref).(!empty($elementobject->ref_client) ?
' ('.$elementobject->ref_client.
')' :
'').(!empty($elementobject->ref_supplier) ?
' ('.$elementobject->ref_supplier.
')' :
'');
2467 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"OrderDate");
2468 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date,
'day',
'', $outputlangs);
2470 } elseif ($objecttype ==
'contrat') {
2471 $outputlangs->load(
'contracts');
2472 foreach ($objects as $elementobject) {
2473 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefContract");
2474 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2475 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"DateContract");
2476 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->date_contrat,
'day',
'', $outputlangs);
2478 } elseif ($objecttype ==
'fichinter') {
2479 $outputlangs->load(
'interventions');
2480 foreach ($objects as $elementobject) {
2481 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"InterRef");
2482 $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->transnoentities($elementobject->ref);
2483 $linkedobjects[$objecttype][
'date_title'] = $outputlangs->transnoentities(
"InterDate");
2484 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date($elementobject->datec,
'day',
'', $outputlangs);
2486 } elseif ($objecttype ==
'shipping') {
2487 $outputlangs->loadLangs(array(
"orders",
"sendings"));
2489 if (count($objects) > 1) {
2491 if (empty($object->linkedObjects[
'commande']) && $object->element !=
'commande') {
2492 $object->note_public =
dol_concatdesc($object->note_public, $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending").
' :');
2494 $object->note_public =
dol_concatdesc($object->note_public, $outputlangs->transnoentities(
"RefSending").
' :');
2497 foreach ($objects as $elementobject) {
2498 if (empty($object->linkedObjects[
'commande']) && $object->element !=
'commande') {
2499 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
2500 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
2501 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2503 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
2510 if (! is_object($order)) {
2511 $object->note_public =
dol_concatdesc($object->note_public, $outputlangs->transnoentities($elementobject->ref));
2513 $object->note_public =
dol_concatdesc($object->note_public, $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
''));
2514 $object->note_public =
dol_concatdesc($object->note_public,
' / '.$outputlangs->transnoentities($elementobject->ref));
2517 } elseif (count($objects) == 1) {
2518 $elementobject = array_shift($objects);
2521 if (empty($object->linkedObjects[
'commande']) && $object->element !=
'commande') {
2522 $elementobject->fetchObjectLinked(
null,
'',
null,
'',
'OR', 1,
'sourcetype', 0);
2523 if (!empty($elementobject->linkedObjectsIds[
'commande'])) {
2524 include_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
2526 $ret = $order->fetch(reset($elementobject->linkedObjectsIds[
'commande']));
2533 if (! is_object($order)) {
2534 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefSending");
2535 if (!empty($linkedobjects[$objecttype][
'ref_value'])) $linkedobjects[$objecttype][
'ref_value'] .=
' / ';
2536 $linkedobjects[$objecttype][
'ref_value'] .= $outputlangs->transnoentities($elementobject->ref);
2537 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
2539 $linkedobjects[$objecttype][
'ref_title'] = $outputlangs->transnoentities(
"RefOrder").
' / '.$outputlangs->transnoentities(
"RefSending");
2540 if (empty($linkedobjects[$objecttype][
'ref_value'])) $linkedobjects[$objecttype][
'ref_value'] = $outputlangs->convToOutputCharset($order->ref).($order->ref_client ?
' ('.$order->ref_client.
')' :
'');
2541 $linkedobjects[$objecttype][
'ref_value'] .=
' / '.$outputlangs->transnoentities($elementobject->ref);
2542 $linkedobjects[$objecttype][
'date_value'] =
dol_print_date(empty($elementobject->date_shipping) ? $elementobject->date_delivery : $elementobject->date_shipping,
'day',
'', $outputlangs);
2549 if (is_object($hookmanager)) {
2550 $parameters = array(
'linkedobjects' => $linkedobjects,
'outputlangs'=>$outputlangs);
2552 $hookmanager->executeHooks(
'pdf_getLinkedObjects', $parameters, $object, $action);
2553 if (!empty($hookmanager->resArray)) {
2554 $linkedobjects = $hookmanager->resArray;
2558 return $linkedobjects;
2572 $maxwidth = (empty($conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH) ? 20 : $conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH);
2573 $maxheight = (empty($conf->global->MAIN_DOCUMENTS_WITH_PICTURE_HEIGHT) ? 32 : $conf->global->MAIN_DOCUMENTS_WITH_PICTURE_HEIGHT);
2574 include_once DOL_DOCUMENT_ROOT.
'/core/lib/images.lib.php';
2578 if ($tmp[
'height']) {
2579 $width = (int) round($maxheight * $tmp[
'width'] / $tmp[
'height']);
2580 if ($width > $maxwidth) {
2582 $height = (int) round($maxwidth * $tmp[
'height'] / $tmp[
'width']);
2585 $height = $maxheight;
2588 return array(
'width'=>$width,
'height'=>$height);
2602 global $conf, $hookmanager;
2605 if (isset($object->type) && $object->type == 2 && !empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) {
2608 if ($object->lines[$i]->special_code == 3) {
2609 return $outputlangs->transnoentities(
"Option");
2611 if (is_object($hookmanager)) {
2612 $special_code = $object->lines[$i]->special_code;
2613 if (!empty($object->lines[$i]->fk_parent_line)) {
2614 $special_code = $object->getSpecialCode($object->lines[$i]->fk_parent_line);
2617 $parameters = array(
2619 'outputlangs'=>$outputlangs,
2620 'hidedetails'=>$hidedetails,
2621 'special_code'=>$special_code
2626 if ($hookmanager->executeHooks(
'getlinetotalremise', $parameters, $object, $action) > 0) {
2627 if (isset($hookmanager->resArray[
'linetotalremise'])) {
2628 return $hookmanager->resArray[
'linetotalremise'];
2630 return (
float) $hookmanager->resPrint;
2635 if (empty($hidedetails) || $hidedetails > 1) {
2636 return $sign * (($object->lines[$i]->subprice * $object->lines[$i]->qty) - $object->lines[$i]->total_ht);
Class to manage categories.
Class to manage customers orders.
Class to manage absolute discounts.
Class to manage warehouses.
Class to manage predefined suppliers products.
Class to manage products or services.
Manage record for batch number management.
File of class to manage predefined price products or services by customer.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
getState($id, $withcode='', $dbtouse=0, $withregion=0, $outputlangs='', $entconv=1)
Return state translated from an id.
getFormeJuridiqueLabel($code)
Return the name translated of juridical status.
dol_print_reduction($reduction, $langs)
Returns formated reduction.
dol_getDefaultFormat(Translate $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 formated for view output Used into pdf and HTML pages.
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_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_format_address($object, $withcountry=0, $sep="\n", $outputlangs='', $mode=0, $extralangcode='')
Return a formated address (part address/zip/town/state) according to country rules.
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.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
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.
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 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_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_getPDFFontSize($outputlangs)
Return font size to use for PDF generation.
pdf_getFormat(Translate $outputlangs=null, $mode='setup')
Return array with format properties of default PDF format.
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_writelinedesc(&$pdf, $object, $i, $outputlangs, $w, $h, $posx, $posy, $hideref=0, $hidedesc=0, $issupplierline=0)
Output line description into PDF.
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.
pdf_getlineunit($object, $i, $outputlangs, $hidedetails=0, $hookmanager=false)
Return line unit.
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 informations.
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 informations 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 formated for output on documents.
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.