/** * Show payments table * * @param PDF $pdf Object PDF * @param Object $object Object invoice * @param int $posy Position y in PDF * @param Translate $outputlangs Object langs for output * @return int <0 if KO, >0 if OK */ function _tableau_versements(&$pdf, $object, $posy, $outputlangs) { $tab3_posx = 120; $tab3_top = $posy + 8; $tab3_width = 80; $tab3_height = 4; if ($this->page_largeur < 210) { $tab3_posx -= 20; } $default_font_size = pdf_getPDFFontSize($outputlangs); $pdf->SetFont('', '', $default_font_size - 3); $pdf->SetXY($tab3_posx, $tab3_top - 4); $pdf->MultiCell(60, 3, $outputlangs->transnoentities("PaymentsAlreadyDone"), 0, 'L', 0); $pdf->line($tab3_posx, $tab3_top, $tab3_posx + $tab3_width, $tab3_top); $pdf->SetFont('', '', $default_font_size - 4); $pdf->SetXY($tab3_posx, $tab3_top); $pdf->MultiCell(20, 3, $outputlangs->transnoentities("Payment"), 0, 'L', 0); $pdf->SetXY($tab3_posx + 21, $tab3_top); $pdf->MultiCell(20, 3, $outputlangs->transnoentities("Amount"), 0, 'L', 0); $pdf->SetXY($tab3_posx + 40, $tab3_top); $pdf->MultiCell(20, 3, $outputlangs->transnoentities("Type"), 0, 'L', 0); $pdf->SetXY($tab3_posx + 58, $tab3_top); $pdf->MultiCell(20, 3, $outputlangs->transnoentities("Num"), 0, 'L', 0); $pdf->line($tab3_posx, $tab3_top - 1 + $tab3_height, $tab3_posx + $tab3_width, $tab3_top - 1 + $tab3_height); $y = 0; $pdf->SetFont('', '', $default_font_size - 4); // Loop on each payment $sql = "SELECT p.datep as date, p.fk_paiement as type, p.num_paiement as num, pf.amount as amount,"; $sql .= " cp.code"; $sql .= " FROM " . MAIN_DB_PREFIX . "paiementfourn_facturefourn as pf, " . MAIN_DB_PREFIX . "paiementfourn as p"; $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "c_paiement as cp ON p.fk_paiement = cp.id"; $sql .= " WHERE pf.fk_paiementfourn = p.rowid and pf.fk_facturefourn = " . $object->id; $sql .= " ORDER BY p.datep"; $resql = $this->db->query($sql); if ($resql) { $num = $this->db->num_rows($resql); $i = 0; while ($i < $num) { $y += 3; $row = $this->db->fetch_object($resql); $pdf->SetXY($tab3_posx, $tab3_top + $y); $pdf->MultiCell(20, 3, dol_print_date($this->db->jdate($row->date), 'day', false, $outputlangs, true), 0, 'L', 0); $pdf->SetXY($tab3_posx + 21, $tab3_top + $y); $pdf->MultiCell(20, 3, price($row->amount), 0, 'L', 0); $pdf->SetXY($tab3_posx + 40, $tab3_top + $y); $oper = $outputlangs->transnoentitiesnoconv("PaymentTypeShort" . $row->code); $pdf->MultiCell(20, 3, $oper, 0, 'L', 0); $pdf->SetXY($tab3_posx + 58, $tab3_top + $y); $pdf->MultiCell(30, 3, $row->num, 0, 'L', 0); $pdf->line($tab3_posx, $tab3_top + $y + 3, $tab3_posx + $tab3_width, $tab3_top + $y + 3); $i++; } } else { $this->error = $this->db->lasterror(); dol_syslog($this->db, $this->error, LOG_ERR); return -1; } }
/** * Show payments table * * @param PDF $pdf Object PDF * @param Object $object Object invoice * @param int $posy Position y in PDF * @param Translate $outputlangs Object langs for output * @return int <0 if KO, >0 if OK */ function _tableau_versements(&$pdf, $object, $posy, $outputlangs) { global $conf; $sign = 1; if ($object->type == 2 && !empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) { $sign = -1; } $tab3_posx = 120; $tab3_top = $posy + 8; $tab3_width = 80; $tab3_height = 4; if ($this->page_largeur < 210) { $tab3_posx -= 20; } $default_font_size = pdf_getPDFFontSize($outputlangs); $title = $outputlangs->transnoentities("PaymentsAlreadyDone"); if ($object->type == 2) { $title = $outputlangs->transnoentities("PaymentsBackAlreadyDone"); } $pdf->SetFont('', '', $default_font_size - 3); $pdf->SetXY($tab3_posx, $tab3_top - 4); $pdf->MultiCell(60, 3, $title, 0, 'L', 0); $pdf->line($tab3_posx, $tab3_top, $tab3_posx + $tab3_width, $tab3_top); $pdf->SetFont('', '', $default_font_size - 4); $pdf->SetXY($tab3_posx, $tab3_top); $pdf->MultiCell(20, 3, $outputlangs->transnoentities("Payment"), 0, 'L', 0); $pdf->SetXY($tab3_posx + 21, $tab3_top); $pdf->MultiCell(20, 3, $outputlangs->transnoentities("Amount"), 0, 'L', 0); $pdf->SetXY($tab3_posx + 40, $tab3_top); $pdf->MultiCell(20, 3, $outputlangs->transnoentities("Type"), 0, 'L', 0); $pdf->SetXY($tab3_posx + 58, $tab3_top); $pdf->MultiCell(20, 3, $outputlangs->transnoentities("Num"), 0, 'L', 0); $pdf->line($tab3_posx, $tab3_top - 1 + $tab3_height, $tab3_posx + $tab3_width, $tab3_top - 1 + $tab3_height); $y = 0; $pdf->SetFont('', '', $default_font_size - 4); // Loop on each deposits and credit notes included $sql = "SELECT re.rowid, re.amount_ht, re.amount_tva, re.amount_ttc,"; $sql .= " re.description, re.fk_facture_source,"; $sql .= " f.type, f.datef"; $sql .= " FROM " . MAIN_DB_PREFIX . "societe_remise_except as re, " . MAIN_DB_PREFIX . "facture as f"; $sql .= " WHERE re.fk_facture_source = f.rowid AND re.fk_facture = " . $object->id; $resql = $this->db->query($sql); if ($resql) { $num = $this->db->num_rows($resql); $i = 0; $invoice = new Facture($this->db); while ($i < $num) { $y += 3; $obj = $this->db->fetch_object($resql); if ($obj->type == 2) { $text = $outputlangs->trans("CreditNote"); } elseif ($obj->type == 3) { $text = $outputlangs->trans("Deposit"); } else { $text = $outputlangs->trans("UnknownType"); } $invoice->fetch($obj->fk_facture_source); $pdf->SetXY($tab3_posx, $tab3_top + $y); $pdf->MultiCell(20, 3, dol_print_date($obj->datef, 'day', false, $outputlangs, true), 0, 'L', 0); $pdf->SetXY($tab3_posx + 21, $tab3_top + $y); $pdf->MultiCell(20, 3, price($obj->amount_ttc, 0, $outputlangs), 0, 'L', 0); $pdf->SetXY($tab3_posx + 40, $tab3_top + $y); $pdf->MultiCell(20, 3, $text, 0, 'L', 0); $pdf->SetXY($tab3_posx + 58, $tab3_top + $y); $pdf->MultiCell(20, 3, $invoice->ref, 0, 'L', 0); $pdf->line($tab3_posx, $tab3_top + $y + 3, $tab3_posx + $tab3_width, $tab3_top + $y + 3); $i++; } } else { $this->error = $this->db->lasterror(); return -1; } // Loop on each payment $sql = "SELECT p.datep as date, p.fk_paiement as type, p.num_paiement as num, pf.amount as amount,"; $sql .= " cp.code"; $sql .= " FROM " . MAIN_DB_PREFIX . "paiement_facture as pf, " . MAIN_DB_PREFIX . "paiement as p"; $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "c_paiement as cp ON p.fk_paiement = cp.id"; $sql .= " WHERE pf.fk_paiement = p.rowid AND pf.fk_facture = " . $object->id; $sql .= " ORDER BY p.datep"; $resql = $this->db->query($sql); if ($resql) { $num = $this->db->num_rows($resql); $i = 0; while ($i < $num) { $y += 3; $row = $this->db->fetch_object($resql); $pdf->SetXY($tab3_posx, $tab3_top + $y); $pdf->MultiCell(20, 3, dol_print_date($this->db->jdate($row->date), 'day', false, $outputlangs, true), 0, 'L', 0); $pdf->SetXY($tab3_posx + 21, $tab3_top + $y); $pdf->MultiCell(20, 3, price($sign * $row->amount, 0, $outputlangs), 0, 'L', 0); $pdf->SetXY($tab3_posx + 40, $tab3_top + $y); $oper = $outputlangs->transnoentitiesnoconv("PaymentTypeShort" . $row->code); $pdf->MultiCell(20, 3, $oper, 0, 'L', 0); $pdf->SetXY($tab3_posx + 58, $tab3_top + $y); $pdf->MultiCell(30, 3, $row->num, 0, 'L', 0); $pdf->line($tab3_posx, $tab3_top + $y + 3, $tab3_posx + $tab3_width, $tab3_top + $y + 3); $i++; } } else { $this->error = $this->db->lasterror(); return -1; } }
/** * Affiche la grille des lignes de factures * * @param PDF $pdf Object PDF * @param int $tab_top Tab top * @param int $tab_height Tab height * @param int $nexY next y * @param Translate $outputlangs Output langs * @return void */ function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs) { global $conf; $default_font_size = pdf_getPDFFontSize($outputlangs); // Amount in (at tab_top - 1) $pdf->SetTextColor(0, 0, 0); $pdf->SetFont('', '', $default_font_size - 2); $titre = $outputlangs->transnoentities("AmountInCurrency", $outputlangs->transnoentitiesnoconv("Currency" . $conf->currency)); $pdf->SetXY($this->page_largeur - $this->marge_droite - ($pdf->GetStringWidth($titre) + 4), $tab_top - 4); $pdf->MultiCell($pdf->GetStringWidth($titre) + 3, 2, $titre); $pdf->SetDrawColor(128, 128, 128); // Rect prend une longueur en 3eme param $pdf->Rect($this->marge_gauche, $tab_top, $this->page_largeur - $this->marge_gauche - $this->marge_droite, $tab_height); // line prend une position y en 3eme param $pdf->line($this->marge_gauche, $tab_top + 5, $this->page_largeur - $this->marge_droite, $tab_top + 5); $pdf->SetFont('', '', 8); // Accountancy piece $pdf->SetXY($this->posxpiece - 1, $tab_top + 1); $pdf->MultiCell($this->posxdesc - $this->posxpiece - 1, 1, '', '', 'R'); // Comments $pdf->line($this->posxdesc - 1, $tab_top, $this->posxdesc - 1, $tab_top + $tab_height); $pdf->SetXY($this->posxdesc - 1, $tab_top + 1); $pdf->MultiCell($this->posxdate - $this->posxdesc - 1, 1, $outputlangs->transnoentities("Description"), '', 'L'); // Date $pdf->line($this->posxdate - 1, $tab_top, $this->posxdate - 1, $tab_top + $tab_height); $pdf->SetXY($this->posxdate - 1, $tab_top + 1); $pdf->MultiCell($this->posxtype - $this->posxdate - 1, 2, $outputlangs->transnoentities("Date"), '', 'C'); // Type $pdf->line($this->posxtype - 1, $tab_top, $this->posxtype - 1, $tab_top + $tab_height); $pdf->SetXY($this->posxtype - 1, $tab_top + 1); $pdf->MultiCell($this->posxprojet - $this->posxtype - 1, 2, $outputlangs->transnoentities("Type"), '', 'C'); // Project $pdf->line($this->posxprojet - 1, $tab_top, $this->posxprojet - 1, $tab_top + $tab_height); $pdf->SetXY($this->posxprojet - 1, $tab_top + 1); $pdf->MultiCell($this->posxtva - $this->posxprojet - 1, 2, $outputlangs->transnoentities("Project"), '', 'C'); // VAT if (empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT)) { $pdf->line($this->posxtva - 1, $tab_top, $this->posxtva - 1, $tab_top + $tab_height); $pdf->SetXY($this->posxtva - 1, $tab_top + 1); $pdf->MultiCell($this->posxup - $this->posxtva - 1, 2, $outputlangs->transnoentities("VAT"), '', 'C'); } // Unit price $pdf->line($this->posxup - 1, $tab_top, $this->posxup - 1, $tab_top + $tab_height); $pdf->SetXY($this->posxup - 1, $tab_top + 1); $pdf->MultiCell($this->posxqty - $this->posxup - 1, 2, $outputlangs->transnoentities("PriceU"), '', 'C'); // Quantity $pdf->line($this->posxqty - 1, $tab_top, $this->posxqty - 1, $tab_top + $tab_height); $pdf->SetXY($this->posxqty - 1, $tab_top + 1); $pdf->MultiCell($this->postotalttc - $this->posxqty, 2, $outputlangs->transnoentities("Qty"), '', 'R'); // Total with all taxes $pdf->line($this->postotalttc, $tab_top, $this->postotalttc, $tab_top + $tab_height); $pdf->SetXY($this->postotalttc - 1, $tab_top + 1); $pdf->MultiCell($this->page_largeur - $this->marge_droite - $this->postotalttc, 2, $outputlangs->transnoentities("TotalTTC"), '', 'R'); $pdf->SetTextColor(0, 0, 0); }
/** * Show bank informations for PDF generation * * @param PDF $pdf Object PDF * @param Translate $outputlangs Object lang * @param int $curx X * @param int $cury Y * @param Account $account Bank account object * @param int $onlynumber Output only number (bank+desk+key+number according to country, but without name of bank and domiciliation) * @param int $default_font_size Default font size * @return float The Y PDF position */ function pdf_bank(&$pdf, $outputlangs, $curx, $cury, $account, $onlynumber = 0, $default_font_size = 10) { global $mysoc, $conf; $diffsizetitle = empty($conf->global->PDF_DIFFSIZE_TITLE) ? 3 : $conf->global->PDF_DIFFSIZE_TITLE; $diffsizecontent = empty($conf->global->PDF_DIFFSIZE_CONTENT) ? 4 : $conf->global->PDF_DIFFSIZE_CONTENT; $pdf->SetXY($curx, $cury); if (empty($onlynumber)) { $pdf->SetFont('', 'B', $default_font_size - $diffsizetitle); $pdf->MultiCell(100, 3, $outputlangs->transnoentities('PaymentByTransferOnThisBankAccount') . ':', 0, 'L', 0); $cury += 4; } $outputlangs->load("banks"); // Use correct name of bank id according to country $bickey = "BICNumber"; if ($account->getCountryCode() == 'IN') { $bickey = "SWIFT"; } // Get format of bank account according to its country $usedetailedbban = $account->useDetailedBBAN(); //$onlynumber=0; $usedetailedbban=1; // For tests if ($usedetailedbban) { $savcurx = $curx; if (empty($onlynumber)) { $pdf->SetFont('', '', $default_font_size - $diffsizecontent); $pdf->SetXY($curx, $cury); $pdf->MultiCell(100, 3, $outputlangs->transnoentities("Bank") . ': ' . $outputlangs->convToOutputCharset($account->bank), 0, 'L', 0); $cury += 3; } if (empty($conf->global->PDF_BANK_HIDE_NUMBER_SHOW_ONLY_BICIBAN)) { // Note: // bank = code_banque (FR), sort code (GB, IR. Example: 12-34-56) // desk = code guichet (FR), used only when $usedetailedbban = 1 // number = account number // key = check control key used only when $usedetailedbban = 1 if (empty($onlynumber)) { $pdf->line($curx + 1, $cury + 1, $curx + 1, $cury + 6); } if ($usedetailedbban == 1) { $fieldstoshow = array('bank', 'desk', 'number', 'key'); if ($conf->global->BANK_SHOW_ORDER_OPTION == 1) { $fieldstoshow = array('bank', 'desk', 'key', 'number'); } } else { if ($usedetailedbban == 2) { $fieldstoshow = array('bank', 'number'); } else { dol_print_error('', 'Value returned by function useDetailedBBAN not managed'); } } foreach ($fieldstoshow as $val) { if ($val == 'bank') { // Bank code $tmplength = 18; $pdf->SetXY($curx, $cury + 4); $pdf->SetFont('', '', $default_font_size - 3); $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($account->code_banque), 0, 'C', 0); $pdf->SetXY($curx, $cury + 1); $curx += $tmplength; $pdf->SetFont('', 'B', $default_font_size - 4); $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities("BankCode"), 0, 'C', 0); if (empty($onlynumber)) { $pdf->line($curx, $cury + 1, $curx, $cury + 7); } } if ($val == 'desk') { // Desk $tmplength = 18; $pdf->SetXY($curx, $cury + 4); $pdf->SetFont('', '', $default_font_size - 3); $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($account->code_guichet), 0, 'C', 0); $pdf->SetXY($curx, $cury + 1); $curx += $tmplength; $pdf->SetFont('', 'B', $default_font_size - 4); $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities("DeskCode"), 0, 'C', 0); if (empty($onlynumber)) { $pdf->line($curx, $cury + 1, $curx, $cury + 7); } } if ($val == 'number') { // Number $tmplength = 24; $pdf->SetXY($curx, $cury + 4); $pdf->SetFont('', '', $default_font_size - 3); $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($account->number), 0, 'C', 0); $pdf->SetXY($curx, $cury + 1); $curx += $tmplength; $pdf->SetFont('', 'B', $default_font_size - 4); $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities("BankAccountNumber"), 0, 'C', 0); if (empty($onlynumber)) { $pdf->line($curx, $cury + 1, $curx, $cury + 7); } } if ($val == 'key') { // Key $tmplength = 13; $pdf->SetXY($curx, $cury + 4); $pdf->SetFont('', '', $default_font_size - 3); $pdf->MultiCell($tmplength, 3, $outputlangs->convToOutputCharset($account->cle_rib), 0, 'C', 0); $pdf->SetXY($curx, $cury + 1); $curx += $tmplength; $pdf->SetFont('', 'B', $default_font_size - 4); $pdf->MultiCell($tmplength, 3, $outputlangs->transnoentities("BankAccountNumberKey"), 0, 'C', 0); if (empty($onlynumber)) { $pdf->line($curx, $cury + 1, $curx, $cury + 7); } } } $curx = $savcurx; $cury += 8; } } else { $pdf->SetFont('', 'B', $default_font_size - $diffsizecontent); $pdf->SetXY($curx, $cury); $pdf->MultiCell(100, 3, $outputlangs->transnoentities("Bank") . ': ' . $outputlangs->convToOutputCharset($account->bank), 0, 'L', 0); $cury += 3; $pdf->SetFont('', 'B', $default_font_size - $diffsizecontent); $pdf->SetXY($curx, $cury); $pdf->MultiCell(100, 3, $outputlangs->transnoentities("BankAccountNumber") . ': ' . $outputlangs->convToOutputCharset($account->number), 0, 'L', 0); $cury += 3; if ($diffsizecontent <= 2) { $cury += 1; } } $pdf->SetFont('', '', $default_font_size - $diffsizecontent); if (empty($onlynumber) && !empty($account->domiciliation)) { $pdf->SetXY($curx, $cury); $val = $outputlangs->transnoentities("Residence") . ': ' . $outputlangs->convToOutputCharset($account->domiciliation); $pdf->MultiCell(100, 3, $val, 0, 'L', 0); //$nboflines=dol_nboflines_bis($val,120); //$cury+=($nboflines*3)+2; $tmpy = $pdf->getStringHeight(100, $val); $cury += $tmpy; } if (!empty($account->proprio)) { $pdf->SetXY($curx, $cury); $val = $outputlangs->transnoentities("BankAccountOwner") . ': ' . $outputlangs->convToOutputCharset($account->proprio); $pdf->MultiCell(100, 3, $val, 0, 'L', 0); $tmpy = $pdf->getStringHeight(100, $val); $cury += $tmpy; } else { if (!$usedetailedbban) { $cury += 1; } } // Use correct name of bank id according to country $ibankey = "IBANNumber"; if ($account->getCountryCode() == 'IN') { $ibankey = "IFSC"; } if (!empty($account->iban)) { //Remove whitespaces to ensure we are dealing with the format we expect $ibanDisplay_temp = str_replace(' ', '', $outputlangs->convToOutputCharset($account->iban)); $ibanDisplay = ""; $nbIbanDisplay_temp = dol_strlen($ibanDisplay_temp); for ($i = 0; $i < $nbIbanDisplay_temp; $i++) { $ibanDisplay .= $ibanDisplay_temp[$i]; if ($i % 4 == 3 && $i > 0) { $ibanDisplay .= " "; } } $pdf->SetFont('', 'B', $default_font_size - 3); $pdf->SetXY($curx, $cury); $pdf->MultiCell(100, 3, $outputlangs->transnoentities($ibankey) . ': ' . $ibanDisplay, 0, 'L', 0); $cury += 3; } if (!empty($account->bic)) { $pdf->SetFont('', 'B', $default_font_size - 3); $pdf->SetXY($curx, $cury); $pdf->MultiCell(100, 3, $outputlangs->transnoentities($bickey) . ': ' . $outputlangs->convToOutputCharset($account->bic), 0, 'L', 0); } return $pdf->getY(); }
/** * Show table for lines * * @param PDF $pdf Object PDF * @param string $tab_top Top position of table * @param string $tab_height Height of table (rectangle) * @param int $nexY Y * @param Translate $outputlangs Langs object * @param int $hidetop Hide top bar of array * @param int $hidebottom Hide bottom bar of array * @return void */ function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs, $hidetop = 0, $hidebottom = 0) { global $conf, $mysoc; $default_font_size = pdf_getPDFFontSize($outputlangs); $pdf->SetDrawColor(128, 128, 128); // Rect prend une longueur en 3eme param $pdf->Rect($this->marge_gauche, $tab_top, $this->page_largeur - $this->marge_gauche - $this->marge_droite, $tab_height); // line prend une position y en 3eme param $pdf->line($this->marge_gauche, $tab_top + 6, $this->page_largeur - $this->marge_droite, $tab_top + 6); $pdf->SetTextColor(0, 0, 0); $pdf->SetFont('', '', $default_font_size); $pdf->SetXY($this->posxref, $tab_top + 1); $pdf->MultiCell($this->posxlabel - $this->posxref, 3, $outputlangs->transnoentities("Tasks"), '', 'L'); $pdf->SetXY($this->posxlabel, $tab_top + 1); $pdf->MultiCell($this->posxworkload - $this->posxlabel, 3, $outputlangs->transnoentities("Description"), 0, 'L'); $pdf->SetXY($this->posxworkload, $tab_top + 1); $pdf->MultiCell($this->posxprogress - $this->posxworkload, 3, $outputlangs->transnoentities("PlannedWorkloadShort"), 0, 'R'); $pdf->SetXY($this->posxprogress, $tab_top + 1); $pdf->MultiCell($this->posxdatestart - $this->posxprogress, 3, '%', 0, 'R'); $pdf->SetXY($this->posxdatestart, $tab_top + 1); $pdf->MultiCell($this->posxdateend - $this->posxdatestart, 3, '', 0, 'C'); $pdf->SetXY($this->posxdateend, $tab_top + 1); $pdf->MultiCell($this->page_largeur - $this->marge_droite - $this->posxdatestart, 3, '', 0, 'C'); }
$pdf->setAutoPageBreak(TRUE, 45); $pdf->AddPage('P', 'A4'); $pdf->SetFont('helvetica', 'B', 13); $pdf->SetY(56); $pdf->Cell(125, 8, $supp->getName(), 0, 0, 'L'); $pdf->SetFont('helvetica', 'B', 14); $pdf->Cell(100, 8, "DC NO: {$dcno}", 0, 1, 'L'); $pdf->SetFont('helvetica', '', 13); $pdf->Cell(125, 8, $supp->getAddressl1(), 0, 0, 'L'); $pdf->Cell(100, 8, "Date: {$dcdate}", 0, 1, 'L'); $pdf->Cell(125, 8, $supp->getAddressl2(), 0, 0, 'L'); $pdf->Cell(100, 8, "Your Ref: {$cref}", 0, 1, 'L'); $pdf->Cell(125, 8, "Phone No: " . $supp->getPhoneNo(), 0, 0, 'L'); $pdf->Cell(100, 8, "Date: {$crefdate}", 0, 1, 'L'); $pdf->ln(); $pdf->line(0, 87, 220, 87); //line before mode of dispatch $pdf->setY(86); $pdf->MultiCell(125, 16, "Please receive the following materials and acknowledge the receipt", 0, 'L', 0, 0, '', '', true, 0, false, true, 16, 'M', true); $pdf->Cell(100, 8, "Mode Of Dispatch: {$dmode}", 0, 1, 'L'); $pdf->Cell(125, 8, "", 0, 0, 'L'); $pdf->Cell(100, 8, "Status: {$dctype}", 0, 1, 'L'); $pdf->SetFont('helvetica', '', 10); $pdf->Cell(150, 8, '', 0, 1, 'L'); $pdf->line(0, 101, 220, 101); //line after mode of dispatch $pdf->line(135, 55, 135, 101); //vertical line b/w address and dc no $pdf->line(135, 72, 220, 72); //horizontal line b/w dc no and cust ref $pdf->SetFont('helvetica', 'B', 11);
/** * Show table for lines * * @param PDF $pdf Object PDF * @param string $tab_top Top position of table * @param string $tab_height Height of table (rectangle) * @param int $nexY Y * @param Translate $outputlangs Langs object * @param int $hidetop Hide top bar of array * @param int $hidebottom Hide bottom bar of array * @return void */ function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs, $hidetop = 0, $hidebottom = 0) { global $langs; $default_font_size = pdf_getPDFFontSize($outputlangs); $langs->load("main"); $langs->load("bills"); if (empty($hidetop)) { $pdf->SetFont('', 'B', $default_font_size - 2); $pdf->SetXY(10, $tab_top); $pdf->MultiCell(10, 5, "LS", 0, 'C', 1); $pdf->line(20, $tab_top, 20, $tab_top + $tab_height); $pdf->SetXY(20, $tab_top); $pdf->MultiCell(10, 5, "LR", 0, 'C', 1); $pdf->line(30, $tab_top, 30, $tab_top + $tab_height); $pdf->SetXY(30, $tab_top); $pdf->MultiCell(20, 5, $outputlangs->transnoentities("Ref"), 0, 'C', 1); $pdf->SetXY(50, $tab_top); $pdf->MultiCell(90, 5, $outputlangs->transnoentities("Description"), 0, 'L', 1); $pdf->SetXY(140, $tab_top); $pdf->MultiCell(30, 5, $outputlangs->transnoentities("QtyOrdered"), 0, 'C', 1); $pdf->SetXY(170, $tab_top); $pdf->MultiCell(30, 5, $outputlangs->transnoentities("QtyToShip"), 0, 'C', 1); } $pdf->Rect(10, $tab_top, 190, $tab_height); }
} } $pdf = new PDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); //$pdf->AliasNbPages(); $pdf->setAutoPageBreak(TRUE, 45); $pdf->AddPage('P', 'A4'); $pdf->SetFont('helvetica', 'B', 13); $pdf->SetY(56); $pdf->SetFont('helvetica', 'B', 11); $pdf->setY(100); $pdf->Cell(20, 8, "SL NO", 0, 0, 'L'); $pdf->Cell(80, 8, "Description", 0, 0, 'L'); $pdf->Cell(20, 8, "Qty", 0, 0, 'C'); $pdf->Cell(30, 8, "Unit Price " . $currency, 0, 0, 'C'); $pdf->Cell(30, 8, "Discount", 0, 0, 'C'); $pdf->line(0, 110, 220, 110); //line after slno, desc and remarks $pdf->ln(6); $j = 0; while ($j < count($description)) { if ($description[$j] != '') { $pdf->ln(8); $pdf->Cell(10, 8, $j + 1, 0, 0, 'C'); $pdf->MultiCell(95, 8, $description[$j], 0, 'L', 0, 0, '', '', true, 0, false, true, 8, 'M', true); $pdf->Cell(15, 8, $itemqty[$j], 0, 0, 'C'); $pdf->Cell(30, 8, $price[$j], 0, 0, 'R'); $pdf->MultiCell(30, 8, $discount[$j], 0, '', 0, 0, '', '', true, 0, false, true, 8, 'M', true); if ($pdf->getY() > $pdf->getPageHeight() - 56.5) { $pdf->rollbackTransaction(true); $pdf->AddPage(); $pdf->setY(100);
/** * Show top header of page. * * @param PDF $pdf Object PDF * @param int $page Object to show * @param int $showaddress 0=no, 1=yes * @param Translate $outputlangs Object lang for output * @return void */ function _pagehead(&$pdf, $page, $showaddress, $outputlangs) { global $langs; // Do not add the BACKGROUND as this is a report //pdf_pagehead($pdf,$outputlangs,$this->page_hauteur); $default_font_size = pdf_getPDFFontSize($outputlangs); $title = $outputlangs->transnoentities("ListOfCustomerPayments"); $title .= ' - ' . dol_print_date(dol_mktime(0, 0, 0, $this->month, 1, $this->year), "%B %Y", false, $outputlangs, true); $pdf->SetFont('', 'B', $default_font_size + 1); $pdf->SetXY($this->marge_gauche, 10); $pdf->MultiCell($this->page_largeur - $this->marge_droite - $this->marge_gauche, 2, $title, 0, 'C'); $pdf->SetFont('', '', $default_font_size); $pdf->SetXY($this->posxdate, 16); $pdf->MultiCell(80, 2, $outputlangs->transnoentities("DateBuild") . " : " . dol_print_date(time(), "day", false, $outputlangs, true), 0, 'L'); $pdf->SetXY($this->posxdate, 22); $pdf->MultiCell(80, 2, $outputlangs->transnoentities("Page") . " : " . $page, 0, 'L'); // Title line $pdf->SetXY($this->posxdate, $this->tab_top + 2); $pdf->MultiCell($this->posxpaymenttype - $this->posxdate, 2, 'Date'); $pdf->line($this->posxpaymenttype - 1, $this->tab_top, $this->posxpaymenttype - 1, $this->tab_top + $this->tab_height + 10); $pdf->SetXY($this->posxpaymenttype, $this->tab_top + 2); $pdf->MultiCell($this->posxinvoice - $this->posxpaymenttype, 2, $outputlangs->transnoentities("PaymentMode"), 0, 'L'); $pdf->line($this->posxinvoice - 1, $this->tab_top, $this->posxinvoice - 1, $this->tab_top + $this->tab_height + 10); $pdf->SetXY($this->posxinvoice, $this->tab_top + 2); $pdf->MultiCell($this->posxinvoiceamount - $this->posxinvoice, 2, $outputlangs->transnoentities("Invoice"), 0, 'L'); $pdf->line($this->posxinvoiceamount - 1, $this->tab_top, $this->posxinvoiceamount - 1, $this->tab_top + $this->tab_height + 10); $pdf->SetXY($this->posxinvoiceamount, $this->tab_top + 2); $pdf->MultiCell($this->posxpaymentamount - $this->posxinvoiceamount - 1, 2, $outputlangs->transnoentities("AmountInvoice"), 0, 'R'); $pdf->line($this->posxpaymentamount - 1, $this->tab_top, $this->posxpaymentamount - 1, $this->tab_top + $this->tab_height + 10); $pdf->SetXY($this->posxpaymentamount, $this->tab_top + 2); $pdf->MultiCell($this->page_largeur - $this->marge_droite - $this->posxpaymentamount - 1, 2, $outputlangs->transnoentities("AmountPayment"), 0, 'R'); $pdf->line($this->marge_gauche, $this->tab_top + 10, $this->page_largeur - $this->marge_droite, $this->tab_top + 10); $pdf->Rect($this->marge_gauche, $this->tab_top, $this->page_largeur - $this->marge_gauche - $this->marge_droite, $this->tab_height + 10); }
/** * Show footer of page. Need this->emetteur object * * @param PDF $pdf PDF * @param Object $object Object to show * @param Translate $outputlangs Object lang for output * @param int $hidefreetext 1=Hide free text * @return void */ function _pagefoot(&$pdf, $object, $outputlangs, $hidefreetext = 0) { global $conf; $default_font_size = pdf_getPDFFontSize($outputlangs); //return pdf_pagefoot($pdf,$outputlangs,'BANK_CHEQUERECEIPT_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object); $paramfreetext = 'BANK_CHEQUERECEIPT_FREE_TEXT'; $marge_basse = $this->marge_basse; $marge_gauche = $this->marge_gauche; $page_hauteur = $this->page_hauteur; // Line of free text $line = !empty($conf->global->{$paramfreetext}) ? $outputlangs->convToOutputCharset($conf->global->{$paramfreetext}) : ""; $pdf->SetFont('', '', $default_font_size - 3); $pdf->SetDrawColor(224, 224, 224); // On positionne le debut du bas de page selon nbre de lignes de ce bas de page $nbofline = dol_nboflines_bis($line, 0, $outputlangs->charset_output); //print 'e'.$line.'t'.dol_nboflines($line);exit; $posy = $marge_basse + $nbofline * 3; if ($line) { $pdf->SetXY($marge_gauche, -$posy); $pdf->MultiCell(20000, 3, $line, 0, 'L', 0); // Use a large value 20000, to not have automatic wrap. This make user understand, he need to add CR on its text. $posy -= $nbofline * 3; // 6 of ligne + 3 of MultiCell } $pdf->SetY(-$posy); $pdf->line($marge_gauche, $page_hauteur - $posy, 200, $page_hauteur - $posy); $posy--; /*if ($line1) { $pdf->SetXY($marge_gauche,-$posy); $pdf->MultiCell(200, 2, $line1, 0, 'C', 0); } if ($line2) { $posy-=3; $pdf->SetXY($marge_gauche,-$posy); $pdf->MultiCell(200, 2, $line2, 0, 'C', 0); }*/ // Show page nb only on iso languages (so default Helvetica font) if (pdf_getPDFFont($outputlangs) == 'Helvetica') { $pdf->SetXY(-20, -$posy); $pdf->MultiCell(11, 2, $pdf->PageNo() . '/' . $pdf->getAliasNbPages(), 0, 'R', 0); } }
/** * Rect pdf * * @param PDF $pdf Object PDF * @param float $x Abscissa of first point * @param float $y Ordinate of first point * @param float $l ?? * @param float $h ?? * @param int $hidetop 1=Hide top bar of array and title, 0=Hide nothing, -1=Hide only title * @param int $hidebottom Hide bottom * @return void */ function printRect($pdf, $x, $y, $l, $h, $hidetop = 0, $hidebottom = 0) { if (empty($hidetop) || $hidetop == -1) { $pdf->line($x, $y, $x + $l, $y); } $pdf->line($x + $l, $y, $x + $l, $y + $h); if (empty($hidebottom)) { $pdf->line($x + $l, $y + $h, $x, $y + $h); } $pdf->line($x, $y + $h, $x, $y); }
$str = substr($str, $prev); // [X] $y1 = $pdf->GetY(); $x1 = $pdf->GetX() + $pdf->lMargin; $y2 = $y1 + 4; $x2 = $pdf->lMargin - 2; while ($indent != "") { // $y1=$y1+$vspacing; $x1 = $pdf->GetX(); // $y2=$y1+6; $x2 = $x1 + 1; $ind = substr($indent, 0, 1); $indent = substr($indent, 1); switch ($ind) { case "I": $pdf->line($x1, $y1 + $vspacing, $x1, $y2 + $vspacing); $pdf->SetXY($x2, $y1 + 1 + $vspacing); break; case "T": // T $pdf->line($x1, $y1 + $vspacing, $x1, $y2 + $vspacing); // "|" $pdf->line($x1, $y2 - 1 + $vspacing, $x2, $y2 - 1 + $vspacing); // "-" $pdf->SetXY($x2, $y2 + $vspacing); break; case "L": // L $pdf->line($x1, $y1 + $vspacing, $x1, $y2 - 1 + $vspacing); // | $pdf->line($x1, $y2 - 1 + $vspacing, $x2, $y2 - 1 + $vspacing);
} $pdf = new PDF("P", "mm", "a5"); $pdf->AddPage(); $pdf->SetFont('Arial', '', 10); //Table with 20 rows and 4 columns $pdf->SetWidths(array(24, 90, 16, 40)); srand(microtime() * 1000000); $subtotal = 0; for ($i = 0; $i < count($_SESSION["basket"]); $i++) { $quantity = $_SESSION["basket"][$i]["quantity"]; $price = $_SESSION["basket"][$i]["Item"]->Price; $pdf->Row(array($quantity . "x", $_SESSION["basket"][$i]["Item"]->Name . ": " . $_SESSION["basket"][$i]["Item"]->Description, $price * $quantity)); $subtotal += $price * $quantity; } $pdf->SetFont('Arial', 'B', 12); $pdf->MultiCell(130, 10, " Subtotal " . iconv("UTF-8", "ISO-8859-1", "£") . $subtotal, 0, "R"); $pdf->SetFont('Arial', '', 10); $pdf->line(10, $pdf->GetY(), 140, $pdf->GetY()); $pdf->MultiCell(130, 5, "Note: Please make sure my food is not spicy!", 0, "L"); $pdf->Ln(); $pdf->MultiCell(60, 5, "Customer Info:", 0, "L"); $pdf->MultiCell(60, 5, "Saber Hamidi", 0, "L"); $pdf->MultiCell(60, 5, "100 Ourwebsite Road", 0, "L"); $pdf->MultiCell(60, 5, "Southampton", 0, "L"); $pdf->MultiCell(60, 5, "SO15 3FF", 0, "L"); $pdf->Ln(); $pdf->MultiCell(60, 5, "Tell: 07788998764", 0, "L"); $pdf->Ln(); $pdf->MultiCell(80, 5, "Paying upon Delivery - (The order is NOT PAID!)", 0, "L"); $filename = "Orders/test.pdf"; $pdf->Output();
/** * Show footer of page for PDF generation * * @param PDF $pdf The PDF factory * @param Translate $outputlangs Object lang for output * @param string $paramfreetext Constant name of free text * @param Societe $fromcompany Object company * @param int $marge_basse Margin bottom we use for the autobreak * @param int $marge_gauche Margin left (no more used) * @param int $page_hauteur Page height (no more used) * @param Object $object Object shown in PDF * @param int $showdetails Show company details into footer. This param seems to not be used by standard version. (1=Show address, 2=Show managers, 3=Both) * @param int $hidefreetext 1=Hide free text, 0=Show free text * @return int Return height of bottom margin including footer text */ function pdf_pagefoot(&$pdf, $outputlangs, $paramfreetext, $fromcompany, $marge_basse, $marge_gauche, $page_hauteur, $object, $showdetails = 0, $hidefreetext = 0) { global $conf, $user; $outputlangs->load("dict"); $line = ''; $dims = $pdf->getPageDimensions(); // Line of free text if (empty($hidefreetext) && !empty($conf->global->{$paramfreetext})) { // Make substitution $substitutionarray = array('__FROM_NAME__' => $fromcompany->name, '__FROM_EMAIL__' => $fromcompany->email, '__TOTAL_TTC__' => $object->total_ttc, '__TOTAL_HT__' => $object->total_ht, '__TOTAL_VAT__' => $object->total_vat); complete_substitutions_array($substitutionarray, $outputlangs, $object); $newfreetext = make_substitutions($conf->global->{$paramfreetext}, $substitutionarray); $line .= $outputlangs->convToOutputCharset($newfreetext); } // First line of company infos $line1 = ""; $line2 = ""; $line3 = ""; $line4 = ""; if ($showdetails) { // Company name if ($fromcompany->name) { $line1 .= ($line1 ? " - " : "") . $outputlangs->transnoentities("RegisteredOffice") . ": " . $fromcompany->name; } // Address if ($fromcompany->address) { $line1 .= ($line1 ? " - " : "") . $fromcompany->address; } // Zip code if ($fromcompany->zip) { $line1 .= ($line1 ? " - " : "") . $fromcompany->zip; } // Town if ($fromcompany->town) { $line1 .= ($line1 ? " " : "") . $fromcompany->town; } // Phone if ($fromcompany->phone) { $line1 .= ($line1 ? " - " : "") . $outputlangs->transnoentities("Phone") . ": " . $fromcompany->phone; } // Fax if ($fromcompany->fax) { $line1 .= ($line1 ? " - " : "") . $outputlangs->transnoentities("Fax") . ": " . $fromcompany->fax; } // URL if ($fromcompany->url) { $line2 .= ($line2 ? " - " : "") . $fromcompany->url; } // Email if ($fromcompany->email) { $line2 .= ($line2 ? " - " : "") . $fromcompany->email; } } if ($showdetails || $fromcompany->country_code == 'DE') { // Managers if ($fromcompany->managers) { $line2 .= ($line2 ? " - " : "") . $fromcompany->managers; } } // Line 3 of company infos // Juridical status if ($fromcompany->forme_juridique_code) { $line3 .= ($line3 ? " - " : "") . $outputlangs->convToOutputCharset(getFormeJuridiqueLabel($fromcompany->forme_juridique_code)); } // Capital if ($fromcompany->capital) { $tmpamounttoshow = price2num($fromcompany->capital); // This field is a free string if (is_numeric($tmpamounttoshow) && $tmpamounttoshow > 0) { $line3 .= ($line3 ? " - " : "") . $outputlangs->transnoentities("CapitalOf", price($tmpamounttoshow, 0, $outputlangs, 0, 0, 0, $conf->currency)); } else { $line3 .= ($line3 ? " - " : "") . $outputlangs->transnoentities("CapitalOf", $tmpamounttoshow, $outputlangs); } } // Prof Id 1 if ($fromcompany->idprof1 && ($fromcompany->country_code != 'FR' || !$fromcompany->idprof2)) { $field = $outputlangs->transcountrynoentities("ProfId1", $fromcompany->country_code); if (preg_match('/\\((.*)\\)/i', $field, $reg)) { $field = $reg[1]; } $line3 .= ($line3 ? " - " : "") . $field . ": " . $outputlangs->convToOutputCharset($fromcompany->idprof1); } // Prof Id 2 if ($fromcompany->idprof2) { $field = $outputlangs->transcountrynoentities("ProfId2", $fromcompany->country_code); if (preg_match('/\\((.*)\\)/i', $field, $reg)) { $field = $reg[1]; } $line3 .= ($line3 ? " - " : "") . $field . ": " . $outputlangs->convToOutputCharset($fromcompany->idprof2); } // Line 4 of company infos // Prof Id 3 if ($fromcompany->idprof3) { $field = $outputlangs->transcountrynoentities("ProfId3", $fromcompany->country_code); if (preg_match('/\\((.*)\\)/i', $field, $reg)) { $field = $reg[1]; } $line4 .= ($line4 ? " - " : "") . $field . ": " . $outputlangs->convToOutputCharset($fromcompany->idprof3); } // Prof Id 4 if ($fromcompany->idprof4) { $field = $outputlangs->transcountrynoentities("ProfId4", $fromcompany->country_code); if (preg_match('/\\((.*)\\)/i', $field, $reg)) { $field = $reg[1]; } $line4 .= ($line4 ? " - " : "") . $field . ": " . $outputlangs->convToOutputCharset($fromcompany->idprof4); } // IntraCommunautary VAT if ($fromcompany->tva_intra != '') { $line4 .= ($line4 ? " - " : "") . $outputlangs->transnoentities("VATIntraShort") . ": " . $outputlangs->convToOutputCharset($fromcompany->tva_intra); } $pdf->SetFont('', '', 7); $pdf->SetDrawColor(224, 224, 224); // The start of the bottom of this page footer is positioned according to # of lines $freetextheight = 0; if ($line) { $width = 20000; $align = 'L'; // By default, ask a manual break: We use a large value 20000, to not have automatic wrap. This make user understand, he need to add CR on its text. if (!empty($conf->global->MAIN_USE_AUTOWRAP_ON_FREETEXT)) { $width = 200; $align = 'C'; } $freetextheight = $pdf->getStringHeight($width, $line); } $marginwithfooter = $marge_basse + $freetextheight + (!empty($line1) ? 3 : 0) + (!empty($line2) ? 3 : 0) + (!empty($line3) ? 3 : 0) + (!empty($line4) ? 3 : 0); $posy = $marginwithfooter + 0; if ($line) { $pdf->SetXY($dims['lm'], -$posy); $pdf->MultiCell(0, 3, $line, 0, $align, 0); $posy -= $freetextheight; } $pdf->SetY(-$posy); $pdf->line($dims['lm'], $dims['hk'] - $posy, $dims['wk'] - $dims['rm'], $dims['hk'] - $posy); $posy--; if (!empty($line1)) { $pdf->SetFont('', 'B', 7); $pdf->SetXY($dims['lm'], -$posy); $pdf->MultiCell($dims['wk'] - $dims['rm'], 2, $line1, 0, 'C', 0); $posy -= 3; $pdf->SetFont('', '', 7); } if (!empty($line2)) { $pdf->SetFont('', 'B', 7); $pdf->SetXY($dims['lm'], -$posy); $pdf->MultiCell($dims['wk'] - $dims['rm'], 2, $line2, 0, 'C', 0); $posy -= 3; $pdf->SetFont('', '', 7); } if (!empty($line3)) { $pdf->SetXY($dims['lm'], -$posy); $pdf->MultiCell($dims['wk'] - $dims['rm'], 2, $line3, 0, 'C', 0); } if (!empty($line4)) { $posy -= 3; $pdf->SetXY($dims['lm'], -$posy); $pdf->MultiCell($dims['wk'] - $dims['rm'], 2, $line4, 0, 'C', 0); } // Show page nb only on iso languages (so default Helvetica font) if (strtolower(pdf_getPDFFont($outputlangs)) == 'helvetica') { $pdf->SetXY(-20, -$posy); //print 'xxx'.$pdf->PageNo().'-'.$pdf->getAliasNbPages().'-'.$pdf->getAliasNumPage();exit; if (empty($conf->global->MAIN_USE_FPDF)) { $pdf->MultiCell(13, 2, $pdf->PageNo() . '/' . $pdf->getAliasNbPages(), 0, 'R', 0); } else { $pdf->MultiCell(13, 2, $pdf->PageNo() . '/{nb}', 0, 'R', 0); } } return $marginwithfooter; }
/** * Show table for lines * * @param PDF $pdf Object PDF * @param string $tab_top Top position of table * @param string $tab_height Height of table (rectangle) * @param int $nexY Y * @param Translate $outputlangs Langs object * @param int $hidetop Hide top bar of array * @param int $hidebottom Hide bottom bar of array * @return void */ function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs, $hidetop = 0, $hidebottom = 0) { global $conf, $mysoc; $default_font_size = pdf_getPDFFontSize($outputlangs); $pdf->SetDrawColor(128, 128, 128); // Rect prend une longueur en 3eme param $pdf->Rect($this->marge_gauche, $tab_top, $this->page_largeur - $this->marge_gauche - $this->marge_droite, $tab_height); // line prend une position y en 3eme param $pdf->line($this->marge_gauche, $tab_top + 6, $this->page_largeur - $this->marge_droite, $tab_top + 6); $pdf->SetTextColor(0, 0, 0); $pdf->SetFont('', '', $default_font_size); $pdf->SetXY($this->posxref - 1, $tab_top + 2); $pdf->MultiCell(80, 2, $outputlangs->transnoentities("Tasks"), '', 'L'); }