我正在尝试打印由react-barcode创建的条形码。
我尝试使用this question和this中描述的方法,但是我似乎无法打印条形码。
这可能是因为react-barcode渲染了SVG。我也尝试过react-to-print和react-easy-print,但它们似乎也使我失望。
我也希望条形码可以下载,但似乎无济于事。下面的代码是我到目前为止所获得的。
从'react'导入React,{组件}; 从“反应条形码”导入条形码;
class App extends Component {
state= {
value:''
}
onChange=(e)=>{
this.setState({value:e.target.value})
}
onClick=(e)=>{
// LOGIC TO PRINT BARCODE COMES HERE
}
render() {
const { value } = this.state;
return (
<div className="App">
<input type="text" onChange={this.onChange} value={value} />
<BarCode
value={value}
/>
<button onClick={this.onClick}>Print Barcode</button>
</div>
);
}
}
export default App;
答案 0 :(得分:0)
这是我使用过的,对我有用。 您将需要html2canvas。
我将为此使用React钩子,如果需要,可以随时将其转换为基于类的组件。
const App=(props)=>{
const [value,setValue] = React.useState('');
const wrapper_ref = React.useRef();
const onChange=(e)=>{
setValue(e.target.value)
}
const onClick=(e)=>{
const opt = {
scale: 4
}
const elem = wrapper_ref.current;
html2canvas(elem, opt).then(canvas => {
const iframe = document.createElement('iframe')
iframe.name = 'printf'
iframe.id = 'printf'
iframe.height = 0;
iframe.width = 0;
document.body.appendChild(iframe)
const imgUrl = canvas.toDataURL({
format: 'jpeg',
quality: '1.0'
})
const style=`
height:100vh;
width:100vw;
position:absolute;
left:0:
top:0;
`;
const url = `<img style="${style}" src="${imgUrl}"/>`;
var newWin = window.frames["printf"];
newWin.document.write(`<body onload="window.print()">${url}</body>`);
newWin.document.close();
});
}
return (
<div className="App">
<input type="text" onChange={onChange} value={value} />
{/**This wrapper is important*/}
<div ref={wrapper_ref}>
<BarCode
value={value}
/>
</div>
<button onClick={onClick}>Print Barcode</button>
</div>
);
}
export default App;
这可以工作