各位IT的大佬前辈好,小弟又来发问了...想请教是否有办法透过 前端(JavaScript)来实作条码列印的功能呢?例如刷了某一个条码,经判断后为"123456789"的号码此时条码机就能够列印出 "123456789"的一维条码
不瞒各位大佬... 我本来很开心地想说自己做出来了但结果是我做在后端,当然我做的这个部分也没有特别艰深的技术而系统必须透过 tomcat 架设,没想到架设起来后才发现从在网页上刷了条码之后,列印都会往架设的tomcat 所在的主机的条码机跑...应该是要刷了条码之后,往使用这个tomcat 所架设起来的网页所在的主机端的机器跑才对...这就是我技术未深但却又做在后端的后果...试了很多方法还是碰壁,因此希望往上大佬们能够给我一些建议...
有想要尝试在前端透过object classid 的方式来做,但目前连classid 都还要不到...因此这部分的尝试只能暂缓也有想过透过在使用者端直接建立某个资料文件,将TSPL 或EZPL 指令写进去后透过cmd 下 copy 或 type 指令但好玩的是我就算不透过程式,直接下也没有印条码... 整个很尴尬...
114/01/24 更新!感谢 DennisLu 大佬宝贵的建议目前已在前端 透过JS 写入使用者端资料夹底下并建立文字档案内容然后透过 C# WinForm 写一个监听资料夹底下文字档案的一个执行档成功在使用者使用网页刷取条码的同时,于使用者端接上的条码印表机同步列印出条码(此过程为在已预先使用者端执行着 exe 档,Tomcat 也已在某一主机架设网页)后续还有针对印出中文字的部分透过工具下载至条码印表机里... 这又是另一个故事了...总之希望大家教学相长,也能够帮助到跟我遇到同样难题的人
1 个回答
2
DennisLu
iT邦好手 1 级 ‧ 2025-01-10 18:02:54
最佳解答
方案一:
写一个agent在Client端背景运行(常驻程式或背景服务),
网页程式送websocket把条码内容给Client端的agent,
agent负责接websocket跟将内容送列印给本机条码机。
方案二:(区网限定)
找看看有没有支援网路介面的条码机,
将列印指令都透过区域网路送到网路介面条码机,
至于后端主机送指令给网路条码机也行,反正是透过网路有通就好,
哪里有网路点,条码机就可以放在该处。
就不用写方案一的websocket跟agent。
方案二也可合併方案一的agent的方式,agent本身可以设计支援本机条码或送网路介面条码,对环境更灵活。
-
9 -
-
看更多先前的...收起先前的...
离开井底后吓到的 IT 空友
iT邦新手 4 级 ‧
2025-01-10 22:54:08
感谢大佬的建议!
想再请教,您说的方案一的部分是否像是我可能透过 C# Windows Form 来写一个exe 档执行着,用来接收网页传来的Websocket,然后再传到本机条码机呢?
另外想再请问,JavaScript是否真的没有办法直接传指令到使用者端的条码机上呢? 因为我有看到过列印A4那一方面就可以用JavaScript来实现,目前我也确实有抓到使用者端的条码印表机名称,透过 ActiveX 物件,因为系统比较老旧...是个必须只能用IE才能开启的网页系统
另外想再请问,JavaScript是否真的没有办法直接传指令到使用者端的条码机上呢? 因为我有看到过列印A4那一方面就可以用JavaScript来实现,目前我也确实有抓到使用者端的条码印表机名称,透过 ActiveX 物件,因为系统比较老旧...是个必须只能用IE才能开启的网页系统
修改
walljack1
iT邦新手 5 级 ‧
2025-01-11 00:05:02
前端是使用者介面,资料一定是来自后端,但是后端并没有限制一定要使用那种语言你可以选择python搭fastapi,c#走soket然后前端用socketio , nodejs 搭express, 还有很多其他做法,以上是前后端分离。 如果不想要这种方式当然也有前后端都是在同一个专案下的方式像是nextjs或nuxtjs的全端框架可以达到你所说的。
修改
离开井底后吓到的 IT 空友
iT邦新手 4 级 ‧
2025-01-11 12:58:29
感谢 walljack1 大佬的建议!
目前条码需要的资讯在一开始载入画面时,已经都从都从后端透过资料库捞出,只是现在尴尬的是,我必须在当前这个较旧系统的框架下去写,虽然也想过用其他的做法,但这边不好实作...
因此在阅读 DennisLu 大佬建议后,才想询问请教是否有可以从JavaScript实作的方法...
确实现在系统的的框架下,前面的前辈有实作出列印A4纸张的部分并且也是透过JavaScript
修改
walljack1
iT邦新手 5 级 ‧
2025-01-12 11:44:36
应该这么说好了,一个前端它不一定只对应一个后端它可以好几个后端并行,资料从后端来的意思是说不管你是要控制某个设备或操作某个资料库都要从后端进行,也就是说你完全可以用你擅长的语言写出新的后端既可以利用api的方式取到前端调码也能将其资讯传到列印机去。
修改
离开井底后吓到的 IT 空友
iT邦新手 4 级 ‧
2025-01-13 10:31:10
感谢您的回覆!
但是目前我这边的情况是,我透过api 的方式取到前端条码传到后端,也确实可以印出条码,可是测试的结果是,当tomcat 运作起来后,我在非执行tomcat 的电脑(使用者)开启我的网页,刷取条码列印,条码并不会从我使用者端的条码机印出,而是从tomcat 的电脑主机印出...
有些尴尬
修改
froce
iT邦大师 1 级 ‧
2025-01-13 10:44:11
条码并不会从我使用者端的条码机印出
这很正常啊...你要控制使用者的列印请用winform等不用透过浏览器,具有直接控制使用者硬体的框架去写。
透过浏览器就是呼叫浏览器的列印介面而已。
要不然就得写agent,但你都写agent了干嘛不直接写就好...
这很正常啊...你要控制使用者的列印请用winform等不用透过浏览器,具有直接控制使用者硬体的框架去写。
透过浏览器就是呼叫浏览器的列印介面而已。
要不然就得写agent,但你都写agent了干嘛不直接写就好...
修改
离开井底后吓到的 IT 空友
iT邦新手 4 级 ‧
2025-01-13 10:48:44
感谢 froce 大佬的回覆,这样我了解了!
修改
㊣浩瀚星空㊣
iT邦大神 1 级 ‧
2025-01-13 17:18:09
其实再给你一些观念好了。
前端语言一般很难能直接去控制设备的。(是有限制的)
这是因为基于「本机安全原则」
毕竟所谓的前端语言,是运行在客户的电脑上的一个程式码。
但程式码其实是从你的伺服器上输出到浏览器使用。
所以....并不能允许任意不合规则的取用。
像是「列印」这个功能。
可以呼叫原本浏览器的列印功能,这是允许的。因为呼叫这个功能。其主要控制权还是会回到用户身上。
但无法去指定某个设备去列印。这是不允许的。
毕竟所谓的前端语言,是运行在客户的电脑上的一个程式码。
但程式码其实是从你的伺服器上输出到浏览器使用。
所以....并不能允许任意不合规则的取用。
像是「列印」这个功能。
可以呼叫原本浏览器的列印功能,这是允许的。因为呼叫这个功能。其主要控制权还是会回到用户身上。
但无法去指定某个设备去列印。这是不允许的。
修改
离开井底后吓到的 IT 空友
iT邦新手 4 级 ‧
2025-01-14 08:19:09
了解了,这样我更清楚!
感谢 ㊣浩瀚星空㊣ 大佬的建议与回覆!
如果说使用浏览器这个列印功能是没问题,但是必须是要自动列印,且要写自动选择对印的印表机,因此思考过后来还是採用DennisLu 大佬的做法
修改