解決兩個技術問題后小有感觸-QZ Tray使用經驗小總結

老朋友都知道,我現在是一家軟件公司銷售部門的項目經理和全棧開發工程師,就是這么“奇怪”的崗位,大概我是公司銷售團隊里比較少有技術背景、銷售業績又不那么理想的銷售。

近期在某個票務系統項目上駐場,原來我是這個項目的項目經理(從去年10月份做項目經理,到今年3月份),因為種種復雜的原因,我轉為駐場開發工程師,專門負責解決打印模塊。

這件事原來我一直以為比較簡單,因為十幾年前就做過某合作社的存單打印,b/s的項目,調好頁面中打印參數設置,直接用瀏覽器打印就可以了,打印按鈕直接調用ctrl+p 。 但項目的開發經理認為不能這樣,他也有他的理由,我看了現在的票務系統的打印流程,考慮到實際場景,比如多張票連續打印,瀏覽器自帶的打印功能確實不合適。

接下來準備自己用node.js開發一個打印的本地服務,給票務系統的相關頁面提供接口,接收要打印的信息,驅動打印機打印。但開發時間相對較長,時間成本上合適,于是發現了QZ Tray,一個很成熟的第三方解決方案,可以很好地與web進行交互,支持原始的打印命令驅動,方便定制打印模板。

打開Cursor,說干就干。沒多長時間就做好了演示模板,但問題出在了中文亂碼,不論我怎么調試,中文總是亂碼。

于是我把自己的AI員工問了一個遍,分別有谷歌的Gemini、DeepSeek,還有Qwen,甚至豆包。問他們同一個問題,得到了不同的答案,但一直沒有最優的解決方案。

后來終于在我反復推進提問中,找到了一絲線索,關于“字體”設置。雖然我在QZ Tray中一直設置各種編碼,可是我忽略了字體的設置。

打印機是TSC TTP-247,又經過N小時的探索,下載并使用了TSC Console V3.2.6.0,使用它的“點陣子工具”,自定義了一款中文字體,下載字型到打印機閃存中,才解決了這個問題。

這個問題說起來簡單,實際困擾了我兩天。這兩天讓我很煎熬,不能回到我銷售的崗位上,我又很惦記我的銷售業績,還有別的項目的任務等待我去推進,所以當解決問題之后,心里異常開心。

也許是QZ Tray使用的人相對比較少吧,能查到的資料真的不多,感謝幾位AI小伙伴。

可沒想到解決了以為是最大問題的中文亂碼問題,后邊的二維碼問題才是真正的問題。

TSC TTP-247是支持TSPL2打印語言的,所以不論是Cursor來寫代碼,還是我自己改來改去,直接用QRCODE的命令應該就可以。順利地生成了二維碼,看起來是沒有問題。不過二維碼這東西,人的肉眼怎么能一眼掃出問題呢?我隨手測試掃了一下,滿以為會隨著就能聽到“滴”的一聲,然后解析出二維碼的內容,但是,但是攝像頭在二維碼面前拍半天,愣是沒反應。

加起來就這么幾個參數,X,Y的坐標,容錯級別,大小等等,我來回把幾個參數從小調到大,從高調到低,打了幾十張測試票,就是不能掃碼成功。

甚至我把相同內容的二維碼,在電腦上生成,然后和打印出來的二維碼“人肉”對比,還是不行。

這個問題又困了我一整天。我最后以為這是打印機的問題,后來想想這種可能性太低了;

難道是這臺打印機生成的二維碼,只能檢票機器才能解碼?

這也不科學呀,技術上說不通,也沒必要。

除了用手機掃碼,還用草料網等在線解碼,甚至讓AI用算法解碼。

折騰得我快沒脾氣了,但一直沒放棄,有一點辦法都要去反復測試。甚至把二維碼先生成位圖圖片,再讓打印機去打印這個位圖,但結果慘不忍睹,打印質量像是一個密碼二維碼。

今天下午突然想到用官方的標簽工具來生成二維碼做測試,于是下載安裝了BarTender2022_92912,用它生成了二維碼再打印,這次居然成功了。

這說明打印機硬件是沒問題的,打印機只是一個輸出終端,一個輸出設備,為什么我在網頁用它的標準命令生成的二維碼就不行呢?

我想到了打印機日志。

于是打開打印機日志,再用BarTender打印了一張正常的二維碼,果然生成了一個改變此次事件的日志。

打開日志后如下圖:

上面的亂碼不重要,可以忽略,紅框是關鍵,就是這一行代碼,是BarTender向打印機發送二維碼的關鍵命令,和我在網頁中發送的命令,果然是有區別。

我參考這段命令完善了我的代碼,果然解決了這個問題。當我來質問Cursor時,它居然還振振有詞地說:

意思是我一開始給它提供的命令就是簡化版的,我一個大無語,你說面對這么一個AI員工,我能怎么辦?扣它工資?不存在,根本不存在工資和績效,罵它?那會讓AI覺得我沒素質,沒準以后不配合我工作,也不是咱的風格,真拿這家伙沒辦法。

最后我的收獲是,目前的AI水平真不能代替人工,不論是駕駛還是寫代碼,人臉的創造力是AI所不具備的。遇到問題的發散性思維,是作為一個人類工作者最寶貴的東西。

好久沒遇到過這種難題了,這事甚至讓我今天這個工作日請了病假,可能是壓力太大,腸胃不舒服又有些低燒,精神太差,撐不到正式工作場景,可下午實在氣不過(放心不下),又起來折騰,終于解決成功了。

回頭看看,很簡單的解決方案,看著這400來行的代碼(主文件)簡單,一看就懂,但是想要寫出來,真是有點考驗腦筋。

好了,不夸自己了,連夜寫篇總結,給后來也許會在b/s架構項目中用到QZ Tray的朋友提個醒:

解決中文亂碼問題,要在打印機生成中文字體,記住字體名稱,在網頁中定義好。

解決二維碼問題,參數一定要完整,例如:QRCODE 566,160,L,4,A,90,M2,S7,”TEST123″

遇到問題不要慌,要堅信一定有解決的問題,也許這就是做技術和做銷售最大的不同。做銷售的感覺,并不是100%努力了就一定能解決問題,或者是說,需要努力的層面太大,更多的是要和不同的人去打交道。而做技術寫代碼,只需要搞定代碼就可以。

其實我即使解決不了這兩個問題,會有什么嚴重的后果呢?丟面子吧,反正不會丟工作。但面子比工作重要,怎么能解決不了呢?不用去想別人怎么想我,我自己都接受不了自己在技術上的失敗,也許這個固執的性格問題,是讓我來解決這個問題的根本原因。

時間不早了,不敢熬夜了,最近血糖從20多到7~8來回震蕩,我這身體真是有點受不住。今天雖然在休息,但老板依然找我,說有個國外的視頻會議的項目打算讓我做開發,一會說讓我做前端,一會兒也可以讓我做后端,其實我想自己做全棧,即前后端一個人全做了。并不是我有什么大俠情景,可能是因為一個人開發習慣了吧,異地遠程團隊辦公,是最后的選擇。

我還比較關心,如果我一個全包了這個項目的開發,能給我多少$,我是一個累不死的小強。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/77464.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/77464.shtml
英文地址,請注明出處:http://en.pswp.cn/web/77464.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Centos 7.6安裝redis-6.2.6

1. 安裝依賴 確保系統已經安裝了必要的編譯工具和庫: sudo yum groupinstall "Development Tools" -y sudo yum install gcc make tcl -y 2. 解壓 Redis 源碼包 進入 /usr/local/ 目錄并解壓 redis-6.2.6.tar.gz 文件: cd /usr/local/ sudo ta…

Ejs模版引擎介紹,什么是模版引擎,什么是ejs,ejs基本用法

** EJS 模板引擎**,讓你徹底搞明白什么是模板引擎、什么是 EJS、怎么用、語法、最佳實踐等等: 📚 一、什么是模板引擎? 模板引擎是前后端分離之前的一種服務器端“渲染技術”。它的主要作用是: 將 HTML 頁面和后端傳遞…

2025.4.21-2025.4.26學習周報

目錄 摘要Abstract1 文獻閱讀1.1 模型架構1.1.1 動態圖鄰接矩陣的構建1.1.2 多層次聚合機制模塊1.1.3 AHGC-GRU 1.2 實驗分析 總結 摘要 在本周閱讀的論文中,作者提出了一種名為AHGCNN的自適應層次圖卷積神經網絡。AHGCNN通過將監測站點視為圖結構中的節點&#xf…

6.1 客戶服務:智能客服與自動化支持系統的構建

隨著企業數字化轉型的加速,客戶服務作為企業與用戶交互的核心環節,正經歷從傳統人工服務向智能化、自動化服務的深刻變革。基于大語言模型(LLM)和智能代理(Agent)的技術為構建智能客服與自動化支持系統提供…

java Optional

我還沒用過java8的一些語法,有點老古董了,記錄下Optional怎么用。 從源碼看,Optional內部持有一個對象, 有一些api對這個對象進行判空處理。 靜態方法of ,生成Optional對象, 但這個value不能為空&#…

【Java面試筆記:進階】24.有哪些方法可以在運行時動態生成一個Java類?

在Java中,運行時動態生成類是實現動態編程、框架擴展(如AOP、ORM)和插件化系統的關鍵技術。 1.動態生成Java類的方法 1.從源碼生成 直接生成源碼文件:通過Java程序生成源碼并保存為文件。編譯源碼: 使用ProcessBuilder啟動javac進程進行編譯。使用Java Compiler API(ja…

基于Jamba模型的天氣預測實戰

深入探索Mamba模型架構與應用 - 商品搜索 - 京東 DeepSeek大模型高性能核心技術與多模態融合開發 - 商品搜索 - 京東 由于大氣運動極為復雜,影響天氣的因素較多,而人們認識大氣本身運動的能力極為有限,因此以前天氣預報水平較低 。預報員在預…

GAMES202-高質量實時渲染(Real-Time Shadows)

目錄 Shadow MappingshadowMapping的問題shadow mapping背后的數學PCF(Percentage Closer Filtering)PCSS(Percentage closer soft shadows)VSSM(Variance Soft Shadow Mapping)優化步驟3優化步驟1SAT&…

iphonex uniapp textarea標簽兼容性處理過程梳理

嗨,我是小路。今天主要和大家分享的主題是“iphonex uniapp textarea標簽兼容性處理過程梳理”。 在uniapp項目中,經常會使用到uniapp原生的textarea標簽,但在手機兼容性這塊,textarea并不是很好用,會出現一些…

C++ 區分關鍵字和標識符

1. 關鍵字(Keywords) 定義:關鍵字是編程語言預定義的具有特定意義的單詞。它們是語言的一部分,C編譯器具有特殊的理解規則,不能作為用戶自定義的標識符。作用:關鍵字用于定義語言結構,如聲明變…

杭電oj(1087、1203、1003)題解

DP 即動態規劃(Dynamic Programming),是一種通過把原問題分解為相對簡單的子問題,并保存子問題的解來避免重復計算,從而解決復雜問題的算法策略。以下從幾個方面簡述動態規劃: 基本思想 動態規劃的核心在…

一鍵多環境構建——用 Hvigor 玩轉 HarmonyOS Next

引言 在 HarmonyOS Next 的應用開發中,常常需要針對不同環境(測試、預發、線上)或不同簽名(調試、正式)輸出多個 APP/HAP 包。雖然 HarmonyOS 提供了多目標構建(Multi-Target Build)能力&#…

qt/c++云對象瀏覽器

簡介 本項目為基于QT5和C11的云對象存儲可視化管理工具 源碼獲取 int main(){ printf("源碼聯系綠泡泡:%s","joyfelic"); return 0; }

【Ubuntu】提升 docker ps -a 輸出的可讀性:讓 Docker 容器狀態更清晰

提升 docker ps -a 輸出的可讀性:讓 Docker 容器狀態更清晰 當我們使用 docker ps -a 查看所有 Docker 容器時,輸出的信息通常會非常多,尤其是在容器數量較多時。默認輸出中包含容器 ID、名稱、鏡像、狀態、端口等信息,容易讓人眼…

Spring Security自定義身份認證

盡管項目啟動時,Spring Security會提供了默認的用戶信息,可以快速認證和啟動,但大多數應用程序都希望使用自定義的用戶認證。對于自定義用戶認證,Spring Security提供了多種認證方式,常用的有In-Memory Authentication…

在亞馬遜云服務器上部署WordPress服務

在亞馬遜云服務器上部署WordPress服務第一步:創建EC2實例第二步:初始設置與安裝第三步:配置MySQL與WordPress第四步:配置Apache與WordPress第五步:訪問WordPress第六步:測試數據庫連接第七步:使…

Web3.0的認知補充(去中心化)

涉及開發技術: Vue Web3.js Solidity 基本認知 Web3.0含義: 新一代互聯網思想:去中心化及用戶為中心的互聯網 數據:可讀可寫可授權 核心技術:區塊鏈、NFT 應用:互聯網上應用 NFT &…

如何修復寶可夢時時刻刻冒險無法正常工作

寶可夢的時時刻刻冒險模式是一項強大的功能,即使應用程序關閉,它也能追蹤你的步行距離。它的工作原理是將你的步數與 iOS 上的 Apple Health 或 Android 上的 Google Fit 同步。它對于孵化寶可夢蛋和賺取好友糖果至關重要,但一旦它停止工作&a…

redis常用集合操作命令

在 Redis 的命令行界面(redis-cli)中, Redis 的集合(Set)是無序的,且集合中的元素是唯一的。Redis 本身沒有直接提供獲取集合中某個特定屬性的命令,因為集合中的元素是簡單的值,而不…

初識數據結構——二叉樹從基礎概念到實踐應用

數據結構專欄 ?(click) 初識二叉樹:從基礎概念到實踐應用🌳 一、樹型結構基礎 1.1 樹的基本概念 樹是一種非線性的數據結構,由n(n>0)個有限節點組成一個具有層次關系的集合。它看起來像一棵倒掛的樹,根朝上而葉朝下。 關鍵特…