Difference between revisions of "PDF Invoice Customisation"

From WHMCS Documentation

Line 1: Line 1:
There are two invoice templates. One is for the client area invoice ('''viewinvoice.tpl'''). The other is for the PDF version of an invoice ('''invoicepdf.tpl'''). The templates are in the active WHMCS template folder.
+
There are two invoice templates. One is for the system theme invoice template ('''viewinvoice.tpl'''). The other is for the PDF version of an invoice ('''invoicepdf.tpl'''). The template files are in the active WHMCS system theme template folder.
 
+
 
==Modifying the Logo==
 
==Modifying the Logo==
 
+
The logo on the PDF invoices is in the '''/assets/img/''' folder. To change this logo, upload the required logo to the '''/assets/img/''' folder. The name of the file should be "logo.jpg" or "logo.png".
+
The logo on the PDF invoices is in the '''/assets/img/''' folder. To change this logo, upload the required logo to the '''/assets/img/''' folder. The name of the file should be <tt>logo.jpg</tt> or <tt>logo.png</tt>.
 
+
You can change the width of the logo image in the '''invoicepdf.tpl''' template file. On line 10, adjust the last number, "75," before the closing bracket (<tt>);</tt>). This variable defines the image width. A developer can then increase or decrease this.
+
You can change the width of the logo image in the <tt>invoicepdf.tpl</tt> template file. On line 10, adjust the last number (<tt>75</tt>) before the closing bracket (<tt>);</tt>). This variable defines the image width. A developer can then increase or decrease this.
 
+
 
==Header & Footer==
 
==Header & Footer==
 
+
<div class="docs-alert-info"><i class="fa fa-info-circle"></i> This section describes a feature available in version 7.0 and above.</div>
+
<div class="docs-alert-info">
 
+
<i class="fa fa-info-circle"></i>
It is possible to cause a header or footer to automatically repeat on every page of a multi-page PDF invoice.
+
This section describes a feature available in WHMCS 7.0 and above.
If they are present in your theme, the system will include the following template files for every rendered PDF page:
+
</div>
 
+
*invoicepdfheader.tpl
+
It is possible to cause a header or footer to automatically repeat on every page of a multi-page PDF invoice. If they are present in your theme, the system will include the following system theme template files for every rendered PDF page:
 
+
*invoicepdffooter.tpl
+
* <tt>invoicepdfheader.tpl</tt>
 
+
* <tt>invoicepdffooter.tpl</tt>
The system only requires the respective header or footer files. For example, for a customized footer on each page, create a invoicepdffooter.tpl file. You must store these files in the same directory as the invoicepdf.tpl template file.
+
During template processing, Smarty will provide each of these template files the same variables as invoicepdf.tpl.
+
The system only requires the respective header or footer files. For example, for a customized footer on each page, create a <tt>invoicepdffooter.tpl</tt> file. You must store these files in the same directory as the <tt>invoicepdf.tpl</tt> system theme template file.
 
+
==Editing Text & Content==
+
During template processing, Smarty will provide each of these system theme template files with the same variables as <tt>invoicepdf.tpl</tt>.
 
+
A developer can customise the PDF invoices. This includes adding or removing text, altering the layout, or adding further images and formatting. Do this by editing the template file '''invoicepdf.tpl''' in the active template folder. The file contains all the code relating to the layout and display of the invoice in its PDF format. You will need a basic working knowledge of PHP coding to understand and modify the file.
+
==Editing Text and Content==
 
+
<div class="docs-related-pages">The system generates PDFs using TCPDF. A full list of functions to help you build the template is [https://tcpdf.org/docs/srcdoc/TCPDF/class-TCPDF/ available].</div>
+
A developer can customise the PDF invoices. This includes adding or removing text, altering the layout, or adding further images and formatting. Do this by editing the <tt>invoicepdf.tpl</tt> system theme template file in the active template folder. The file contains all the code relating to the layout and display of the invoice in its PDF format. You will need a basic working knowledge of PHP coding to understand and modify the file.
 
+
 +
<div class="docs-related-pages">
 +
The system generates PDFs using TCPDF. See the [https://tcpdf.org/docs/srcdoc/TCPDF/class-TCPDF/ full list of functions] to build this.
 +
</div>
 +
 
==Displaying Custom Fields==
 
==Displaying Custom Fields==
 
+
 
It is possible to display custom fields on printable and PDF invoices. To do this, select '''Configuration (<i class="fa fa-wrench" aria-hidden="true"></i>) > System Settings > Custom Fields > Show on Invoice''' or, prior to WHMCS 8.0, '''Setup > Custom Client Fields > Show on Invoice'''.
 
It is possible to display custom fields on printable and PDF invoices. To do this, select '''Configuration (<i class="fa fa-wrench" aria-hidden="true"></i>) > System Settings > Custom Fields > Show on Invoice''' or, prior to WHMCS 8.0, '''Setup > Custom Client Fields > Show on Invoice'''.
 
+
The following variables are available for use in the invoicepdf.tpl file. Obtain further data by running SQL queries from within the PHP template.
+
The following variables are available for use in the <tt>invoicepdf.tpl</tt> file:
 
+
*$invoiceid — The ID of the invoice.
+
* <tt>$invoiceid</tt> — The ID of the invoice.
*$invoicenum — The custom number of the invoice (only set this when you have enabled proforma or sequential invoicing).
+
* <tt>$invoicenum</tt> — The custom number of the invoice (only set this when you have enabled proforma or sequential invoicing).
*$datecreated — The creation date of the invoice.
+
* <tt>$datecreated</tt> — The creation date of the invoice.
*$duedate — The due date of the invoice.
+
* <tt>$duedate</tt> — The due date of the invoice.
*$datepaid — The paid date and time, if invoice status is Paid.
+
* <tt>$datepaid</tt> — The paid date and time, if invoice status is '''Paid'''.
*$userid — The client ID number.
+
* <tt>$userid</tt> — The client ID number.
*$clientsdetails["firstname"] — The client information First Name.
+
* <tt>$clientsdetails["firstname"]</tt> — The client information '''First Name'''.
*$clientsdetails["lastname"] — The client information Last Name.
+
* <tt>$clientsdetails["lastname"]</tt> — The client information '''Last Name'''.
*$clientsdetails["companyname"] — The client information Company Name.
+
* <tt>$clientsdetails["companyname"]</tt> — The client information '''Company Name'''.
*$clientsdetails["fieldname"] — Other client information values, where <tt>fieldname</tt> is that item's name.
+
* <tt>$clientsdetails["fieldname"]</tt> — Other client information values, where <tt>fieldname</tt> is that item's name.
*$customfields — An array of Client Custom Fields (for example, $customfields['Custom Field Name']). See [[Easy Translation]] for help with dynamically translating Custom Field Names.
+
* <tt>$customfields</tt> — An array of '''Client Custom Fields''' (for example, $customfields['Custom Field Name']). See [[Easy Translation]] for help with dynamically translating '''Custom Field Names'''.
*$subtotal
+
* <tt>$subtotal</tt>
*$tax
+
* <tt>$tax</tt>
*$taxrate
+
* <tt>$taxrate</tt>
*$credit
+
* <tt>$credit</tt>
*$total
+
* <tt>$total</tt>
*$status — Paid, unpaid or cancelled.
+
* <tt>$status</tt> — Paid, unpaid, or cancelled.
*$paymentmethod
+
* <tt>$paymentmethod</tt>
*$notes
+
* <tt>$notes</tt>
*$companyname — The Company Name.
+
* <tt>$companyname</tt> — The '''Company Name'''.
*$companyurl — The Default Website URL.
+
* <tt>$companyurl</tt> — The '''Default Website URL'''.
*$companyaddress — The Company Address.
+
* <tt>$companyaddress</tt> — The '''Company Address'''.
*$invoiceitems — An array of invoice items.
+
* <tt>$invoiceitems</tt> — An array of invoice items.
 
+
 +
Obtain further data by running SQL queries from within the PHP template.
 +
 
==Changing/Translating Filename==
 
==Changing/Translating Filename==
 
+
The default filename for invoices is Invoice-xxx. For quotes, this is Quote-xxx. For both, xxx is the ID of the invoice or quote. It may be desirable to change the filenames the clients see or translate into other languages. Achieve this in the same way as any text within WHMCS, by using the [[Language Files]]. Look for these strings:
+
The default filename for invoices is <tt>Invoice-xxx</tt>. For quotes, this is <tt>Quote-xxx</tt>. For both, <tt>xxx</tt> is the ID of the invoice or quote. It may be desirable to change the filenames the clients see or translate it into other languages. Achieve this in the same way as any text within WHMCS, by using the [[Language Files]]. Look for these strings:
 
+
$_LANG['invoicefilename'] = "Invoice-";
+
<div class="source-cli">
$_LANG['quotefilename'] = "Quote-";
+
$_LANG['invoicefilename'] = "Invoice-";
 
+
<br/>$_LANG['quotefilename'] = "Quote-";
 +
</div>
 +
 
==Reducing the File Size of PDFs==
 
==Reducing the File Size of PDFs==
 
+
The bulk of the file size for PDFs that WHMCS generates come from the embedded font files for UTF-8. Because the UTF-8 charset has a large range of supported characters, this means it takes up more space than, for example, the ISO-8859-1 character set. Unlike UTF-8, ISO-8859-1 only supports A-Z, 0-9, and other standard characters.
+
The bulk of the file size for PDFs that WHMCS generates come from the embedded font files for UTF-8. Because the UTF-8 charset has a large range of supported characters, this means it takes up more space than, for example, the ISO-8859-1 character set. Unlike UTF-8, ISO-8859-1 only supports A-Z, a-z, 0-9, and other standard characters.
 
+
If no clients are using special characters in their names or addresses, the system does not require UTF-8. It is then possible to reduce the size of PDF files by changing the font. To do that, go to '''Configuration (<i class="fa fa-wrench" aria-hidden="true"></i>) > System Settings > General Settings > Invoices > PDF Font Family''' or, prior to WHMCS 8.0, '''Setup > General Settings > Invoices > PDF Font Family'''. Then, change the selection from "Freesans" to "Helvetica".
+
If no clients are using special characters in their names or addresses, the system does not require UTF-8. It is then possible to reduce the size of PDF files by changing the font. To do that, go to '''Configuration (<i class="fa fa-wrench" aria-hidden="true"></i>) > System Settings > General Settings''' or, prior to WHMCS 8.0, '''Setup > General Settings''' in the '''Invoices''' tab. Then, change '''PDF Font Family''' to ''Helvetica''.
 
+
 
==Additional Fonts==
 
==Additional Fonts==
 
+
 
The use of certain special characters may not be available in the standard font. So, WHMCS supplies an alternative font type that supports Czech, Russian, Arabic, and Persian, among others.
 
The use of certain special characters may not be available in the standard font. So, WHMCS supplies an alternative font type that supports Czech, Russian, Arabic, and Persian, among others.
 
+
 
===Version 7.7 and later===
 
===Version 7.7 and later===
 
+
 
In version 7.7 and later, the system doesn't require any additional files.
 
In version 7.7 and later, the system doesn't require any additional files.
 
+
 
To make this change:
 
To make this change:
# Navigate to '''Configuration (<i class="fa fa-wrench" aria-hidden="true"></i>) > System Settings > General Settings > Invoices''' or, prior to WHMCS 8.0, '''Setup > General Settings > Invoices'''.
+
# Navigate to '''Configuration (<i class="fa fa-wrench" aria-hidden="true"></i>) > System Settings > General Settings''' or, prior to WHMCS 8.0, '''Setup > General Settings''' and select the '''Invoices''' tab.
# Select the "Dejavusans" option for the ''PDF Font Family'' setting.
+
# Select ''Dejavusans'' for the '''PDF Font Family''' setting.
# Click Save Changes.
+
# Click '''Save Changes.
 
+
 
===Version 7.6 and earlier===
 
===Version 7.6 and earlier===
 
+
 
To make this change:
 
To make this change:
 
# Download the font files from the URL below.
 
# Download the font files from the URL below.
# Upload into the '''/vendor/tecnickcom/tcpdf/fonts/''' folder.
+
# Upload them to <tt>/vendor/tecnickcom/tcpdf/fonts/</tt>.
# Specify the custom font name ''dejavusans'' in '''Configuration (<i class="fa fa-wrench" aria-hidden="true"></i>) > System Settings > General Settings > Invoices > PDF Font Family''' or, prior to WHMCS 8.0, '''Setup > General Settings > Invoices > PDF Font Family'''.
+
# Go to '''Configuration (<i class="fa fa-wrench" aria-hidden="true"></i>) > System Settings > General Settings''' or, prior to WHMCS 8.0, '''Setup > General Settings''' in the '''Invoices''' tab.
 
+
# Change '''PDF Font Family''' to ''dejavusans''.
<div class="docs-related-pages">https://www.whmcs.com/download/106/dejavusans_tcpdf_font</div>
+
 
+
<div class="docs-related-pages">
 +
For more information, see [https://www.whmcs.com/download/106/dejavusans_tcpdf_font the Download page].</div>
 +
 
==Troubleshooting==
 
==Troubleshooting==
 
+
 
===Accented Characters===
 
===Accented Characters===
 
+
 
Due to a PHP limitation, the translations of the "Paid" and "Unpaid" text on the PDF Invoices may not display uppercase accented characters.
 
Due to a PHP limitation, the translations of the "Paid" and "Unpaid" text on the PDF Invoices may not display uppercase accented characters.
 
+
 
<div class="docs-related-pages">To resolve this, see [http://forum.whmcs.com/showthread.php?t=45594 this forum thread].</div>
 
<div class="docs-related-pages">To resolve this, see [http://forum.whmcs.com/showthread.php?t=45594 this forum thread].</div>
 
+
 
===Question Marks===
 
===Question Marks===
 
+
Sometimes, question marks appear in the PDF files in place of non-Latin or accented characters. This can suggest that the font doesn't support the character. The first thing to try is setting the font to "Freesans" in '''Configuration (<i class="fa fa-wrench" aria-hidden="true"></i>) > System Settings > General Settings > Invoices''' or, prior to WHMCS 8.0, '''Setup > General Settings > Invoices'''.
+
Sometimes, question marks appear in the PDF files in place of non-Latin or accented characters. This can suggest that the font doesn't support the character.
 
+
 +
Go to '''Configuration (<i class="fa fa-wrench" aria-hidden="true"></i>) > System Settings > General Settings''' or, prior to WHMCS 8.0, '''Setup > General Settings''' in the '''Invoices''' tab. Then, change '''PDF Font Family''' to ''Freesans''.
 +
 
If the problem persists, download and install "dejavusans" using the steps in [[#Additional_Fonts|Additional Fonts]]. This font pack contains more characters than standard ones, so it is likely to work with these characters.
 
If the problem persists, download and install "dejavusans" using the steps in [[#Additional_Fonts|Additional Fonts]]. This font pack contains more characters than standard ones, so it is likely to work with these characters.
 
+
 
===TCPDF error: Missing or incorrect image file===
 
===TCPDF error: Missing or incorrect image file===
 
+
This means the logo.png or logo.jpg file in your /assets/img/ folder is missing or is not a valid image file. This is the image that the system uses when creating the PDF invoice. Save the image file again and reupload it to the /assets/img directory.
+
This means the <tt>logo.png</tt> or <tt>logo.jpg</tt> file in <tt>/assets/img/</tt> is missing or is not a valid image file. This is the image that the system uses when creating the PDF invoice. Save the image file again and reupload it to <tt>/assets/img</tt> directory.

Revision as of 23:07, 20 November 2020

There are two invoice templates. One is for the system theme invoice template (viewinvoice.tpl). The other is for the PDF version of an invoice (invoicepdf.tpl). The template files are in the active WHMCS system theme template folder.

The logo on the PDF invoices is in the /assets/img/ folder. To change this logo, upload the required logo to the /assets/img/ folder. The name of the file should be logo.jpg or logo.png.

You can change the width of the logo image in the invoicepdf.tpl template file. On line 10, adjust the last number (75) before the closing bracket ();). This variable defines the image width. A developer can then increase or decrease this.

Header & Footer

This section describes a feature available in WHMCS 7.0 and above.

It is possible to cause a header or footer to automatically repeat on every page of a multi-page PDF invoice. If they are present in your theme, the system will include the following system theme template files for every rendered PDF page:

  • invoicepdfheader.tpl
  • invoicepdffooter.tpl

The system only requires the respective header or footer files. For example, for a customized footer on each page, create a invoicepdffooter.tpl file. You must store these files in the same directory as the invoicepdf.tpl system theme template file.

During template processing, Smarty will provide each of these system theme template files with the same variables as invoicepdf.tpl.

Editing Text and Content

A developer can customise the PDF invoices. This includes adding or removing text, altering the layout, or adding further images and formatting. Do this by editing the invoicepdf.tpl system theme template file in the active template folder. The file contains all the code relating to the layout and display of the invoice in its PDF format. You will need a basic working knowledge of PHP coding to understand and modify the file.

Displaying Custom Fields

It is possible to display custom fields on printable and PDF invoices. To do this, select Configuration () > System Settings > Custom Fields > Show on Invoice or, prior to WHMCS 8.0, Setup > Custom Client Fields > Show on Invoice.

The following variables are available for use in the invoicepdf.tpl file:

  • $invoiceid — The ID of the invoice.
  • $invoicenum — The custom number of the invoice (only set this when you have enabled proforma or sequential invoicing).
  • $datecreated — The creation date of the invoice.
  • $duedate — The due date of the invoice.
  • $datepaid — The paid date and time, if invoice status is Paid.
  • $userid — The client ID number.
  • $clientsdetails["firstname"] — The client information First Name.
  • $clientsdetails["lastname"] — The client information Last Name.
  • $clientsdetails["companyname"] — The client information Company Name.
  • $clientsdetails["fieldname"] — Other client information values, where fieldname is that item's name.
  • $customfields — An array of Client Custom Fields (for example, $customfields['Custom Field Name']). See Easy Translation for help with dynamically translating Custom Field Names.
  • $subtotal
  • $tax
  • $taxrate
  • $credit
  • $total
  • $status — Paid, unpaid, or cancelled.
  • $paymentmethod
  • $notes
  • $companyname — The Company Name.
  • $companyurl — The Default Website URL.
  • $companyaddress — The Company Address.
  • $invoiceitems — An array of invoice items.

Obtain further data by running SQL queries from within the PHP template.

Changing/Translating Filename

The default filename for invoices is Invoice-xxx. For quotes, this is Quote-xxx. For both, xxx is the ID of the invoice or quote. It may be desirable to change the filenames the clients see or translate it into other languages. Achieve this in the same way as any text within WHMCS, by using the Language Files. Look for these strings:

$_LANG['invoicefilename'] = "Invoice-";
$_LANG['quotefilename'] = "Quote-";

Reducing the File Size of PDFs

The bulk of the file size for PDFs that WHMCS generates come from the embedded font files for UTF-8. Because the UTF-8 charset has a large range of supported characters, this means it takes up more space than, for example, the ISO-8859-1 character set. Unlike UTF-8, ISO-8859-1 only supports A-Z, a-z, 0-9, and other standard characters.

If no clients are using special characters in their names or addresses, the system does not require UTF-8. It is then possible to reduce the size of PDF files by changing the font. To do that, go to Configuration () > System Settings > General Settings or, prior to WHMCS 8.0, Setup > General Settings in the Invoices tab. Then, change PDF Font Family to Helvetica.

Additional Fonts

The use of certain special characters may not be available in the standard font. So, WHMCS supplies an alternative font type that supports Czech, Russian, Arabic, and Persian, among others.

Version 7.7 and later

In version 7.7 and later, the system doesn't require any additional files.

To make this change:

  1. Navigate to Configuration () > System Settings > General Settings or, prior to WHMCS 8.0, Setup > General Settings and select the Invoices tab.
  2. Select Dejavusans for the PDF Font Family setting.
  3. Click Save Changes.

Version 7.6 and earlier

To make this change:

  1. Download the font files from the URL below.
  2. Upload them to /vendor/tecnickcom/tcpdf/fonts/.
  3. Go to Configuration () > System Settings > General Settings or, prior to WHMCS 8.0, Setup > General Settings in the Invoices tab.
  4. Change PDF Font Family to dejavusans.

Troubleshooting

Accented Characters

Due to a PHP limitation, the translations of the "Paid" and "Unpaid" text on the PDF Invoices may not display uppercase accented characters.

Question Marks

Sometimes, question marks appear in the PDF files in place of non-Latin or accented characters. This can suggest that the font doesn't support the character.

Go to Configuration () > System Settings > General Settings or, prior to WHMCS 8.0, Setup > General Settings in the Invoices tab. Then, change PDF Font Family to Freesans.

If the problem persists, download and install "dejavusans" using the steps in Additional Fonts. This font pack contains more characters than standard ones, so it is likely to work with these characters.

TCPDF error: Missing or incorrect image file

This means the logo.png or logo.jpg file in /assets/img/ is missing or is not a valid image file. This is the image that the system uses when creating the PDF invoice. Save the image file again and reupload it to /assets/img directory.