/voilab-pdf-table

PdfKit wrapper that helps to draw informations in simple tables

Primary LanguageJavaScriptMIT LicenseMIT

Voilab Pdf Table

PdfKit wrapper that helps to draw informations in simple tables.

Installation

npm install --save voilab-pdf-table

Usage

// in some service
var PdfTable = require('voilab-pdf-table'),
    PdfDocument = require('pdfkit');

module.exports = {
    create: function () {
        // create a PDF from PDFKit, and a table from PDFTable
        var pdf = new PdfDocument({
                autoFirstPage: false
            }),
            table = new PdfTable(pdf, {
                bottomMargin: 30
            });

        table
            // add some plugins (here, a 'fit-to-width' for a column)
            .addPlugin(new (require('voilab-pdf-table/plugins/fitcolumn'))({
                column: 'description'
            }))
            // set defaults to your columns
            .setColumnsDefaults({
                headerBorder: 'B',
                align: 'right'
            })
            // add table columns
            .addColumns([
                {
                    id: 'description',
                    header: 'Product',
                    align: 'left'
                },
                {
                    id: 'quantity',
                    header: 'Quantity',
                    width: 50
                },
                {
                    id: 'price',
                    header: 'Price',
                    width: 40
                },
                {
                    id: 'total',
                    header: 'Total',
                    width: 70,
                    renderer: function (tb, data) {
                        return 'CHF ' + data.total;
                    }
                }
            ])
            // add events (here, we draw headers on each new page)
            .onPageAdded(function (tb) {
                tb.addHeader();
            });

        // if no page already exists in your PDF, do not forget to add one
        pdf.addPage();

        // draw content, by passing data to the addBody method
        table.addBody([
            {description: 'Product 1', quantity: 1, price: 20.10, total: 20.10},
            {description: 'Product 2', quantity: 4, price: 4.00, total: 16.00},
            {description: 'Product 3', quantity: 2, price: 17.85, total: 35.70}
        ]);

        return pdf;
    }
};
// with express, in some route
app.get('/some/route', function (req, res, next) {
   var pdf = require('some/service').create();
   pdf.pipe(res);
   pdf.end();
});

Page breaks

You can customize how page breaks are done during table process like this:

table.onPageAdd(function (table, row, ev) {
    // do something like
    table.pdf.addPage();
    // cancel event so the automatic page add is not triggered
    ev.cancel = true;
});

Changelogs

0.4.1

Thank you, contributors!

From #vikram1992

  • added headerOpacity and headerBorderOpacity in column configuration
  • added headerCellAdded and cellAdded as a function in column configuration

0.4.0

Thank you, contributors!

From #MichielDeMey

  • better handling for padding
  • some modifications about pos calculation

From #cbwebdevelopment

  • added onCellBackgroundAdd and onCellBackgroundAdded events
  • added onCellBorderAdd and onCellBorderAdded events
  • the current row index is passed in events
  • some modifications about pos calculation

0.3.0

  • new pages are better handeled. No more need to call setNewPageFn
  • removed setNewPageFn. Check documentation for how you can customize page add. Deprecated mention will be definitively removed in next release

0.2.0

  • added event onColumnPropertyChanged
  • added event onColumnAdded
  • removed onColumnWidthChanged. Use onColumnPropertyChanged instead. Deprecated mention will be definitively removed in next release
  • Issue #1 fix

0.1.5

First shot

Licence

This code is released under the MIT License (MIT)