Skip to content

Instantly share code, notes, and snippets.

@mhrubel
Forked from maevelander/invoicepdf.tpl
Created February 8, 2019 14:52
Show Gist options
  • Save mhrubel/81b1c9adfd39ad43218e881a6e0acfa3 to your computer and use it in GitHub Desktop.
Save mhrubel/81b1c9adfd39ad43218e881a6e0acfa3 to your computer and use it in GitHub Desktop.
Custom Invoice PDF template for WHMCS
<?php
# Logo
$logoFilename = 'placeholder.png';
if (file_exists(ROOTDIR . '/assets/img/logo.png')) {
$logoFilename = 'logo.png';
} elseif (file_exists(ROOTDIR . '/assets/img/logo.jpg')) {
$logoFilename = 'logo.jpg';
}
$pdf->Image(ROOTDIR . '/assets/img/' . $logoFilename, 15, 25, 75);
# Invoice Status
$statustext = $_LANG['invoices'.strtolower($status)];
$pdf->SetFillColor(223,85,74);
$pdf->SetDrawColor(171,49,43);
if ($status=="Paid") {
$pdf->SetFillColor(151,223,74);
$pdf->SetDrawColor(110,192,70);
}elseif ($status=="Cancelled") {
$pdf->SetFillColor(200);
$pdf->SetDrawColor(140);
} elseif ($status=="Refunded") {
$pdf->SetFillColor(131,182,218);
$pdf->SetDrawColor(91,136,182);
} elseif ($status=="Collections") {
$pdf->SetFillColor(3,3,2);
$pdf->SetDrawColor(127);
}
$pdf->SetXY(0,0);
$pdf->SetFont('freesans','B',28);
$pdf->SetTextColor(255);
$pdf->SetLineWidth(0.75);
$pdf->StartTransform();
$pdf->Rotate(-35,100,225);
$pdf->Cell(100,18,strtoupper($statustext),'TB',0,'C','1');
$pdf->StopTransform();
$pdf->SetTextColor(0);
# Company Details
$pdf->SetXY(15,26);
$pdf->SetFont('freesans','',13);
$pdf->Cell(160,6,trim($companyaddress[0]),0,1,'R');
$pdf->SetFont('freesans','',9);
for ( $i = 1; $i <= ((count($companyaddress)>6) ? count($companyaddress) : 6); $i += 1) {
$pdf->Cell(160,4,trim($companyaddress[$i]),0,1,'R');
}
$pdf->Ln(5);
# Header Bar
$invoiceprefix = $_LANG["invoicenumber"];
/*
** This code should be uncommented for EU companies using the sequential invoice numbering so that when unpaid it is shown as a proforma invoice **
if ($status!="Paid") {
$invoiceprefix = $_LANG["proformainvoicenumber"];
}
*/
$pdf->SetFont('freesans','B',15);
$pdf->SetFillColor(239);
$pdf->Cell(0,8,$invoiceprefix.$invoicenum,0,1,'L','1');
$pdf->SetFont('freesans','',10);
$pdf->Cell(0,6,$_LANG["invoicesdatecreated"].': '.$datecreated.'',0,1,'L','1');
$pdf->Cell(0,6,$_LANG["invoicesdatedue"].': '.$duedate.'',0,1,'L','1');
$pdf->Ln(10);
$startpage = $pdf->GetPage();
# Clients Details
$addressypos = $pdf->GetY();
$pdf->SetFont('freesans','B',10);
$pdf->Cell(0,4,$_LANG["invoicesinvoicedto"],0,1);
$pdf->SetFont('freesans','',9);
if ($clientsdetails["companyname"]) {
$pdf->Cell(0,4,$clientsdetails["companyname"],0,1,'L');
$pdf->Cell(0,4,$_LANG["invoicesattn"].": ".$clientsdetails["firstname"]." ".$clientsdetails["lastname"],0,1,'L');
} else {
$pdf->Cell(0,4,$clientsdetails["firstname"]." ".$clientsdetails["lastname"],0,1,'L');
}
$pdf->Cell(0,4,$clientsdetails["address1"],0,1,'L');
if ($clientsdetails["address2"]) {
$pdf->Cell(0,4,$clientsdetails["address2"],0,1,'L');
}
$pdf->Cell(0,4,$clientsdetails["city"].", ".$clientsdetails["state"].", ".$clientsdetails["postcode"],0,1,'L');
$pdf->Cell(0,4,$clientsdetails["country"],0,1,'L');
if ($customfields) {
$pdf->Ln();
foreach ($customfields AS $customfield) {
$pdf->Cell(0,4,$customfield['fieldname'].': '.$customfield['value'],0,1,'L');
}
}
$pdf->Ln(10);
# Invoice Items
$tblhtml = '<table width="100%" bgcolor="#ccc" cellspacing="1" cellpadding="2" border="0">
<tr height="30" bgcolor="#efefef" style="font-weight:bold;text-align:center;">
<td width="80%">'.$_LANG['invoicesdescription'].'</td>
<td width="20%">'.$_LANG['quotelinetotal'].'</td>
</tr>';
foreach ($invoiceitems AS $item) {
$tblhtml .= '
<tr bgcolor="#fff">
<td align="left">'.nl2br($item['description']).'<br /></td>
<td align="center">'.$item['amount'].'</td>
</tr>';
}
$tblhtml .= '
<tr height="30" bgcolor="#efefef" style="font-weight:bold;">
<td align="right">'.$_LANG['invoicessubtotal'].'</td>
<td align="center">'.$subtotal.'</td>
</tr>';
if ($taxname) $tblhtml .= '
<tr height="30" bgcolor="#efefef" style="font-weight:bold;">
<td align="right">'.$taxrate.'% '.$taxname.'</td>
<td align="center">'.$tax.'</td>
</tr>';
if ($taxname2) $tblhtml .= '
<tr height="30" bgcolor="#efefef" style="font-weight:bold;">
<td align="right">'.$taxrate2.'% '.$taxname2.'</td>
<td align="center">'.$tax2.'</td>
</tr>';
$tblhtml .= '
<tr height="30" bgcolor="#efefef" style="font-weight:bold;">
<td align="right">'.$_LANG['invoicescredit'].'</td>
<td align="center">'.$credit.'</td>
</tr>
<tr height="30" bgcolor="#efefef" style="font-weight:bold;">
<td align="right">'.$_LANG['invoicestotal'].'</td>
<td align="center">'.$total.'</td>
</tr>
</table>';
$pdf->writeHTML($tblhtml, true, false, false, false, '');
$pdf->Ln(5);
# Transactions
$pdf->SetFont('freesans','B',12);
$pdf->Cell(0,4,$_LANG["invoicestransactions"],0,1);
$pdf->Ln(5);
$pdf->SetFont('freesans','',9);
$tblhtml = '<table width="100%" bgcolor="#ccc" cellspacing="1" cellpadding="2" border="0">
<tr height="30" bgcolor="#efefef" style="font-weight:bold;text-align:center;">
<td width="25%">'.$_LANG['invoicestransdate'].'</td>
<td width="25%">'.$_LANG['invoicestransgateway'].'</td>
<td width="30%">'.$_LANG['invoicestransid'].'</td>
<td width="20%">'.$_LANG['invoicestransamount'].'</td>
</tr>';
if (!count($transactions)) {
$tblhtml .= '
<tr bgcolor="#fff">
<td colspan="4" align="center">'.$_LANG['invoicestransnonefound'].'</td>
</tr>';
} else {
foreach ($transactions AS $trans) {
$tblhtml .= '
<tr bgcolor="#fff">
<td align="center">'.$trans['date'].'</td>
<td align="center">'.$trans['gateway'].'</td>
<td align="center">'.$trans['transid'].'</td>
<td align="center">'.$trans['amount'].'</td>
</tr>';
}
}
$tblhtml .= '
<tr height="30" bgcolor="#efefef" style="font-weight:bold;">
<td colspan="3" align="right">'.$_LANG['invoicesbalance'].'</td>
<td align="center">'.$balance.'</td>
</tr>
</table>';
$pdf->writeHTML($tblhtml, true, false, false, false, '');
# Notes
if ($notes) {
$pdf->Ln(5);
$pdf->SetFont('freesans','',9);
$pdf->MultiCell(170,5,$_LANG["invoicesnotes"].": $notes");
}
#Payment Method
$pdf->SetFont('freesans','B',12);
$pdf->Cell(0,4,"HOW TO PAY",0,1,'C');
$pdf->Ln(5);
$pdf->SetFont('freesans','',9);
$paymethhtml = '<table width="100%" cellspacing="1" cellpadding="2" border="0">
<tr height="30">
<td width="33%" style="text-align:left;"><strong>Cheque</strong><br><br>Please send cheque payable to:<br />Enigma Digital<br />23/25 Murray St<br />Como WA 6152</td>
<td width="34%" style="text-align:left;"><strong>Bank Transfer</strong><br><br>Account Name: Enigma Digital<br>BSB: 016268<br>Account No: 181357104<br>Ref: #'.$invoicenum.'</td>
<td width="33%" style="text-align:left;"><strong>Credit Card</strong><br><br>Please phone us with your card details to pay with Visa or Mastercard</td>
</tr></table>';
$pdf->writeHTML($paymethhtml, true, false, false, false, '');
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment