Invoicr – Open Source PHP Invoice Generator (HTML, PDF, DOCX)

 

TABLE OF CONTENTS

Download & License Requirements & Installation What Is Invoicr
How To Use For The Developers Links & Credits

 

 

DOWNLOAD & LICENSE

SourceForge | GitHub

Invoicr is released under the MIT License. You are free to use it for your own personal and commercial projects, modify it as you see fit. On the condition that there the software is provided “as-is”. There are no warranties provided and “no strings attached”. Code Boxx and the authors are not liable for any claims, damages, or liabilities.

 

REQUIREMENTS & INSTALLATION

Invoicr has not been extensively tested, but it is developed and works on a WAMP8 (Apache MySQL PHP 8) server. There is no “installation” involved, but just a small hassle:

  • Open invlib/invoicr.php, change (C1) company information to your own.
  • That’s all – See example.php for a quick start.

 

 

WHAT IS INVOICR?

Invoicr is a free and open-source PHP invoice generator that is capable of churning out HTML, PDF, and DOCX invoices. It may not be the best in the world, but it is simple, fuss-free, and should give the developers a quick boost with all the essentials already built-in. Invoicr currently comes with 5 free themes available for DOCX, HTML, and PDF output:

  • Apple
  • Blueberry
  • Lime
  • Simple
  • Strawberry

 

 

 

HOW TO USE

STEP 1) LOAD INVOICR LIBRARY

// (A) LOAD INVOICR
require "invlib/invoicr.php";

Start by including the invlib/invoicr.php library in your own project. This will automatically create a $invoicr object.

 

STEP 2) FEED INVOICE INFORMATION

// (B) SET INVOICE DATA
// (B1) COMPANY INFORMATION
/* RECOMMENDED TO JUST PERMANENTLY CODE INTO INVOICR/INVOICR.PHP > LINE 13
$invoicr->set("company", [
  "http://localhost/code-boxx-logo.png",
  "D:/http/code-boxx-logo.png", 
  "Code Boxx", 
  "Street Address, City, State, Zip",
  "Phone: xxx-xxx-xxx | Fax: xxx-xxx-xxx",
  "https://code-boxx.com",
  "doge@code-boxx.com"
]); */

// (B2) INVOICE HEADER
$invoicr->set("head", [
  ["Invoice #", "CB-123-456"],
  ["DOP", "2011-11-11"],
  ["P.O. #", "CB-789-123"],
  ["Due Date", "2011-12-12"]
]);

// (B3) BILL TO
$invoicr->set("billto", [
  "Customer Name",
  "Street Address", 
  "City, State, Zip"
]);

// (B4) SHIP TO
$invoicr->set("shipto", [
  "Customer Name",
  "Street Address", 
  "City, State, Zip"
]);

// (B5) ITEMS - ADD ONE-BY-ONE
$items = [
  ["Rubber Hose", "5m long rubber hose", 3, "$5.50", "$16.50"],
  ["Rubber Duck", "Good bathtub companion", 8, "$4.20", "$33.60"],
  ["Rubber Band", "", 10, "$0.10", "$1.00"],
  ["Rubber Stamp", "", 3, "$12.30", "$36.90"],
  ["Rubber Shoe", "For slipping, not for running", 1, "$20.00", "$20.00"]
];
// foreach ($items as $i) { $invoicr->add("items", $i); }

// (B6) ITEMS - OR SET ALL AT ONCE
$invoicr->set("items", $items);

// (B7) TOTALS
$invoicr->set("totals", [
  ["SUB-TOTAL", "$108.00"],
  ["DISCOUNT 10%", "-$10.80"],
  ["GRAND TOTAL", "$97.20"]
]);

// (B8) NOTES, IF ANY
$invoicr->set("notes", [
  "Cheques should be made payable to Code Boxx",
  "Get a 10% off with the next purchase with discount code DOGE1234!"
]);

This is probably the most “complicated” step, you need to use $invoicr->set() or $invoicr->add() to feed Invoicr with information:

  • Company logo, name, address, contact.
  • Invoice information.
  • Bill to.
  • Ship to.
  • The items.
  • Totals.
  • Notes, if any.

 

 

STEP 3) CHOOSE A TEMPLATE & OUTPUT THE INVOICE

// (C) OUTPUT
// (C1) CHOOSE A TEMPLATE
$invoicr->template("apple");
// $invoicr->template("blueberry");
// $invoicr->template("lime");
// $invoicr->template("simple");
// $invoicr->template("strawberry");

// (C2) OUTPUT IN HTML
// DEFAULT : DISPLAY IN BROWSER 
// 1 : DISPLAY IN BROWSER 
// 2 : FORCE DOWNLOAD 
// 3 : SAVE ON SERVER
$invoicr->outputHTML();
// $invoicr->outputHTML(1);
// $invoicr->outputHTML(2, "invoice.html");
// $invoicr->outputHTML(3, __DIR__ . DIRECTORY_SEPARATOR . "invoice.html");

// (C3) OUTPUT IN PDF
// DEFAULT : DISPLAY IN BROWSER 
// 1 : DISPLAY IN BROWSER 
// 2 : FORCE DOWNLOAD 
// 3 : SAVE ON SERVER
// $invoicr->outputPDF();
// $invoicr->outputPDF(1);
// $invoicr->outputPDF(2, "invoice.pdf");
// $invoicr->outputPDF(3, __DIR__ . DIRECTORY_SEPARATOR . "invoice.pdf");

// (C4) OUTPUT IN DOCS
// DEFAULT : FORCE DOWNLOAD
// 1 : FORCE DOWNLOAD 
// 2 : SAVE ON SERVER
// $invoicr->outputDOCX();
// $invoicr->outputDOCX(1, "invoice.docx");
// $invoicr->outputDOCX(2, __DIR__ . DIRECTORY_SEPARATOR . "invoice.docx");

Finally, choose a template to use and output the invoice.

 

FOR THE DEVELOPERS – YOUR OWN TEMPLATE

Want to build your own customized theme? It is actually pretty easy to do so… If you are unsure at any point, feel free to use the “default” simple.php template files as a reference.

 

STEP 1) CREATE EMPTY PHP FILE

Start by creating a new PHP file in the respective template folder – libinv/DOCX, libinv/HTML, or libinv/PDF. For example, if we want to add a new “durian” template for HTML, we create libinv/HTML/durian.php.

 

STEP 2) BUILD THE TEMPLATE

2A) ACCESSING INVOICE INFORMATION

In the template file, we can access the various invoice information previously set with $invoicr->set() or $invoicr->add().

  • $this->company – Company logo, name, address, contact.
  • $this->head- Invoice information.
  • $this->billto – Bill to.
  • $this->shipto – Ship to.
  • $this->items – The items.
  • $this->totals – Totals.
  • $this->notes – Notes, if any.

 

 

2B) HTML TEMPLATES

To create an HTML template, simply put all the HTML code into $this->data. For example, we can access the items to create a list.

invlib/HTML/durian.php
$this->data = "<ul>";
foreach ($this->items as $i) {
  $this->data .= "<li>". $i[0] ."</li>";
}
$this->data .= "</ul>";

 

2C) PDF TEMPLATES

PDF generation is handled by MPDF, and it is capable of taking in HTML to generate PDF.

invlib/PDF/durian.php
$this->data = "<ul>";
foreach ($this->items as $i) { $this->data .= "<li>". $i[0] ."</li>"; }
$this->data .= "</ul>";
$mpdf->WriteHTML($this->data);

Check out the official MPDF documentation if you need more information.

 

2D) DOCX TEMPLATES

PHPWord handles the DOCX generation, and it is the “unfriendliest” to work with… Just read through the official PHPWord documentation for more information.

invlib/DOCX/durian.php
$section = $pw->addSection();
$table = $section->addTable($tableStyle);
foreach ($this->items as $i) {
  $table->addRow();
  $cell = $table->addCell(2000, $style);
  $cell->addText($i[0]);
}

 

LINKS & CREDITS

Invoicr is made possible with the following open source projects:

  • MPDF for adding the PDF capabilities.
  • PHPWord for the DOCX capability.

3 thoughts on “Invoicr – Open Source PHP Invoice Generator (HTML, PDF, DOCX)”

  1. i only get the first letter/digit when i put an array of items in $items, what can i do to make this work?

    $items = $arrayofitems;

Leave a Comment

Your email address will not be published. Required fields are marked *