VueJsBarcode
A Vue 3 component wrapper for JsBarcode, allowing you to generate barcodes in your Vue3.js applications easily. This component supports multiple barcode formats and is fully customizable via props that map directly to JsBarcode options.
The existing JsBarcode port for Vue 3 vue3-barcode works well for most cases except its dependencies have not been updated for some time, which necessitated a new port. In addition, I required ability to allow multiple barcodes on the same page, which didn't work in vue3-barcode due to the way the barcode element was selected. This has been fixed in this port.
Since its a port of JsBarcode, all functionality available should work in the same manner. I used an AI to quickly pull up the following documentation.
Enjoy!
- Supports multiple barcode formats (e.g., CODE128, EAN13, UPC, etc.)
- Fully customizable appearance via props
- Reactivity support: updates when props change
- Compatible with both Options API and Composition API
- Can render barcodes using
<svg>
,<canvas>
, or<img>
elements - Easy to integrate into existing Vue 3 projects
Install the package via npm:
npm install vue-jsbarcode jsbarcode
vue-jsbarcode
: The Vue 3 componentjsbarcode
: The underlying barcode generation library
Note: jsbarcode
is listed as a peer dependency and must be installed separately.
Register the component globally in your main application file (e.g., main.js
):
import { createApp } from 'vue';
import App from './App.vue';
import VueJsBarcode from 'vue-jsbarcode';
const app = createApp(App);
app.use(VueJsBarcode);
app.mount('#app');
Now you can use <vue-js-barcode>
anywhere in your templates.
Import and register the component locally in your Vue component:
<script>
import { defineComponent } from 'vue';
import VueJsBarcode from 'vue-jsbarcode';
export default defineComponent({
components: {
VueJsBarcode,
},
// ... other component options
});
</script>
If you're using the <script setup>
syntax:
<template>
<vue-js-barcode :value="barcodeValue" format="CODE128"></vue-js-barcode>
</template>
<script setup>
import VueJsBarcode from 'vue-jsbarcode';
import { ref } from 'vue';
const barcodeValue = ref('1234567890');
</script>
<template>
<vue-js-barcode :value="barcodeValue" format="EAN13"></vue-js-barcode>
</template>
<script>
import { defineComponent, ref } from 'vue';
import VueJsBarcode from 'vue-jsbarcode';
export default defineComponent({
components: {
VueJsBarcode,
},
setup() {
const barcodeValue = ref('0123456789012');
return {
barcodeValue,
};
},
});
</script>
The component accepts various props that correspond directly to JsBarcode options. Below is a detailed breakdown of each prop and its purpose.
- Prop:
value
- Type: String or Number
- Default:
''
- Description: The value to be encoded into the barcode. This is required and should be a string or a number that represents the data you want to encode.
- Prop:
format
- Type: String
- Default:
'CODE128'
- Description: The barcode format to use. Available formats include:
CODE128
EAN13
UPC
EAN8
EAN5
EAN2
CODE39
ITF14
MSI
Pharmacode
- and others supported by JsBarcode
Example:
<vue-js-barcode :value="value" format="EAN13"></vue-js-barcode>
- Prop:
width
- Type: Number or String
- Default:
2
- Description: The width of a single bar in the barcode, in pixels.
- Prop:
height
- Type: Number or String
- Default:
100
- Description: The height of the barcode in pixels.
- Prop:
displayValue
- Type: Boolean or String (
'true'
or'false'
) - Default:
true
- Description: Whether to display the value (text) below the barcode.
- Prop:
text
- Type: String or Number
- Default:
undefined
- Description: Custom text to display under the barcode. If not set, the
value
prop will be used.
- Prop:
fontOptions
- Type: String
- Default:
''
- Description: Additional font options. Possible values include:
''
(default)'bold'
'italic'
'bold italic'
- Prop:
font
- Type: String
- Default:
'monospace'
- Description: The font family for the text displayed below the barcode.
- Prop:
textAlign
- Type: String
- Default:
'center'
- Description: The alignment of the text. Possible values:
'left'
'center'
'right'
- Prop:
textPosition
- Type: String
- Default:
'bottom'
- Description: The position of the text relative to the barcode. Possible values:
'top'
'bottom'
- Prop:
textMargin
- Type: Number or String
- Default:
2
- Description: The margin between the barcode and the text, in pixels.
- Prop:
fontSize
- Type: Number or String
- Default:
20
- Description: The font size of the text displayed below the barcode, in pixels.
- Prop:
background
- Type: String
- Default:
'#ffffff'
- Description: The background color of the barcode.
- Prop:
lineColor
- Type: String
- Default:
'#000000'
- Description: The color of the bars in the barcode.
- Prop:
margin
- Type: Number or String
- Default:
10
- Description: The margin around the barcode, in pixels. This sets all margins (top, bottom, left, right) to the same value.
- Prop:
marginTop
- Type: Number or String
- Default:
undefined
- Description: The top margin of the barcode, in pixels. If not set, the value of
margin
prop is used.
- Prop:
marginBottom
- Type: Number or String
- Default:
undefined
- Description: The bottom margin of the barcode, in pixels. If not set, the value of
margin
prop is used.
- Prop:
marginLeft
- Type: Number or String
- Default:
undefined
- Description: The left margin of the barcode, in pixels. If not set, the value of
margin
prop is used.
- Prop:
marginRight
- Type: Number or String
- Default:
undefined
- Description: The right margin of the barcode, in pixels. If not set, the value of
margin
prop is used.
- Prop:
flat
- Type: Boolean
- Default:
false
- Description: Renders the barcode flat without any background. Useful when rendering on transparent backgrounds.
- Prop:
ean128
- Type: Boolean or String (
'true'
or'false'
) - Default:
false
- Description: If set to true, uses the FNC1 character in Code 128 barcodes to encode GS1-128 (EAN-128) barcodes.
- Prop:
elementTag
- Type: String
- Default:
'svg'
- Description: The HTML tag to use for rendering the barcode. Possible values:
'svg'
(default)'canvas'
'img'
Usage:
<vue-js-barcode :value="value" element-tag="canvas"></vue-js-barcode>
<template>
<vue-js-barcode :value="barcodeValue"></vue-js-barcode>
</template>
<script>
import { defineComponent } from 'vue';
import VueJsBarcode from 'vue-jsbarcode';
export default defineComponent({
components: {
VueJsBarcode,
},
data() {
return {
barcodeValue: '1234567890',
};
},
});
</script>
<template>
<vue-js-barcode
:value="barcodeValue"
format="EAN13"
:width="1"
:height="80"
display-value="false"
line-color="#ff0000"
background="#ffff00"
></vue-js-barcode>
</template>
<script>
import { defineComponent } from 'vue';
import VueJsBarcode from 'vue-jsbarcode';
export default defineComponent({
components: {
VueJsBarcode,
},
data() {
return {
barcodeValue: '4006381333931', // Valid EAN-13 code
};
},
});
</script>
<template>
<vue-js-barcode :value="barcodeValue" :height="150" :font-size="16"></vue-js-barcode>
</template>
<script setup>
import VueJsBarcode from 'vue-jsbarcode';
import { ref } from 'vue';
const barcodeValue = ref('9876543210');
</script>
<template>
<div>
<vue-js-barcode
v-for="code in barcodes"
:key="code.value"
:value="code.value"
:format="code.format"
:text="code.text"
></vue-js-barcode>
</div>
</template>
<script>
import { defineComponent } from 'vue';
import VueJsBarcode from 'vue-jsbarcode';
export default defineComponent({
components: {
VueJsBarcode,
},
data() {
return {
barcodes: [
{ value: '1234567890', format: 'CODE128', text: 'Code 1' },
{ value: '4006381333931', format: 'EAN13', text: 'Code 2' },
{ value: '012345678905', format: 'UPC', text: 'Code 3' },
],
};
},
});
</script>
MIT
Note: This component is a wrapper around JsBarcode. For more advanced usage and barcode formats, refer to the JsBarcode documentation.