Skip to content

PdfKit wrapper that helps to draw informations in simple tables

License

Notifications You must be signed in to change notification settings

reverendus7/voilab-pdf-table

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Voilab Pdf Table

PdfKit wrapper that helps to draw informations in simple tables.

Installation

node 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

Col span

You can customize the single cells width by defining the "columnSpan" property and defining an object instead of a plain text content.

    const tableBody = [
        {
            columnA: "firstRowFirstCell",
            columnB: "firstRowSecondCell"
        },
        {
            columnA: {
                content:"secondRowUniqueCell", 
                colSpan: 2
            }
        }
    ]

0.4.0

Thank you, contributors!

From #MichielDeMey

  • better handling for padding
  • some modifications about pos calculation

From #cbwebdevelopment

  • added addonCellBackgroundAdd 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)

About

PdfKit wrapper that helps to draw informations in simple tables

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 100.0%