Repository files navigation

Render 1-D barcodes to canvas, svg, or path. Supports Code 128, 3 of 9, 2 of 5, EAN, and more.

Why?

This barcode library has no dependencies 👍.

This barcode library specializes in its use of the canvas API. You provide a canvas (be it in a browser or with node-canvas), and then specify where the barcode should be drawn, how large it should be, and at what angle.

Other barcode libraries that I found created pngs or svgs directly and were not very flexible in the output size (i.e. no maxWidth option). Rendering directly to a canvas allows for a flexible API if that's your target anyway. You can also easily generate SVG or Path text output.

Demos/Playground

First of all, check out the demos.

Barcode Generator

Did you ever want to paste a list of strings and download a zip file of corresponding images? Well I did once and made this barcode-generator. See demos for the source.

How?

// In the browservarcanvas=document.getElementById("barcode-canvas");varg=canvas.getContext("2d");drawBarcode(g,"Test barcode",options);
// On the servervarbardcode=require("bardcode");varCanvas=require("canvas");varcanvas=newCanvas(595,842,"pdf");varg=canvas.getContext("2d");bardcode.drawBarcode(g,"Test barcode",options);
// Meteor servervarCanvas=Meteor.npmRequire("canvas");varcanvas=newCanvas(595,842,"pdf");varg=canvas.getContext("2d");drawBarcode(g,"Test barcode",options);

Symbology

The following barcode formats are supported:

  • Codabar
  • Code 128 (and GS1 128)
  • Code 39
  • EAN-8
  • EAN-13
  • FIM
  • ITF (interleaved 2 of 5)
  • UPC-A

API

// browser+meteordrawBarcode(g,barcodeText,options);// nodevarbardcode=require("bardcode");bardcode.drawBarcode(g,barcodeText,options);
  • g is a Canvas' 2-D graphics context or the output format. The only supported non-canvas output format is "svg".
  • barcodeText is a string or an array (in case you want to include command characters like "FNC 1"). Allowed characters depend on the chosen symbology. You generally don't need to include start, end, or check characters.
  • options is an optional object with the following properties:
    • options.type Barcode type. Defaults to Code 128. Other valid options are "GS1 128", "Codabar", "Code 39", "EAN-8", "EAN-13", "FIM", "ITF" (interleaved 2 of 5), and "UPC-A".
    • options.hasChecksum If true, the barcode already has a checksum (which will be validated); if false, calculate and add a checksum. Defaults to false. Currently works only for EAN-type barcodes (EAN-8, EAN-13, UPC-A).
    • options.x Where to draw barcode. Defaults to 0.
    • options.y Where to draw the barcode. Defaults to 0.
    • options.horizontalAlign How to align the barcode. Defaults to "left". Other options are "center" and "right".
    • options.verticalAlign How to align the barcode. Defaults to "top". Other options are "middle" and "bottom".
    • options.height Barcode height. Defaults to 90.72.
    • options.moduleWidth Width of thinnest bar. Defaults to 2.892.
    • options.quietZoneSize Number of moduleWidths in quiet zone on either side. Defaults to 10.
    • options.angle Rotate barcode this many degrees clockwise. Defaults to 0.
    • options.maxWidth Maximum barcode width (including quiet zones). If specified, then the moduleWidth will be adjusted if necessary to make the entire barcode fit in the given width.
    • options.width If given, then ignore moduleWidth and maxWidth and set the moduleWidth so that the barcode will have the given width (including quiet zones).

Note: width and maxWidth refer to the unrotated barcode width.

SVG

If the first parameter to bardcode.drawBarcode, g, is "svg", then an SVG string is returned.

For the moment, the only supported options when using SVG are:

  • options.type
  • options.height
  • options.moduleWidth
  • options.quietZoneSize
  • options.maxWidth
  • options.width

Path

If the first parameter to bardcode.drawBarcode, g, is "path", then a path string is returned, like:

M 28.920,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 37.596,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 46.272,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 60.732,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 69.408,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 83.868,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 92.544,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 98.328,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 109.896,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 124.356,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 130.140,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 147.492,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 156.168,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 164.844,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 179.304,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 187.980,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 205.332,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 211.116,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 219.792,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 234.252,0 l 8.676,0 l 0,90.72 l -8.676,0 Z M 245.820,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 251.604,0 l 5.784,0 l 0,90.72 l -5.784,0 Z

For the moment, the only supported options when using path are:

  • options.type
  • options.height
  • options.moduleWidth
  • options.quietZoneSize
  • options.maxWidth
  • options.width

Errors

Errors are thrown on invalid input, for example when including letters in EAN barcodes.

Installation

node-canvas installation causes issues for a lot of users. So it's an optional dependency (i.e. you should Bring Your Own Canvas). It's also not a node dependency because it's not the only output format.

For the browser:

  • Include dist/bardcode.js or dist/bardcode.min.js

For node:

  • npm install canvas (requires cairo)
  • npm install bardcode

For meteor:

  • (optional) meteor add meteorhacks:npm and add "canvas": "1.1.6" to packages.json
  • meteor add froatsnook:bardcode

Testing

Tests require meteor and zbar.

  • Download zbar: http://zbar.sourceforge.net/
  • ./configure --disable-video --without-qt --without-gtk --without-python
  • make
  • Copy zbarimg/zbarimg and zbar/.libs/libzbar.so* to a new directory called zbar in bardcode's project directory
  • meteor test-packages ./ in bardcode's project directory
  • Open localhost:3000 in a browser

Contributors

Thank you:

License

MIT

About

Draw 1-D barcodes to Canvases, Paths, and SVGs

Resources

Stars

36 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Render 1-D barcodes to canvas, svg, or path. Supports Code 128, 3 of 9, 2 of 5, EAN, and more.

Why?

This barcode library has no dependencies 👍.

This barcode library specializes in its use of the canvas API. You provide a canvas (be it in a browser or with node-canvas), and then specify where the barcode should be drawn, how large it should be, and at what angle.

Other barcode libraries that I found created pngs or svgs directly and were not very flexible in the output size (i.e. no maxWidth option). Rendering directly to a canvas allows for a flexible API if that's your target anyway. You can also easily generate SVG or Path text output.

Demos/Playground

First of all, check out the demos.

Barcode Generator

Did you ever want to paste a list of strings and download a zip file of corresponding images? Well I did once and made this barcode-generator. See demos for the source.

How?

// In the browservarcanvas=document.getElementById("barcode-canvas");varg=canvas.getContext("2d");drawBarcode(g,"Test barcode",options);
// On the servervarbardcode=require("bardcode");varCanvas=require("canvas");varcanvas=newCanvas(595,842,"pdf");varg=canvas.getContext("2d");bardcode.drawBarcode(g,"Test barcode",options);
// Meteor servervarCanvas=Meteor.npmRequire("canvas");varcanvas=newCanvas(595,842,"pdf");varg=canvas.getContext("2d");drawBarcode(g,"Test barcode",options);

Symbology

The following barcode formats are supported:

  • Codabar
  • Code 128 (and GS1 128)
  • Code 39
  • EAN-8
  • EAN-13
  • FIM
  • ITF (interleaved 2 of 5)
  • UPC-A

API

// browser+meteordrawBarcode(g,barcodeText,options);// nodevarbardcode=require("bardcode");bardcode.drawBarcode(g,barcodeText,options);
  • g is a Canvas' 2-D graphics context or the output format. The only supported non-canvas output format is "svg".
  • barcodeText is a string or an array (in case you want to include command characters like "FNC 1"). Allowed characters depend on the chosen symbology. You generally don't need to include start, end, or check characters.
  • options is an optional object with the following properties:
    • options.type Barcode type. Defaults to Code 128. Other valid options are "GS1 128", "Codabar", "Code 39", "EAN-8", "EAN-13", "FIM", "ITF" (interleaved 2 of 5), and "UPC-A".
    • options.hasChecksum If true, the barcode already has a checksum (which will be validated); if false, calculate and add a checksum. Defaults to false. Currently works only for EAN-type barcodes (EAN-8, EAN-13, UPC-A).
    • options.x Where to draw barcode. Defaults to 0.
    • options.y Where to draw the barcode. Defaults to 0.
    • options.horizontalAlign How to align the barcode. Defaults to "left". Other options are "center" and "right".
    • options.verticalAlign How to align the barcode. Defaults to "top". Other options are "middle" and "bottom".
    • options.height Barcode height. Defaults to 90.72.
    • options.moduleWidth Width of thinnest bar. Defaults to 2.892.
    • options.quietZoneSize Number of moduleWidths in quiet zone on either side. Defaults to 10.
    • options.angle Rotate barcode this many degrees clockwise. Defaults to 0.
    • options.maxWidth Maximum barcode width (including quiet zones). If specified, then the moduleWidth will be adjusted if necessary to make the entire barcode fit in the given width.
    • options.width If given, then ignore moduleWidth and maxWidth and set the moduleWidth so that the barcode will have the given width (including quiet zones).

Note: width and maxWidth refer to the unrotated barcode width.

SVG

If the first parameter to bardcode.drawBarcode, g, is "svg", then an SVG string is returned.

For the moment, the only supported options when using SVG are:

  • options.type
  • options.height
  • options.moduleWidth
  • options.quietZoneSize
  • options.maxWidth
  • options.width

Path

If the first parameter to bardcode.drawBarcode, g, is "path", then a path string is returned, like:

M 28.920,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 37.596,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 46.272,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 60.732,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 69.408,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 83.868,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 92.544,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 98.328,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 109.896,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 124.356,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 130.140,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 147.492,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 156.168,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 164.844,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 179.304,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 187.980,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 205.332,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 211.116,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 219.792,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 234.252,0 l 8.676,0 l 0,90.72 l -8.676,0 Z M 245.820,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 251.604,0 l 5.784,0 l 0,90.72 l -5.784,0 Z

For the moment, the only supported options when using path are:

  • options.type
  • options.height
  • options.moduleWidth
  • options.quietZoneSize
  • options.maxWidth
  • options.width

Errors

Errors are thrown on invalid input, for example when including letters in EAN barcodes.

Installation

node-canvas installation causes issues for a lot of users. So it's an optional dependency (i.e. you should Bring Your Own Canvas). It's also not a node dependency because it's not the only output format.

For the browser:

  • Include dist/bardcode.js or dist/bardcode.min.js

For node:

  • npm install canvas (requires cairo)
  • npm install bardcode

For meteor:

  • (optional) meteor add meteorhacks:npm and add "canvas": "1.1.6" to packages.json
  • meteor add froatsnook:bardcode

Testing

Tests require meteor and zbar.

  • Download zbar: http://zbar.sourceforge.net/
  • ./configure --disable-video --without-qt --without-gtk --without-python
  • make
  • Copy zbarimg/zbarimg and zbar/.libs/libzbar.so* to a new directory called zbar in bardcode's project directory
  • meteor test-packages ./ in bardcode's project directory
  • Open localhost:3000 in a browser

Contributors

Thank you:

License

MIT

About

Draw 1-D barcodes to Canvases, Paths, and SVGs

Resources

Stars

36 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Render 1-D barcodes to canvas, svg, or path. Supports Code 128, 3 of 9, 2 of 5, EAN, and more.

Why?

This barcode library has no dependencies 👍.

This barcode library specializes in its use of the canvas API. You provide a canvas (be it in a browser or with node-canvas), and then specify where the barcode should be drawn, how large it should be, and at what angle.

Other barcode libraries that I found created pngs or svgs directly and were not very flexible in the output size (i.e. no maxWidth option). Rendering directly to a canvas allows for a flexible API if that's your target anyway. You can also easily generate SVG or Path text output.

Demos/Playground

First of all, check out the demos.

Barcode Generator

Did you ever want to paste a list of strings and download a zip file of corresponding images? Well I did once and made this barcode-generator. See demos for the source.

How?

// In the browservarcanvas=document.getElementById("barcode-canvas");varg=canvas.getContext("2d");drawBarcode(g,"Test barcode",options);
// On the servervarbardcode=require("bardcode");varCanvas=require("canvas");varcanvas=newCanvas(595,842,"pdf");varg=canvas.getContext("2d");bardcode.drawBarcode(g,"Test barcode",options);
// Meteor servervarCanvas=Meteor.npmRequire("canvas");varcanvas=newCanvas(595,842,"pdf");varg=canvas.getContext("2d");drawBarcode(g,"Test barcode",options);

Symbology

The following barcode formats are supported:

  • Codabar
  • Code 128 (and GS1 128)
  • Code 39
  • EAN-8
  • EAN-13
  • FIM
  • ITF (interleaved 2 of 5)
  • UPC-A

API

// browser+meteordrawBarcode(g,barcodeText,options);// nodevarbardcode=require("bardcode");bardcode.drawBarcode(g,barcodeText,options);
  • g is a Canvas' 2-D graphics context or the output format. The only supported non-canvas output format is "svg".
  • barcodeText is a string or an array (in case you want to include command characters like "FNC 1"). Allowed characters depend on the chosen symbology. You generally don't need to include start, end, or check characters.
  • options is an optional object with the following properties:
    • options.type Barcode type. Defaults to Code 128. Other valid options are "GS1 128", "Codabar", "Code 39", "EAN-8", "EAN-13", "FIM", "ITF" (interleaved 2 of 5), and "UPC-A".
    • options.hasChecksum If true, the barcode already has a checksum (which will be validated); if false, calculate and add a checksum. Defaults to false. Currently works only for EAN-type barcodes (EAN-8, EAN-13, UPC-A).
    • options.x Where to draw barcode. Defaults to 0.
    • options.y Where to draw the barcode. Defaults to 0.
    • options.horizontalAlign How to align the barcode. Defaults to "left". Other options are "center" and "right".
    • options.verticalAlign How to align the barcode. Defaults to "top". Other options are "middle" and "bottom".
    • options.height Barcode height. Defaults to 90.72.
    • options.moduleWidth Width of thinnest bar. Defaults to 2.892.
    • options.quietZoneSize Number of moduleWidths in quiet zone on either side. Defaults to 10.
    • options.angle Rotate barcode this many degrees clockwise. Defaults to 0.
    • options.maxWidth Maximum barcode width (including quiet zones). If specified, then the moduleWidth will be adjusted if necessary to make the entire barcode fit in the given width.
    • options.width If given, then ignore moduleWidth and maxWidth and set the moduleWidth so that the barcode will have the given width (including quiet zones).

Note: width and maxWidth refer to the unrotated barcode width.

SVG

If the first parameter to bardcode.drawBarcode, g, is "svg", then an SVG string is returned.

For the moment, the only supported options when using SVG are:

  • options.type
  • options.height
  • options.moduleWidth
  • options.quietZoneSize
  • options.maxWidth
  • options.width

Path

If the first parameter to bardcode.drawBarcode, g, is "path", then a path string is returned, like:

M 28.920,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 37.596,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 46.272,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 60.732,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 69.408,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 83.868,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 92.544,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 98.328,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 109.896,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 124.356,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 130.140,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 147.492,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 156.168,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 164.844,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 179.304,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 187.980,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 205.332,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 211.116,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 219.792,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 234.252,0 l 8.676,0 l 0,90.72 l -8.676,0 Z M 245.820,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 251.604,0 l 5.784,0 l 0,90.72 l -5.784,0 Z

For the moment, the only supported options when using path are:

  • options.type
  • options.height
  • options.moduleWidth
  • options.quietZoneSize
  • options.maxWidth
  • options.width

Errors

Errors are thrown on invalid input, for example when including letters in EAN barcodes.

Installation

node-canvas installation causes issues for a lot of users. So it's an optional dependency (i.e. you should Bring Your Own Canvas). It's also not a node dependency because it's not the only output format.

For the browser:

  • Include dist/bardcode.js or dist/bardcode.min.js

For node:

  • npm install canvas (requires cairo)
  • npm install bardcode

For meteor:

  • (optional) meteor add meteorhacks:npm and add "canvas": "1.1.6" to packages.json
  • meteor add froatsnook:bardcode

Testing

Tests require meteor and zbar.

  • Download zbar: http://zbar.sourceforge.net/
  • ./configure --disable-video --without-qt --without-gtk --without-python
  • make
  • Copy zbarimg/zbarimg and zbar/.libs/libzbar.so* to a new directory called zbar in bardcode's project directory
  • meteor test-packages ./ in bardcode's project directory
  • Open localhost:3000 in a browser

Contributors

Thank you:

License

MIT

About

Draw 1-D barcodes to Canvases, Paths, and SVGs

Resources

Stars

36 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Render 1-D barcodes to canvas, svg, or path. Supports Code 128, 3 of 9, 2 of 5, EAN, and more.

Why?

This barcode library has no dependencies 👍.

This barcode library specializes in its use of the canvas API. You provide a canvas (be it in a browser or with node-canvas), and then specify where the barcode should be drawn, how large it should be, and at what angle.

Other barcode libraries that I found created pngs or svgs directly and were not very flexible in the output size (i.e. no maxWidth option). Rendering directly to a canvas allows for a flexible API if that's your target anyway. You can also easily generate SVG or Path text output.

Demos/Playground

First of all, check out the demos.

Barcode Generator

Did you ever want to paste a list of strings and download a zip file of corresponding images? Well I did once and made this barcode-generator. See demos for the source.

How?

// In the browservarcanvas=document.getElementById("barcode-canvas");varg=canvas.getContext("2d");drawBarcode(g,"Test barcode",options);
// On the servervarbardcode=require("bardcode");varCanvas=require("canvas");varcanvas=newCanvas(595,842,"pdf");varg=canvas.getContext("2d");bardcode.drawBarcode(g,"Test barcode",options);
// Meteor servervarCanvas=Meteor.npmRequire("canvas");varcanvas=newCanvas(595,842,"pdf");varg=canvas.getContext("2d");drawBarcode(g,"Test barcode",options);

Symbology

The following barcode formats are supported:

  • Codabar
  • Code 128 (and GS1 128)
  • Code 39
  • EAN-8
  • EAN-13
  • FIM
  • ITF (interleaved 2 of 5)
  • UPC-A

API

// browser+meteordrawBarcode(g,barcodeText,options);// nodevarbardcode=require("bardcode");bardcode.drawBarcode(g,barcodeText,options);
  • g is a Canvas' 2-D graphics context or the output format. The only supported non-canvas output format is "svg".
  • barcodeText is a string or an array (in case you want to include command characters like "FNC 1"). Allowed characters depend on the chosen symbology. You generally don't need to include start, end, or check characters.
  • options is an optional object with the following properties:
    • options.type Barcode type. Defaults to Code 128. Other valid options are "GS1 128", "Codabar", "Code 39", "EAN-8", "EAN-13", "FIM", "ITF" (interleaved 2 of 5), and "UPC-A".
    • options.hasChecksum If true, the barcode already has a checksum (which will be validated); if false, calculate and add a checksum. Defaults to false. Currently works only for EAN-type barcodes (EAN-8, EAN-13, UPC-A).
    • options.x Where to draw barcode. Defaults to 0.
    • options.y Where to draw the barcode. Defaults to 0.
    • options.horizontalAlign How to align the barcode. Defaults to "left". Other options are "center" and "right".
    • options.verticalAlign How to align the barcode. Defaults to "top". Other options are "middle" and "bottom".
    • options.height Barcode height. Defaults to 90.72.
    • options.moduleWidth Width of thinnest bar. Defaults to 2.892.
    • options.quietZoneSize Number of moduleWidths in quiet zone on either side. Defaults to 10.
    • options.angle Rotate barcode this many degrees clockwise. Defaults to 0.
    • options.maxWidth Maximum barcode width (including quiet zones). If specified, then the moduleWidth will be adjusted if necessary to make the entire barcode fit in the given width.
    • options.width If given, then ignore moduleWidth and maxWidth and set the moduleWidth so that the barcode will have the given width (including quiet zones).

Note: width and maxWidth refer to the unrotated barcode width.

SVG

If the first parameter to bardcode.drawBarcode, g, is "svg", then an SVG string is returned.

For the moment, the only supported options when using SVG are:

  • options.type
  • options.height
  • options.moduleWidth
  • options.quietZoneSize
  • options.maxWidth
  • options.width

Path

If the first parameter to bardcode.drawBarcode, g, is "path", then a path string is returned, like:

M 28.920,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 37.596,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 46.272,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 60.732,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 69.408,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 83.868,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 92.544,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 98.328,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 109.896,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 124.356,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 130.140,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 147.492,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 156.168,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 164.844,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 179.304,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 187.980,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 205.332,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 211.116,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 219.792,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 234.252,0 l 8.676,0 l 0,90.72 l -8.676,0 Z M 245.820,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 251.604,0 l 5.784,0 l 0,90.72 l -5.784,0 Z

For the moment, the only supported options when using path are:

  • options.type
  • options.height
  • options.moduleWidth
  • options.quietZoneSize
  • options.maxWidth
  • options.width

Errors

Errors are thrown on invalid input, for example when including letters in EAN barcodes.

Installation

node-canvas installation causes issues for a lot of users. So it's an optional dependency (i.e. you should Bring Your Own Canvas). It's also not a node dependency because it's not the only output format.

For the browser:

  • Include dist/bardcode.js or dist/bardcode.min.js

For node:

  • npm install canvas (requires cairo)
  • npm install bardcode

For meteor:

  • (optional) meteor add meteorhacks:npm and add "canvas": "1.1.6" to packages.json
  • meteor add froatsnook:bardcode

Testing

Tests require meteor and zbar.

  • Download zbar: http://zbar.sourceforge.net/
  • ./configure --disable-video --without-qt --without-gtk --without-python
  • make
  • Copy zbarimg/zbarimg and zbar/.libs/libzbar.so* to a new directory called zbar in bardcode's project directory
  • meteor test-packages ./ in bardcode's project directory
  • Open localhost:3000 in a browser

Contributors

Thank you:

License

MIT

About

Draw 1-D barcodes to Canvases, Paths, and SVGs

Resources

Stars

36 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Render 1-D barcodes to canvas, svg, or path. Supports Code 128, 3 of 9, 2 of 5, EAN, and more.

Why?

This barcode library has no dependencies 👍.

This barcode library specializes in its use of the canvas API. You provide a canvas (be it in a browser or with node-canvas), and then specify where the barcode should be drawn, how large it should be, and at what angle.

Other barcode libraries that I found created pngs or svgs directly and were not very flexible in the output size (i.e. no maxWidth option). Rendering directly to a canvas allows for a flexible API if that's your target anyway. You can also easily generate SVG or Path text output.

Demos/Playground

First of all, check out the demos.

Barcode Generator

Did you ever want to paste a list of strings and download a zip file of corresponding images? Well I did once and made this barcode-generator. See demos for the source.

How?

// In the browservarcanvas=document.getElementById("barcode-canvas");varg=canvas.getContext("2d");drawBarcode(g,"Test barcode",options);
// On the servervarbardcode=require("bardcode");varCanvas=require("canvas");varcanvas=newCanvas(595,842,"pdf");varg=canvas.getContext("2d");bardcode.drawBarcode(g,"Test barcode",options);
// Meteor servervarCanvas=Meteor.npmRequire("canvas");varcanvas=newCanvas(595,842,"pdf");varg=canvas.getContext("2d");drawBarcode(g,"Test barcode",options);

Symbology

The following barcode formats are supported:

  • Codabar
  • Code 128 (and GS1 128)
  • Code 39
  • EAN-8
  • EAN-13
  • FIM
  • ITF (interleaved 2 of 5)
  • UPC-A

API

// browser+meteordrawBarcode(g,barcodeText,options);// nodevarbardcode=require("bardcode");bardcode.drawBarcode(g,barcodeText,options);
  • g is a Canvas' 2-D graphics context or the output format. The only supported non-canvas output format is "svg".
  • barcodeText is a string or an array (in case you want to include command characters like "FNC 1"). Allowed characters depend on the chosen symbology. You generally don't need to include start, end, or check characters.
  • options is an optional object with the following properties:
    • options.type Barcode type. Defaults to Code 128. Other valid options are "GS1 128", "Codabar", "Code 39", "EAN-8", "EAN-13", "FIM", "ITF" (interleaved 2 of 5), and "UPC-A".
    • options.hasChecksum If true, the barcode already has a checksum (which will be validated); if false, calculate and add a checksum. Defaults to false. Currently works only for EAN-type barcodes (EAN-8, EAN-13, UPC-A).
    • options.x Where to draw barcode. Defaults to 0.
    • options.y Where to draw the barcode. Defaults to 0.
    • options.horizontalAlign How to align the barcode. Defaults to "left". Other options are "center" and "right".
    • options.verticalAlign How to align the barcode. Defaults to "top". Other options are "middle" and "bottom".
    • options.height Barcode height. Defaults to 90.72.
    • options.moduleWidth Width of thinnest bar. Defaults to 2.892.
    • options.quietZoneSize Number of moduleWidths in quiet zone on either side. Defaults to 10.
    • options.angle Rotate barcode this many degrees clockwise. Defaults to 0.
    • options.maxWidth Maximum barcode width (including quiet zones). If specified, then the moduleWidth will be adjusted if necessary to make the entire barcode fit in the given width.
    • options.width If given, then ignore moduleWidth and maxWidth and set the moduleWidth so that the barcode will have the given width (including quiet zones).

Note: width and maxWidth refer to the unrotated barcode width.

SVG

If the first parameter to bardcode.drawBarcode, g, is "svg", then an SVG string is returned.

For the moment, the only supported options when using SVG are:

  • options.type
  • options.height
  • options.moduleWidth
  • options.quietZoneSize
  • options.maxWidth
  • options.width

Path

If the first parameter to bardcode.drawBarcode, g, is "path", then a path string is returned, like:

M 28.920,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 37.596,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 46.272,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 60.732,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 69.408,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 83.868,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 92.544,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 98.328,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 109.896,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 124.356,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 130.140,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 147.492,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 156.168,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 164.844,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 179.304,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 187.980,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 205.332,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 211.116,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 219.792,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 234.252,0 l 8.676,0 l 0,90.72 l -8.676,0 Z M 245.820,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 251.604,0 l 5.784,0 l 0,90.72 l -5.784,0 Z

For the moment, the only supported options when using path are:

  • options.type
  • options.height
  • options.moduleWidth
  • options.quietZoneSize
  • options.maxWidth
  • options.width

Errors

Errors are thrown on invalid input, for example when including letters in EAN barcodes.

Installation

node-canvas installation causes issues for a lot of users. So it's an optional dependency (i.e. you should Bring Your Own Canvas). It's also not a node dependency because it's not the only output format.

For the browser:

  • Include dist/bardcode.js or dist/bardcode.min.js

For node:

  • npm install canvas (requires cairo)
  • npm install bardcode

For meteor:

  • (optional) meteor add meteorhacks:npm and add "canvas": "1.1.6" to packages.json
  • meteor add froatsnook:bardcode

Testing

Tests require meteor and zbar.

  • Download zbar: http://zbar.sourceforge.net/
  • ./configure --disable-video --without-qt --without-gtk --without-python
  • make
  • Copy zbarimg/zbarimg and zbar/.libs/libzbar.so* to a new directory called zbar in bardcode's project directory
  • meteor test-packages ./ in bardcode's project directory
  • Open localhost:3000 in a browser

Contributors

Thank you:

License

MIT

About

Draw 1-D barcodes to Canvases, Paths, and SVGs

Resources

Stars

36 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Render 1-D barcodes to canvas, svg, or path. Supports Code 128, 3 of 9, 2 of 5, EAN, and more.

Why?

This barcode library has no dependencies 👍.

This barcode library specializes in its use of the canvas API. You provide a canvas (be it in a browser or with node-canvas), and then specify where the barcode should be drawn, how large it should be, and at what angle.

Other barcode libraries that I found created pngs or svgs directly and were not very flexible in the output size (i.e. no maxWidth option). Rendering directly to a canvas allows for a flexible API if that's your target anyway. You can also easily generate SVG or Path text output.

Demos/Playground

First of all, check out the demos.

Barcode Generator

Did you ever want to paste a list of strings and download a zip file of corresponding images? Well I did once and made this barcode-generator. See demos for the source.

How?

// In the browservarcanvas=document.getElementById("barcode-canvas");varg=canvas.getContext("2d");drawBarcode(g,"Test barcode",options);
// On the servervarbardcode=require("bardcode");varCanvas=require("canvas");varcanvas=newCanvas(595,842,"pdf");varg=canvas.getContext("2d");bardcode.drawBarcode(g,"Test barcode",options);
// Meteor servervarCanvas=Meteor.npmRequire("canvas");varcanvas=newCanvas(595,842,"pdf");varg=canvas.getContext("2d");drawBarcode(g,"Test barcode",options);

Symbology

The following barcode formats are supported:

  • Codabar
  • Code 128 (and GS1 128)
  • Code 39
  • EAN-8
  • EAN-13
  • FIM
  • ITF (interleaved 2 of 5)
  • UPC-A

API

// browser+meteordrawBarcode(g,barcodeText,options);// nodevarbardcode=require("bardcode");bardcode.drawBarcode(g,barcodeText,options);
  • g is a Canvas' 2-D graphics context or the output format. The only supported non-canvas output format is "svg".
  • barcodeText is a string or an array (in case you want to include command characters like "FNC 1"). Allowed characters depend on the chosen symbology. You generally don't need to include start, end, or check characters.
  • options is an optional object with the following properties:
    • options.type Barcode type. Defaults to Code 128. Other valid options are "GS1 128", "Codabar", "Code 39", "EAN-8", "EAN-13", "FIM", "ITF" (interleaved 2 of 5), and "UPC-A".
    • options.hasChecksum If true, the barcode already has a checksum (which will be validated); if false, calculate and add a checksum. Defaults to false. Currently works only for EAN-type barcodes (EAN-8, EAN-13, UPC-A).
    • options.x Where to draw barcode. Defaults to 0.
    • options.y Where to draw the barcode. Defaults to 0.
    • options.horizontalAlign How to align the barcode. Defaults to "left". Other options are "center" and "right".
    • options.verticalAlign How to align the barcode. Defaults to "top". Other options are "middle" and "bottom".
    • options.height Barcode height. Defaults to 90.72.
    • options.moduleWidth Width of thinnest bar. Defaults to 2.892.
    • options.quietZoneSize Number of moduleWidths in quiet zone on either side. Defaults to 10.
    • options.angle Rotate barcode this many degrees clockwise. Defaults to 0.
    • options.maxWidth Maximum barcode width (including quiet zones). If specified, then the moduleWidth will be adjusted if necessary to make the entire barcode fit in the given width.
    • options.width If given, then ignore moduleWidth and maxWidth and set the moduleWidth so that the barcode will have the given width (including quiet zones).

Note: width and maxWidth refer to the unrotated barcode width.

SVG

If the first parameter to bardcode.drawBarcode, g, is "svg", then an SVG string is returned.

For the moment, the only supported options when using SVG are:

  • options.type
  • options.height
  • options.moduleWidth
  • options.quietZoneSize
  • options.maxWidth
  • options.width

Path

If the first parameter to bardcode.drawBarcode, g, is "path", then a path string is returned, like:

M 28.920,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 37.596,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 46.272,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 60.732,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 69.408,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 83.868,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 92.544,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 98.328,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 109.896,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 124.356,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 130.140,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 147.492,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 156.168,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 164.844,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 179.304,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 187.980,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 205.332,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 211.116,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 219.792,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 234.252,0 l 8.676,0 l 0,90.72 l -8.676,0 Z M 245.820,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 251.604,0 l 5.784,0 l 0,90.72 l -5.784,0 Z

For the moment, the only supported options when using path are:

  • options.type
  • options.height
  • options.moduleWidth
  • options.quietZoneSize
  • options.maxWidth
  • options.width

Errors

Errors are thrown on invalid input, for example when including letters in EAN barcodes.

Installation

node-canvas installation causes issues for a lot of users. So it's an optional dependency (i.e. you should Bring Your Own Canvas). It's also not a node dependency because it's not the only output format.

For the browser:

  • Include dist/bardcode.js or dist/bardcode.min.js

For node:

  • npm install canvas (requires cairo)
  • npm install bardcode

For meteor:

  • (optional) meteor add meteorhacks:npm and add "canvas": "1.1.6" to packages.json
  • meteor add froatsnook:bardcode

Testing

Tests require meteor and zbar.

  • Download zbar: http://zbar.sourceforge.net/
  • ./configure --disable-video --without-qt --without-gtk --without-python
  • make
  • Copy zbarimg/zbarimg and zbar/.libs/libzbar.so* to a new directory called zbar in bardcode's project directory
  • meteor test-packages ./ in bardcode's project directory
  • Open localhost:3000 in a browser

Contributors

Thank you:

License

MIT

About

Draw 1-D barcodes to Canvases, Paths, and SVGs

Resources

Stars

36 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Render 1-D barcodes to canvas, svg, or path. Supports Code 128, 3 of 9, 2 of 5, EAN, and more.

Why?

This barcode library has no dependencies 👍.

This barcode library specializes in its use of the canvas API. You provide a canvas (be it in a browser or with node-canvas), and then specify where the barcode should be drawn, how large it should be, and at what angle.

Other barcode libraries that I found created pngs or svgs directly and were not very flexible in the output size (i.e. no maxWidth option). Rendering directly to a canvas allows for a flexible API if that's your target anyway. You can also easily generate SVG or Path text output.

Demos/Playground

First of all, check out the demos.

Barcode Generator

Did you ever want to paste a list of strings and download a zip file of corresponding images? Well I did once and made this barcode-generator. See demos for the source.

How?

// In the browservarcanvas=document.getElementById("barcode-canvas");varg=canvas.getContext("2d");drawBarcode(g,"Test barcode",options);
// On the servervarbardcode=require("bardcode");varCanvas=require("canvas");varcanvas=newCanvas(595,842,"pdf");varg=canvas.getContext("2d");bardcode.drawBarcode(g,"Test barcode",options);
// Meteor servervarCanvas=Meteor.npmRequire("canvas");varcanvas=newCanvas(595,842,"pdf");varg=canvas.getContext("2d");drawBarcode(g,"Test barcode",options);

Symbology

The following barcode formats are supported:

  • Codabar
  • Code 128 (and GS1 128)
  • Code 39
  • EAN-8
  • EAN-13
  • FIM
  • ITF (interleaved 2 of 5)
  • UPC-A

API

// browser+meteordrawBarcode(g,barcodeText,options);// nodevarbardcode=require("bardcode");bardcode.drawBarcode(g,barcodeText,options);
  • g is a Canvas' 2-D graphics context or the output format. The only supported non-canvas output format is "svg".
  • barcodeText is a string or an array (in case you want to include command characters like "FNC 1"). Allowed characters depend on the chosen symbology. You generally don't need to include start, end, or check characters.
  • options is an optional object with the following properties:
    • options.type Barcode type. Defaults to Code 128. Other valid options are "GS1 128", "Codabar", "Code 39", "EAN-8", "EAN-13", "FIM", "ITF" (interleaved 2 of 5), and "UPC-A".
    • options.hasChecksum If true, the barcode already has a checksum (which will be validated); if false, calculate and add a checksum. Defaults to false. Currently works only for EAN-type barcodes (EAN-8, EAN-13, UPC-A).
    • options.x Where to draw barcode. Defaults to 0.
    • options.y Where to draw the barcode. Defaults to 0.
    • options.horizontalAlign How to align the barcode. Defaults to "left". Other options are "center" and "right".
    • options.verticalAlign How to align the barcode. Defaults to "top". Other options are "middle" and "bottom".
    • options.height Barcode height. Defaults to 90.72.
    • options.moduleWidth Width of thinnest bar. Defaults to 2.892.
    • options.quietZoneSize Number of moduleWidths in quiet zone on either side. Defaults to 10.
    • options.angle Rotate barcode this many degrees clockwise. Defaults to 0.
    • options.maxWidth Maximum barcode width (including quiet zones). If specified, then the moduleWidth will be adjusted if necessary to make the entire barcode fit in the given width.
    • options.width If given, then ignore moduleWidth and maxWidth and set the moduleWidth so that the barcode will have the given width (including quiet zones).

Note: width and maxWidth refer to the unrotated barcode width.

SVG

If the first parameter to bardcode.drawBarcode, g, is "svg", then an SVG string is returned.

For the moment, the only supported options when using SVG are:

  • options.type
  • options.height
  • options.moduleWidth
  • options.quietZoneSize
  • options.maxWidth
  • options.width

Path

If the first parameter to bardcode.drawBarcode, g, is "path", then a path string is returned, like:

M 28.920,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 37.596,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 46.272,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 60.732,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 69.408,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 83.868,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 92.544,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 98.328,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 109.896,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 124.356,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 130.140,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 147.492,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 156.168,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 164.844,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 179.304,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 187.980,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 205.332,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 211.116,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 219.792,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 234.252,0 l 8.676,0 l 0,90.72 l -8.676,0 Z M 245.820,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 251.604,0 l 5.784,0 l 0,90.72 l -5.784,0 Z

For the moment, the only supported options when using path are:

  • options.type
  • options.height
  • options.moduleWidth
  • options.quietZoneSize
  • options.maxWidth
  • options.width

Errors

Errors are thrown on invalid input, for example when including letters in EAN barcodes.

Installation

node-canvas installation causes issues for a lot of users. So it's an optional dependency (i.e. you should Bring Your Own Canvas). It's also not a node dependency because it's not the only output format.

For the browser:

  • Include dist/bardcode.js or dist/bardcode.min.js

For node:

  • npm install canvas (requires cairo)
  • npm install bardcode

For meteor:

  • (optional) meteor add meteorhacks:npm and add "canvas": "1.1.6" to packages.json
  • meteor add froatsnook:bardcode

Testing

Tests require meteor and zbar.

  • Download zbar: http://zbar.sourceforge.net/
  • ./configure --disable-video --without-qt --without-gtk --without-python
  • make
  • Copy zbarimg/zbarimg and zbar/.libs/libzbar.so* to a new directory called zbar in bardcode's project directory
  • meteor test-packages ./ in bardcode's project directory
  • Open localhost:3000 in a browser

Contributors

Thank you:

License

MIT

About

Draw 1-D barcodes to Canvases, Paths, and SVGs

Resources

Stars

36 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Render 1-D barcodes to canvas, svg, or path. Supports Code 128, 3 of 9, 2 of 5, EAN, and more.

Why?

This barcode library has no dependencies 👍.

This barcode library specializes in its use of the canvas API. You provide a canvas (be it in a browser or with node-canvas), and then specify where the barcode should be drawn, how large it should be, and at what angle.

Other barcode libraries that I found created pngs or svgs directly and were not very flexible in the output size (i.e. no maxWidth option). Rendering directly to a canvas allows for a flexible API if that's your target anyway. You can also easily generate SVG or Path text output.

Demos/Playground

First of all, check out the demos.

Barcode Generator

Did you ever want to paste a list of strings and download a zip file of corresponding images? Well I did once and made this barcode-generator. See demos for the source.

How?

// In the browservarcanvas=document.getElementById("barcode-canvas");varg=canvas.getContext("2d");drawBarcode(g,"Test barcode",options);
// On the servervarbardcode=require("bardcode");varCanvas=require("canvas");varcanvas=newCanvas(595,842,"pdf");varg=canvas.getContext("2d");bardcode.drawBarcode(g,"Test barcode",options);
// Meteor servervarCanvas=Meteor.npmRequire("canvas");varcanvas=newCanvas(595,842,"pdf");varg=canvas.getContext("2d");drawBarcode(g,"Test barcode",options);

Symbology

The following barcode formats are supported:

  • Codabar
  • Code 128 (and GS1 128)
  • Code 39
  • EAN-8
  • EAN-13
  • FIM
  • ITF (interleaved 2 of 5)
  • UPC-A

API

// browser+meteordrawBarcode(g,barcodeText,options);// nodevarbardcode=require("bardcode");bardcode.drawBarcode(g,barcodeText,options);
  • g is a Canvas' 2-D graphics context or the output format. The only supported non-canvas output format is "svg".
  • barcodeText is a string or an array (in case you want to include command characters like "FNC 1"). Allowed characters depend on the chosen symbology. You generally don't need to include start, end, or check characters.
  • options is an optional object with the following properties:
    • options.type Barcode type. Defaults to Code 128. Other valid options are "GS1 128", "Codabar", "Code 39", "EAN-8", "EAN-13", "FIM", "ITF" (interleaved 2 of 5), and "UPC-A".
    • options.hasChecksum If true, the barcode already has a checksum (which will be validated); if false, calculate and add a checksum. Defaults to false. Currently works only for EAN-type barcodes (EAN-8, EAN-13, UPC-A).
    • options.x Where to draw barcode. Defaults to 0.
    • options.y Where to draw the barcode. Defaults to 0.
    • options.horizontalAlign How to align the barcode. Defaults to "left". Other options are "center" and "right".
    • options.verticalAlign How to align the barcode. Defaults to "top". Other options are "middle" and "bottom".
    • options.height Barcode height. Defaults to 90.72.
    • options.moduleWidth Width of thinnest bar. Defaults to 2.892.
    • options.quietZoneSize Number of moduleWidths in quiet zone on either side. Defaults to 10.
    • options.angle Rotate barcode this many degrees clockwise. Defaults to 0.
    • options.maxWidth Maximum barcode width (including quiet zones). If specified, then the moduleWidth will be adjusted if necessary to make the entire barcode fit in the given width.
    • options.width If given, then ignore moduleWidth and maxWidth and set the moduleWidth so that the barcode will have the given width (including quiet zones).

Note: width and maxWidth refer to the unrotated barcode width.

SVG

If the first parameter to bardcode.drawBarcode, g, is "svg", then an SVG string is returned.

For the moment, the only supported options when using SVG are:

  • options.type
  • options.height
  • options.moduleWidth
  • options.quietZoneSize
  • options.maxWidth
  • options.width

Path

If the first parameter to bardcode.drawBarcode, g, is "path", then a path string is returned, like:

M 28.920,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 37.596,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 46.272,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 60.732,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 69.408,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 83.868,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 92.544,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 98.328,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 109.896,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 124.356,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 130.140,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 147.492,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 156.168,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 164.844,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 179.304,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 187.980,0 l 11.568,0 l 0,90.72 l -11.568,0 Z M 205.332,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 211.116,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 219.792,0 l 5.784,0 l 0,90.72 l -5.784,0 Z M 234.252,0 l 8.676,0 l 0,90.72 l -8.676,0 Z M 245.820,0 l 2.892,0 l 0,90.72 l -2.892,0 Z M 251.604,0 l 5.784,0 l 0,90.72 l -5.784,0 Z

For the moment, the only supported options when using path are:

  • options.type
  • options.height
  • options.moduleWidth
  • options.quietZoneSize
  • options.maxWidth
  • options.width

Errors

Errors are thrown on invalid input, for example when including letters in EAN barcodes.

Installation

node-canvas installation causes issues for a lot of users. So it's an optional dependency (i.e. you should Bring Your Own Canvas). It's also not a node dependency because it's not the only output format.

For the browser:

  • Include dist/bardcode.js or dist/bardcode.min.js

For node:

  • npm install canvas (requires cairo)
  • npm install bardcode

For meteor:

  • (optional) meteor add meteorhacks:npm and add "canvas": "1.1.6" to packages.json
  • meteor add froatsnook:bardcode

Testing

Tests require meteor and zbar.

  • Download zbar: http://zbar.sourceforge.net/
  • ./configure --disable-video --without-qt --without-gtk --without-python
  • make
  • Copy zbarimg/zbarimg and zbar/.libs/libzbar.so* to a new directory called zbar in bardcode's project directory
  • meteor test-packages ./ in bardcode's project directory
  • Open localhost:3000 in a browser

Contributors

Thank you:

License

MIT

About

Draw 1-D barcodes to Canvases, Paths, and SVGs

Resources

Stars

36 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages