react使用jsbarcode生成条形码

一、安装插件

npm install jsbarcode --save

二、封装为一个单独的js文件,也可以不封装直接使用。

//封装为一个单独的文件 Barcode.js
import React, { Component } from 'react';
import JsBarcode from 'jsbarcode';

// 条形码
export default class Barcode extends Component {

  static defaultProps = {
    format: 'CODE128',
    renderer: 'svg',
    width: 1.6,
    height: 25,
    displayValue: true,
    textAlign: 'center',
    textPosition: 'bottom',
    textMargin: 6,
    fontSize: 14,
    background: '#ffffff',
    lineColor: '#000000',
    margin: 0,
    marginBottom: 0,
  };

  constructor(props) {
    super(props);
    this.update = this.update.bind(this);
  };

  componentDidMount() {
    this.update();
  };

  componentDidUpdate() {
    this.update();
  };

  handleBarcode = (r) => {
    this.barcode = r;
  }

  update() {
    const {
      value,
      format,
      width,
      height,
      displayValue,
      textAlign,
      textPosition,
      textMargin,
      fontSize,
      background,
      margin,
      lineColor,
      marginBottom,
    } = this.props;
    JsBarcode(this.barcode, value, {
      format,
      width,
      height,
      displayValue,
      textAlign,
      textPosition,
      textMargin,
      fontSize,
      background,
      margin,
      lineColor,
      marginBottom,
    })
  };

  render() {
    const { renderer } = this.props;
    if (renderer === 'svg') {
      return (
        <svg ref={this.handleBarcode} />
      );
    } else if (renderer === 'canvas') {
      return (
        <canvas ref={this.handleBarcode} />
      );
    } else if (renderer === 'img') {
      return (
        <img ref={this.handleBarcode} alt="" />
      );
    }
  };
}

三、在react组件中使用

import Barcode from './Barcode.js';
//jsx内
<Barcode value={'102457899633'} height={50} width={2} />
//value为生成条形码的字符串,可由后端返回

PS:不封装为js,直接使用

import JsBarcode from 'jsbarcode';
import React,{useState,useEffect,useRef} from 'react';
const Barcode = () =>{
	const [barcode,setBarcode] = useState(null); //设置生成条形码的初始串为空
	const barcoderef = useRef()
	useEffect(() =>{
		initData()
	},[])
	useEffect(() =>{
		//检测barcode有值了之后,可调用生成条形码方法
		JsBarcode(barcoderef, barcode, {
	      displayValue: false,
	      width: 1.5,
	      height: 50,
	      margin: 0,
	    });
	},[barcode])
	const initData = () =>{
		//可在此处调用接口请求,然后将接口返回的生成条形码的串赋值给barcode
		setBarcode('10938388489494')
	}
	return (
      <div className="barcode-box">
        <svg
          ref={barcoderef}
        />
      </div>
    );
}

如有问题 欢迎指教

转自:https://blog.csdn.net/Aym_zzz/article/details/106691253

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React应用中,使用LoDop(LoveOJ Print)进行打印和生成条形码通常是在后端Node.js环境中操作,因为LoDop是一个针对Java环境的打印库,而在浏览器环境下React主要处理前端交互。然而,如果你想在React应用中通过服务器代理实现打印功能,可以按照以下步骤: 1. 安装LoDop依赖:如果你的服务器是基于Node.js的,并且还没有安装LoDop,可以在项目目录下运行`npm install lodop-printer`。 2. 在服务器端设置:创建一个Node.js文件,如`printService.js`,引入LoDop并初始化它: ```javascript const Lodaop = require('lodop-printer'); let lodaop; if (process.env.NODE_ENV === 'production') { // 生产环境加载 lodaop = new Lodaop(); } else { // 开发环境可能需要配置模拟打印机,这里忽略具体细节 } // 创建或初始化条形码 function createBarcode(code) { if (!lodaop) return Promise.reject(new Error('Lodaop not initialized')); const barcodeSheet = lodaop.createBarCodeSheet({ barWidth: 0.25, // 条宽度 barHeight: 0.6, // 条高度 code: code, type: 'CODE128', // 条形码类型 }); return new Promise((resolve, reject) => { try { lodaop.addPage(barcodeSheet); // 打印 lodaop.print({ printerName: '默认打印机' }, () => resolve()); } catch (error) { reject(error); } }); } ``` 3. 在React组件中调用这个服务:通过Ajax或fetch从React发送请求到服务器端的`createBarcode`方法,获取返回的Promise结果,从而在服务器上打印条形码。 ```jsx import axios from 'axios'; // ... const printBarcode = async (code) => { try { await axios.post('/api/print-barcode', { code }); console.log('条形码已成功打印'); } catch (error) { console.error('打印失败:', error.message); } }; // 在需要的地方调用 const generateAndPrint = async () => { const code = 'your-code-goes-here'; await printBarcode(code); }; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值