weixin_44753819 2021-08-06 11:27 采纳率: 0%
浏览 105
已结题

VBA 调用 ZPL 语言打印汉字的问题

在网上找了很久终于找到相关资料,fnthex32.dll插件里的GETFONTHEX函数可以实现。但发现这个函数里的字体高度与宽度参数值设置有讲究,不知道该根据所显示中文字符数的不同设置多少才能实现预期的打印效果,该如何计算?比如打印“客户零件号:”这个几个字符,设置高、宽分别为60,10打印出三次重复的字符“客户零件号:”,设置高、宽分别为60,15打印出两次重复的字符“客户零件号:”,设置高、宽分别为60,20等其他数值打印就成马赛克了。
VBA代码:
Private Declare Function GETFONTHEX Lib "E:\斑马打印中文插件\fnthex32.dll" (ByVal chnstr As String, ByVal fontname As String, ByVal orient As Integer, ByVal height As Integer, ByVal width As Integer, ByVal bold As Integer, ByVal italic As Integer, ByVal hexbuf As String) As Integer
Sub 转换()
Dim CBuf As String * 10240
n = GETFONTHEX(Sheets(1).Cells(2, 2), Sheets(1).Cells(2, 3), 0, Sheets(1).Cells(2, 4), Sheets(1).Cells(2, 5), 1, 0, CBuf)
Sheets(2).Cells(1, 1) = CBuf
End Sub

img

img
ZebraDesigner 模板如下:

img

将其直接打印到PRN文件后打开的代码如下:

CT~~CD,~CC^~CT~
^XA~TA000~JSN^LT0^MNW^MTT^PON^PMN^LH0,0^JMA^PR3,3~SD20^JUS^LRN^CI0^XZ
^XA
^MMT
^PW679
^LL0240
^LS0
^FO0,0
^GFA,04608,04608,00048,:Z64:
eJztlk2O1DAQhcsywptRm+UsoskcYxat5CpzhCyzaE2MOMBcAImbjMxJsDQXCDu3FGKqynY6fy1YItEWiqnw8fJcLpcb4DZu4zb+rdEvJoBHAGnAXeWHOLUpFEhKCz5GH7f8GKeXFEr8kHT89gCgt3wXp5oeZQgBedXzVykyG742l6lGAp0oz370Ll+mySRF4h00KVrTT6CjBE8HOPHf342Prx52eBCW/tFyzLz67vr45XJPH9OR9B3ymHz97n3k681qA6dEgjIFwDPyCvnPfXNFvwu8RGm1qQAoCA70l579w9Z/5gPnIvGluOrfo12VeCMSX0uX9Df+W2UB/0R9QetVqC/tNf9eO0oNpaii54miSlp/t5t/4VEOv0tbUCQeN0HZptjVl6gv3yDpK+JR8kU5X+/mX/alUV8nPgynMBDP2drTdzVXWOR1GJkPr1yZWJ/jer1UhDb7x0SdcIKgTCPMbn1i3WOGkj6kehu1Sfnf5BM6U855yrsYNFzLPwRLJ2vBy/EAqf7v79b82dIBjv6hHFosVjE88P+jUawTdO5HmPTrcaDiHqvcTzYbIPp+uPDlL+LVUEz6mw1zZ3/hUZp8vx1Jn4/SukEo21GpUyXTdxQ/Ctbf5bWpHemGuJeaH9UT6T/BdncxwaWd+Sl/4OPh2ET/py1fLfn6FaOHquFzF5PE3WMaJyjZj41nu1MYoX1oVOZVP+db6Ob5Ce9kvIrnTjCv/Zx/Bl4n6X+iNP3EimyO1DUs7g3rL3g8YZSyZFJ5j+2hqWKbkJ6b3ZJXPW2AsjFb7lTiBhcd8+gc3694jSds0q/Ni8bjVsWlqtjslnxt8dQmfRHgKFH/GOta8SqW+YFgJK448pKkEUn6MruaDTGgatbHrSs+4EVTxOsVDwXeCsIu7FPv7NMlg8V7rDElWd/ky2dmP6ZOxfepIyT/sNN/CD+7rFPHAk76ABt95VvexnQv49RZyP539KnRUO7LSQfNzfQv7/No+RfDpCOGtf9lPYO/9B5eEAnP9NHCcr/a3HvSgjBY+l/t71L/xAm56Ffr+k/+80ntvsHCf73hPfNTOxvhr/TzO+4/k39B39V7/jMvw9y/dOO+vpg0aHuJZ/9UuZv655PqcsjdbvJP/Gq/OuZtDss++o98t/Qy6adyhuR20q+3PPtXU0g/J4lvL19bDs7PYQrFQl/bDd8A3rSzW40U73P97PxcXY/HPyO3cRv/4/gNlZAKKw==:3D2C
^FO0,96
^GFA,10240,10240,00080,:Z64:
eJztmE2OrTYQhbE88NAbiMRGosfGntoszU9ZSJAyyJSMQiSEU+eUfzDcxwISrNv07cIcfy7KrnIPw9ve9ra3ve1tb3vb2972tre97W3/r5ZmXH/BZdwvZnvgq99wnRZcHQ2JBu3tZ30gpJUd9Nev8mNSirCnvZhHGMTCm3zc66NL6S19st6kQj5x9O+gSegnekcx88EhgdWlo+hJvw0G3hymXm/6DeMaXMZ13AofzSZ56WP3SUDGjZMMmNLu9tJbLFnPHDrt+WAXkuNXoh7N5rAA2byAjAtADETlzwNcdmv+r3oJQzo6J9D/yqfmHdx+dUIZ4hjhM4wbcTNkhaI3HPkq41rqfdG2NbPbYPALQMIMSurJHfkcWaHy0R8CIMORT76KzWzNLN4LwDEEFkrlE4+pLVCm45OhxwU+l+98SvnULERkMWShu8gHZujBo7b3n1M9o3wYcW1m+QTxVQT2oe8s6E/Tcz2fPOiz3sDXqnxqnsgX4Cub+YL6WX0KPd/ziYsQY5VvNmszS9zJJ2GW4hB74nMr/DwiLns+PLhlPQaV8qlZ/pIpQ28WMQIEfdCRD0ttnDq+ccXcVC9xvmszi/PGRc3upPdFvl35ptDzLZ3elPXULF11LYjepg/c+L5VPsafzMftZz5T+XYG2kpzFD0+0PyX+b73fPIKbeWb23xpTuBTt/oTX2hmCdfef/L+Or5B+dScAIrXGqJfT3yycqL2lu53vqwHP0unpZkTAw2BC72h6MlNHwEvC8UuN76qR8TKZ3dT+aY4nvimDes3RXXkha/Tg22dtmIG33bim1VP0gyWzYreNvZ8oec7BvNXSsWcuPkVvjrfkZtj4Obo4p3vqHqQ/gPpQs1H5Vu4+WU+nyJeLjdvP/fx1/NhFSTkmVD85zfX/Jf1XPobwZd+F+ZxuPDNZz5G7aLbSuXbrnwy5MosJ+H8bbj5zzQ9jTJhoRl8jv4bF/gvrw2kmDjkvfrrkQ8UR95Zfs43MPNapuXvj3xIYTtXbuFT/2W+br6O890f+eQv2Sft/sxn/0F9MP4Jyu2RjwsShkf/+TUgXn6IqvR+4qtR/cjno8eeiALLLsND/LVV/Bh/U5SkhjiQnByvfOf1YddyR83ptD5O61cSckLOE0o/3/3X+DCpK9+H9Ss/CfWBTdi3HvaXUmoep/1lPa3foeaPifkjzX648HV6Ux4pPe5/3OlX6sVRVruWqZ/4voYL31z4IvJH4WMAaX0wNb1b/ijhkvlu+aPoMbOVmvDG1/KblmqGiWxq+c3e8tvOtLIQZrjE3yn/osCzkVtgNn/Ov9yWyYf8271fE8cTn5PvLKGPnH9Zv5hSK5d6AzOwK/jGjk/1VmCpngSTK3w0t/plONUvD3wWcVX1pBxxsyefmlGcav0C2lqvoeZfZDIA6Pkc+Er9h/CjntwZW/1nrvXfEx/iqtanqDvxIg23aM96V0bnWjWn+nRnfbXmo1bPJ34p9TPjlIUet+hcP6NGMkdXP1PvI5+fbavHB0Y8gmZr9X1o9b0rfPVMMnV8iH7UsRiF9RVThGPlZ/P5gzVm1JMJ/Fz2l3b+6Pg4NE8RBxOWpCwZ121li+b5qKxV7mbYAxGW7Xx09l/KBzVJVkxYklJlXF2rn85vA6qqy/ktxKpnUzlf4hRBvrx4f3a+tMhpl/PlonqTPs6DLtAyn4yHEfP5d+zPv4a7SXf+DWV/yXojcinQeIG7mPdplj4LRUh2FD3D87lP+fCeDzRB9VzO9ZVPz8Kf/3+gevX/B/OZr7R6XqqGpZrv/99g8/pit+Ftb3vb2972trf9d9q/re/GIw==:5EDA
^PQ25,0,1,Y^XZ

img
这就是预期的打印效果。
修改后的ZPL文件代码如下:
大括号内的文本就是需要显示的文本“客户零件号:”的16进制表示,EXCElVBA运行后将sheet2的A1单元格中的第三个逗号之后的所有字符复制替换到那里。

CT~~CD,~CC^~CT~
^XA~TA000~JSN^LT0^MNW^MTT^PON^PMN^LH0,0^JMA^PR3,3~SD20^JUS^LRN^CI0^XZ
^XA
^MMT
^PW679
^LL0240
^LS0
^FO0,0
^GFA,02400,04608,00048,{mM0FM0EV0EgH0F8L0FO0EI0780FI01CH07T07CL078N0FI07C0FI01EH07
8S07CL07CJ0KFI07C0FI01JF8S03CL07CJ0KFI07C0EI01JF8S03CL03CJ0F8FK07B8EI01EH078Q0E0
3C07J03CL0FK0FBCEI01EH078Q0E01C07J03CL0FK0FBHEI01EH078Q0LF80383CI0380F01EH0F3HEI
01EH078Q0LF80381C3C03KFEH0F3CEI01EH078Q0LFC03JFE03LFH0F3CEI01EH078P01E1CH0FC03JF
E0380F01F01E3CEI01EH078P01E1EH0FH03JFC0380F01E01E38EI01EH078P01E3EH0EH03CH03C078
0F01C01E38E3801EH078P03E3E01EH03CH03C0780F03C01E78E7801EH078P03E3C0FCH03CH03C07K
F803E7IFC01EH078P03C7IFCH03CH03C07KF803F7IFC01JF8R07IFI03CH03C0780F03803F7IFC01J
F8H0P07IFI03CH03CJ0FJ03E70EI01EH078R0FC3FI03CH03CJ0EJ07E70EI01EH07S0FE3EI03CH03C
J0EJ07E70EI01EV0FE7CI03CH03CH0HFEHFH07EF0EI01CI078P01EF7CI03CH03CH0KFH07HE0EN078
P01EHF8I03CH03CI01FJ0FHE0EH03LFCP03C7F8I03JFCI03FJ0FHE0EH03LFCP03C7FJ03JFCI03FJ0
HFE0EH01C3ET0783EJ03JFCI07F8H01HFC0EJ03CT0703EJ03CH03CI0HFCH01DFC0E1CH03CK0FN0F0
3FJ03CH03CI0FBEH01DFC0E1CH03CJ01F8M0E07F8I03CH03CH01FDFH03DEH0E3EH03CJ01F8O0HFCI
03CH038H03FEFC039KFEH07C03801F8N01F7FI03CL07HF7F039KFEH07803801F8N03F3FCH03CL0FC
F7HF81FE0EJ0F807C01F8N07E1HF803CK01F0F1HF81EH0EJ0JFC01F8N0FC0HFE03CK07E070HF01EH
0EJ07IFC01F8M01F807FE038K0FC0707E01EH0EJ07H07CH0FN03FH0HF8078J01FH0739E01EH0EJ07
H078Q0LF8078J01CJFCH01EH0EM078P01LFH078L0JFCH01EH0EI0J078P07EFH078H078L07H07CH01
EH0EM078P078FH07I07P0FCH01EH0EM078R0FH07I0FO01FI01EH0EM078H0FO0FH07I0FO01EI01EH0
EM07801F8N0FH07I0FO03CI01EH0EM0FH01F8N0FH07I0EN0F7CI01EH0EM0FH01F8N0FH07H01EN0HF
8I01EH0EM0FH01F8N0FH07H01EN07FJ01EH0EK070FH01F8N0FH07H01CN03F8I01EH0EK07DFH01F8N
0FH07H03CO0FCI01EH0EK03HFH01FO0JFH03CO07EI01EH0EK01HFI0FO0JFH078O07EI01EH0EK01FE
S0FH07H078O03FI01EH0EL0FES0FH07H0FP01FI01EH0EL07CS0EH07H0EQ0FI01CH0EL078Y0EQ0EI0
1CkX0}==:3D2C
^FO0,96
^GFA,10240,10240,00080,:Z64:
eJztmE2OrTYQhbE88NAbiMRGosfGntoszU9ZSJAyyJSMQiSEU+eUfzDcxwISrNv07cIcfy7KrnIPw9ve9ra3ve1tb3vb2972tre97W3/r5ZmXH/BZdwvZnvgq99wnRZcHQ2JBu3tZ30gpJUd9Nev8mNSirCnvZhHGMTCm3zc66NL6S19st6kQj5x9O+gSegnekcx88EhgdWlo+hJvw0G3hymXm/6DeMaXMZ13AofzSZ56WP3SUDGjZMMmNLu9tJbLFnPHDrt+WAXkuNXoh7N5rAA2byAjAtADETlzwNcdmv+r3oJQzo6J9D/yqfmHdx+dUIZ4hjhM4wbcTNkhaI3HPkq41rqfdG2NbPbYPALQMIMSurJHfkcWaHy0R8CIMORT76KzWzNLN4LwDEEFkrlE4+pLVCm45OhxwU+l+98SvnULERkMWShu8gHZujBo7b3n1M9o3wYcW1m+QTxVQT2oe8s6E/Tcz2fPOiz3sDXqnxqnsgX4Cub+YL6WX0KPd/ziYsQY5VvNmszS9zJJ2GW4hB74nMr/DwiLns+PLhlPQaV8qlZ/pIpQ28WMQIEfdCRD0ttnDq+ccXcVC9xvmszi/PGRc3upPdFvl35ptDzLZ3elPXULF11LYjepg/c+L5VPsafzMftZz5T+XYG2kpzFD0+0PyX+b73fPIKbeWb23xpTuBTt/oTX2hmCdfef/L+Or5B+dScAIrXGqJfT3yycqL2lu53vqwHP0unpZkTAw2BC72h6MlNHwEvC8UuN76qR8TKZ3dT+aY4nvimDes3RXXkha/Tg22dtmIG33bim1VP0gyWzYreNvZ8oec7BvNXSsWcuPkVvjrfkZtj4Obo4p3vqHqQ/gPpQs1H5Vu4+WU+nyJeLjdvP/fx1/NhFSTkmVD85zfX/Jf1XPobwZd+F+ZxuPDNZz5G7aLbSuXbrnwy5MosJ+H8bbj5zzQ9jTJhoRl8jv4bF/gvrw2kmDjkvfrrkQ8UR95Zfs43MPNapuXvj3xIYTtXbuFT/2W+br6O890f+eQv2Sft/sxn/0F9MP4Jyu2RjwsShkf/+TUgXn6IqvR+4qtR/cjno8eeiALLLsND/LVV/Bh/U5SkhjiQnByvfOf1YddyR83ptD5O61cSckLOE0o/3/3X+DCpK9+H9Ss/CfWBTdi3HvaXUmoep/1lPa3foeaPifkjzX648HV6Ux4pPe5/3OlX6sVRVruWqZ/4voYL31z4IvJH4WMAaX0wNb1b/ijhkvlu+aPoMbOVmvDG1/KblmqGiWxq+c3e8tvOtLIQZrjE3yn/osCzkVtgNn/Ov9yWyYf8271fE8cTn5PvLKGPnH9Zv5hSK5d6AzOwK/jGjk/1VmCpngSTK3w0t/plONUvD3wWcVX1pBxxsyefmlGcav0C2lqvoeZfZDIA6Pkc+Er9h/CjntwZW/1nrvXfEx/iqtanqDvxIg23aM96V0bnWjWn+nRnfbXmo1bPJ34p9TPjlIUet+hcP6NGMkdXP1PvI5+fbavHB0Y8gmZr9X1o9b0rfPVMMnV8iH7UsRiF9RVThGPlZ/P5gzVm1JMJ/Fz2l3b+6Pg4NE8RBxOWpCwZ121li+b5qKxV7mbYAxGW7Xx09l/KBzVJVkxYklJlXF2rn85vA6qqy/ktxKpnUzlf4hRBvrx4f3a+tMhpl/PlonqTPs6DLtAyn4yHEfP5d+zPv4a7SXf+DWV/yXojcinQeIG7mPdplj4LRUh2FD3D87lP+fCeDzRB9VzO9ZVPz8Kf/3+gevX/B/OZr7R6XqqGpZrv/99g8/pit+Ftb3vb2972trf9d9q/re/GIw==:5EDA
^PQ2,0,1,Y^XZ

img
这是当前的打印效果。
问题一:请问如何打印出预期的效果?字符串变成其他的h,w参数又该如何设置才能打印出预期效果?
问题二:为何PRN文件中的原码中中文字符16进制表达中含有“:Z64:”,“==:5EDA”,“+”,“/”这类的字符,而API函数GETFONTHEX生成的十六进制表达里却没有?

  • 写回答

1条回答 默认 最新

  • 有问必答小助手 2021-08-09 17:04
    关注

    你好,我是有问必答小助手。为了技术专家团更好地为您解答问题,烦请您补充下(1)问题背景详情,(2)您想解决的具体问题,(3)问题相关代码图片或者报错信息。便于技术专家团更好地理解问题,并给出解决方案。

    您可以点击问题下方的【编辑】,进行补充修改问题。
    img

    评论

报告相同问题?

问题事件

  • 系统已结题 8月14日
  • 修改了问题 8月6日
  • 修改了问题 8月6日
  • 修改了问题 8月6日
  • 展开全部

悬赏问题

  • ¥15 MATLAB动图的问题
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名