1.1.5 • Published 2 years ago

smtr v1.1.5

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

table-renderer

convert table or spreadsheet data into an image

Background

One day, I had to build a slack slash command which reports marketing reports to our company slack channel. I wanted to format the command results look like table, but I could not find a simple way to do that. I decided to build a table-like view using markdown text, and struggled to do that. However, the layout was broken with small windows or with CJK charaters. So I decided to build the report as an image.

table-renderer

I hope this module will help someone who wants to convert a simple spreadsheet data into an image,

Install

npm install table-renderer canvas

node-canvas module is peer-dependency. You have to install it, too.

Examples

Usage

import path from 'path';
import TableRenderer, { saveImage } from 'table-renderer';

const renderTable = TableRenderer().render;

const canvas = renderTable({
	title: 'Marketing Summary',
	columns: [
		{ width: 200, title: 'Campaign', dataIndex: 'campaign' },
		{ width: 100, title: 'Install', dataIndex: 'install', align: 'right' },
		{ width: 100, title: 'Cost', dataIndex: 'cost', align: 'right' },
	],
	dataSource: [
		'-',
		{ campaign: 'Google CPC', install: '12', cost: '$ 400' },
		{ campaign: 'Facebook CPC', install: '3', cost: '$ 60' },
		{ campaign: 'Youtube Video', install: '131', cost: '$ 1,230' },
		'-',
		{ campaign: 'Total', install: '146', cost: '$ 1,690' },
	],
});

saveImage(canvas, path.join(__dirname, 'example.png'));

single table

API

TableRenderer

TableRenderer(options = {}) => ({ render: function });

options

  • cellWidth {number} default width for a table cell. default = 100
  • cellHeight {number} default height for a table cell. default = 40
  • offsetLeft {number} default text offset from left border of table cell. default = 8
  • offsetTop {number} default text offset from top border of table cell. default = 26
  • spacing {number} spacing between tables. default = 20
  • titleSpacing {number} spacing between title and a table. default = 10
  • fontFamily {string} default = 'sans-serif'
  • paddingVertical {number} vertical padding of a page. default = 0
  • paddingHorizontal {number} horizontal padding of a page. default = 0
  • backgroundColor {string} page background color. default = '#ffffff'

TableRenderer#render

render((tables: Object | Array)) => Canvas;

tables parameter is either Object or Array. Single table is comprised of title, columns, and dataSource, where title is optional. Parameters of render function resembles ant-design Table paramters.

The function returns Canvas object, which is an instance of node-canvas. So, you can add canvas operations to it.

render({
    title: 'Marketing Summary',
    columns: [...],
    dataSource: [...]
});

saveImage

saveImage((canvas: Canvas), (filepath: String)) => Promise;
acornabbrevagent-baseajvajv-keywordsanymatchansi-stylesajv-errorsarr-diffarr-flattenarr-unionasn1.jsarray-uniqueassign-symbolsasync-eachassertbalanced-matchatobbabel-plugin-dynamic-import-nodebasebase64-jsbig.jsbinary-extensionsbluebirdbracesbn.jsbrace-expansionbrorandbrowserify-rsabrowserify-aesbrowserify-cipherbrowserify-desbrowserify-signbrowserify-zlibbrowserslistbuffer-frombufferbuiltin-status-codesbuffer-xorcacachechalkcache-basechokidarcipher-basechrome-trace-eventclass-utilscolor-namechownrcollection-visitclone-deepcolor-convertcolorettecomponent-emitteransi-regexconcat-mapcommondircommanderconsole-control-stringsconcat-streamconsole-browserifyconstants-browserifycopy-concurrentlycore-js-compatconvert-source-mapcopy-descriptoraprobacore-util-iscreate-ecdhcreate-hashcross-spawncreate-hmaccyclistcrypto-browserifydecompress-responsedecode-uri-componentdebugdefine-propertiesare-we-there-yetcolor-supportdiffie-hellmandes.jscore-jsduplexifydomain-browserdefine-propertyellipticemojis-listend-of-streamenhanced-resolveenvinfoerrnoescape-string-regexpesrecurseeslint-scopeesutilsestraverseeventsevp_bytestokeyexecaexpand-bracketsextend-shallowextglobfast-json-stable-stringifyfast-deep-equalfastest-levenshteinfiggy-puddingfind-cache-dirfill-rangefind-upfor-inflush-write-streamfragment-cachefs.realpathfrom2fs-readdir-recursivefs-write-stream-atomicgaugefunction-bindgensyncget-streamget-valueglob-parentglobalsdelegatesglobhas-symbolsgraceful-fshas-flaghas-valuehash-basehas-valueshmac-drbghttps-browserifyhash.jsieee754human-signalshttps-proxy-agentiferrimport-localdetect-libcimurmurhashinflightinfer-ownerinvariantinterpretis-accessor-descriptorfs-minipassis-binary-pathis-bufferis-data-descriptoris-descriptoris-extendableis-extglobis-numberis-globis-plain-objectis-streamis-windowshas-unicodeis-wslisarrayisexeisobjectjs-tokensjsescjson-parse-better-errorskind-ofjson-schema-traverselevenarylodashinheritslevenloader-runnerlocate-pathlru-cacheloader-utilsloose-envifymake-dirmap-cachemd5.jsmemory-fsmiller-rabinmicromatchmerge-streamminimalistic-assertmimic-responsemimic-fnminimalistic-crypto-utilsis-fullwidth-code-pointminipassminimatchmkdirpmixin-deepmississippinanmsminizlibneo-asyncnanomatchjson5map-visitnode-modules-regexpnode-libs-browserminimistnormalize-pathnpm-run-pathnode-fetchobject-keysobject-copyonceobject.assignobject.picknpmlogobject-visitos-browserifyonetimep-limitparallel-transformp-locatep-trypakoparse-asn1pascalcaseobject-assignpath-dirnamepath-browserifypath-existspath-parsepath-is-absolutepath-keypicomatchpbkdf2piratespifypkg-dirposix-character-classesprocess-nextick-argsprocesspublic-encryptpromise-inflightprrpunycodepumprandombytesquerystringquerystring-es3randomfillreadable-streamregeneraterechoirreaddirpregenerator-runtimeregex-notregenerator-transformregexpu-coreregjsgenregjsparserremove-trailing-separatorrepeat-elementresolve-cwdnoptrepeat-stringresolve-fromresolve-urlretsafe-buffersemversafe-regexripemd160schema-utilsregenerate-unicode-propertiesserialize-javascriptset-valueset-blockingsetimmediateshebang-commandsha.jsshallow-cloneresolveslashshebang-regexsnapdragonsimple-getsimple-concatrun-queuesnapdragon-utilsnapdragon-nodesource-mapsource-map-resolvepumpifysource-list-mapsource-map-supportsource-map-urlstatic-extendsplit-stringstream-browserifyssristream-httpstream-eachstream-shiftstring_decodersupports-colorterserstrip-final-newlinesignal-exittapableterser-webpack-plugintimers-browserifythrough2to-arraybufferto-fast-propertiesstrip-ansito-object-pathstring-widthtarto-regextty-browserifytslibunicode-canonical-property-names-ecmascriptunicode-match-property-ecmascriptto-regex-rangeunique-slugunicode-property-aliases-ecmascriptunicode-match-property-value-ecmascriptunion-valueurixtr46urltypedarrayuri-jsupathuseunique-filenameunset-valuewatchpackwebpack-sourcesvm-browserifywatchpack-chokidar2webidl-conversionswebpack-mergeutil-deprecatewhichutilwide-alignwrappywildcardmove-concurrentlyyallisty18nxtendworker-farmwhatwg-url
1.1.5

2 years ago

1.1.4

2 years ago

1.1.3

2 years ago

1.1.2

2 years ago

1.1.1

2 years ago

1.1.0

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.1

2 years ago