8ctopus/pigeon-invoice

Create pdf and html invoices

4.0.1-alpha3 2024-03-05 13:08 UTC

README

packagist downloads min php version license tests code coverage badge lines of code

Create pdf and html invoices

features

  • create pdf and html invoices
  • fully customizable thanks to Twig templates
  • localizable with unicode support
  • extendable to include custom data (see the extend dir)
  • choose between two pdf engines: Dompdf and wk<html>topdf
  • adjust paper size

invoice demo screenshot

requirements

  • php > 8.0 with ext-dom and ext-mbstring installed

demo

  • git clone the project
composer install
php demo.php
  • check generated invoices invoice.pdf and invoice.html

install

  • install package
composer require 8ctopus/pigeon-invoice
  • copy the resources directory to your project
use Oct8pus\Invoice\Company;
use Oct8pus\Invoice\Discount;
use Oct8pus\Invoice\Invoice;
use Oct8pus\Invoice\Item;
use Oct8pus\Invoice\Person;
use Oct8pus\Invoice\Shipping;
use Oct8pus\Invoice\Tax;

require_once './vendor/autoload.php';

$invoice = (new Invoice([
    'rootDir' => __DIR__ . DIRECTORY_SEPARATOR . 'resources',
    'templatesDir' => 'templates',
    'locale' => 'en'
]))
    ->setSeller((new Company())
        ->setName('Widgets LLC')
        ->setWebsite('https://www.widgets.ru')
        ->setEmail('hello@widgets.ru')
        ->setStreet1('16 Leo Tolstoy Street')
        ->setZip('119021')
        ->setCity('Moscow')
        ->setCountry('Russia'))

    ->setBuyer((new Person())
        ->setFirstName('Yuri')
        ->setLastName('Kamasov')
        ->setStreet1('Krasnoarmeyskaya 1')
        ->setZip('620026')
        ->setCity('Yekaterinburg')
        ->setCountry('Russia'))

    ->setDate(new DateTime('28-04-2022'))
    ->setNumber('EN43UD6JA7I2LNBC17')
    ->setCurrency('EUR')

    // add items
    ->addItem((new Item())->setName('Item 1')->setPrice(4.99)->setQuantity(1))
    ->addItem((new Item())->setName('Item 2')->setPrice(9.99)->setQuantity(2))
    ->addItem((new Item())->setName('Item 3')->setPrice(3.99)->setQuantity(3))

    ->setDiscount((new Discount())->setName('Special Offer')->setPrice(10.00))

    ->setShipping((new Shipping())->setName('Shipping')->setPrice(5.00))

    ->setTax((new Tax())->setName('VAT')->setPercentage(0.21))

    ->setCustomFields([
        'notes' => 'Thank you for shopping with us!',
    ]);

$html = $invoice->renderHtml();

file_put_contents('invoice.html', $html);

$pdf = $invoice->renderPdf([
    'paper' => 'A4',
    'orientation' => 'portrait',
    // uncomment to use wk\<html\>topdf
    //'engine' => 'alternate',
]);

file_put_contents('invoice.pdf', $pdf);

wk<html>topdf

To use the wk<html>topdf engine, you will need to download the binary for your system and add it to the current working directory getcwd() or to the system path.

Twig templates reference documentation

https://twig.symfony.com/doc/3.x/

custom fonts and unicode

Custom fonts must be in TrueType *.ttf format.

https://github.com/dompdf/dompdf/wiki/UnicodeHowTo

credits

tests

composer test

Note: tests do not check the pdf output, it seems it's not ready yet in DomPDF

clean code

composer fix