Я установил реагирующее веб-приложение, моя цель - распечатать на термопринтере, распечатать компонент текстового значения (например, текст hello world), когда пользователь нажимает кнопку в веб-браузере, я использовал пакет из https://www.npmjs.com/package/node-thermal-printer, но когда я вижу пример отличается, как создание компонента реагирования, и я запутался, как вызвать нажатие кнопки из компонента, чтобы отправить очередь на печать с помощью термопринтера. Кто-нибудь может мне в этом помочь?
Я могу дать вам очень общее представление о том, как вы хотите это сделать. Начнем с базового компонента:
const printer = require( 'node-thermal-printer' );
class TPrinter extends React.Component {
constructor( props ) {
super( props );
this._printer = printer.init( {
type: 'epson',
interface: '/dev/usb/lp0'
} );
}
handleOnClick() {
this._printer.alignCenter();
this._printer.println("Hello world");
this._printer.cut();
this._printer.execute( ( err ) => {
if ( err ) { return console.info( err ); }
console.info( 'Done!' );
} );
}
render() {
return (
<button onClick = { this.handleOnClick }></button>
)
}
}
Тогда вы можете использовать это так:
<TPrinter />
И он покажет кнопку, которая при нажатии делает то, что вы хотите. Теперь, конечно, вы можете сделать это намного интереснее, используя props
и те, которые используются в функции printer.init()
, но вы понимаете основную суть.
Здравствуйте, спасибо за руководство, но когда я пробую код, возникает такая ошибка: ОШИБКА в ./node_modules/node-thermal-printer/interfaces/file.js Модуль не найден: Ошибка: не удается разрешить 'fs' в так далее
Проверьте код модуля file
. Вы получите проблему. Все очень просто.
Я думаю, что узел-термопринтер предназначен для работы на узле. В браузере модуль fs недоступен.
Это причина, но я хотел, чтобы он это понял, потому что он буквально просто скопировал код.
Можно ли вообще запустить это из браузера? Если нет, то какой смысл создавать компонент React, который зависит от этой библиотеки?
@Osuriel - и да, и нет. Основная предпосылка, которую я пытаюсь здесь продемонстрировать, заключается в том, что пока у вас есть это символьное устройство (/dev/usb/lp0
), вы можете отправлять команды независимо от того, откуда вы это начали. Я смог заставить это работать, если я определил простой TCP-прокси для символьного устройства и немного изменил код в основной библиотеке, чтобы разрешить HTTP-запросы, а не напрямую писать байтовые последовательности на устройстве.
Пример для использования библиотеки. Вы не можете просто скопировать и вставить и ожидать, что это сработает.