我们在做一个B/S架构程序,使用TSC打印机,调用TSCLIB.DLL打印,打印时,打印队列却是在服务器的打印队列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我们在做一个B/S架构程序,使用TSC打印机,调用TSCLIB.DLL打印,打印时,打印队列却是在服务器的打印队列相关的知识,希望对你有一定的参考价值。
浏览器端连的打印机,但是打印队列却是在服务器端。
有个设置的,调用本地的打印机就可以在本地打印了,你有可能是默认连接到远程的服务器上打印了。来自:求助得到的回答 参考技术A 注意服务器端调用和本地端程序调用。本地调用的话,一般使用JS+ActiveX,VBS+ActiveX,Java Applet等
打印队列如果在服务器端的话 估计是你写的服务器端程序的原因 参考技术B 那是,BS怎么可能调到本地的打印机。
权昌TSC条码打印机终极使用教程与开发版本代码大全
本教程使用的打印机型号:TSC TTP-244 Plus 官方文档
一、TSC打印机安装
1.机器安装
根据官方快速安装指南安装打印机,此处不详细说明,也可以看视频教程,唯一需要注意的地方就是碳带的方向不要装错
产品说明书
打印机初始化、感测器校正方法
a) 两个手指同时按住PAUSE、FEED键,不要松手,同时开机。
b) 待三个灯轮流闪时,只松开FEED键。待走纸,可松开PAUSE键。正常出纸是出大概2-3张标签纸。
c) 按下FEED键,正常出纸为一张标签纸高度。并停在正常撕纸位置。
2.安装驱动
驱动下载
安装完驱动后,在页面设置修改下纸张大小,打印测试页。
二、程序调用
1.准备
相关文件:TSPL2指令集(中文版) dll
注册dll:新建bat文件,复制对应系统版本的命令,把下载的dll和bat命令文件放到同一目录,执行bat命令。
32位系统
set source=.
set target=%windir%system32
echo ‘Copy Files...‘
copy %source%TSCActiveX.dll %target%
copy %source%TSCLIB.dll %target%
echo ‘Regist Service‘
regsvr32 %target%TSCActiveX.dll
64位系统
set source=.
set target=%windir%sysWOW64
echo ‘Copy Files...‘
copy %source%TSCActiveX.dll %target%
copy %source%TSCLIB.dll %target%
echo ‘Regist Service‘
regsvr32 %target%TSCActiveX.dll
2.JavaScript方式调用
<script type=‘text/javascript‘ language=‘javascript‘>
var d = new Date();
var time = d.toLocaleString();
var TSCObj;
TSCObj = new ActiveXObject("TSCActiveX.TSCLIB");//引入插件
//TSCObj.ActiveXabout();
TSCObj.ActiveXopenport ("TSC TTP-244 Plus");//打开打印机端口
TSCObj.ActiveXsetup ("99.5","70","5","8","0","2","0");//设置初始参数
//TSCObj.ActiveXformfeed();
//TSCObj.ActiveXnobackfeed();
TSCObj.ActiveXsendcommand ("SET TEAR ON");
TSCObj.ActiveXclearbuffer();
TSCObj.ActiveXwindowsfont (260, 100, 36, 0, 0, 0, "arial", "办公耗材-标签纸");//打印文本
TSCObj.ActiveXwindowsfont (450, 170, 32, 0, 0, 0, "arial", time);//打印时间
//BARCODE X,Y,”code type”,height,human readable,rotation,narrow,wide,[alignment,]”content“
TSCObj.ActiveXbarcode ("100", "300", "128", "100", "2", "0", "2", "2", "PD102011");//打印条码
TSCObj.ActiveXprintlabel ("1","1");
TSCObj.ActiveXcloseport();//关闭端口
</script>
3.C#调用
#region 调用TSC打印机打印条码
/// <summary>
/// 调用TSC打印机打印条码
/// </summary>
/// <param name="title">打印的标题</param>
/// <param name="barCode">打印的条码编号</param>
public static void TSC(string title, string barCode)
{
// 打开 打印机 端口.
TSCLIB_DLL.openport(p_port);
// 设置标签 宽度、高度 等信息.
// 宽 94mm 高 25mm
// 速度为4
// 字体浓度为8
// 使用垂直間距感測器(gap sensor)
// 两个标签之间的 间距为 3.5mm
TSCLIB_DLL.setup("94", "25", "4", "8", "0", "3.5", "0");
// 清除缓冲信息
TSCLIB_DLL.clearbuffer();
// 发送 TSPL 指令.
// 设置 打印的方向.
TSCLIB_DLL.sendcommand("DIRECTION 1");
// 打印文本信息.
// 在 (176, 16) 的坐标上
// 字体高度为34
// 旋转的角度为 0 度
// 2 表示 粗体.
// 文字没有下划线.
// 字体为 黑体.
// 打印的内容为:title
TSCLIB_DLL.windowsfont(176, 16, 34, 0, 2, 0, "宋体", title);
// 打印条码.
// 在 (176, 66) 的坐标上
// 以 Code39 的条码方式
// 条码高度 130
// 打印条码的同时,还打印条码的文本信息.
// 旋转的角度为 0 度
// 条码 宽 窄 比例因子为 7:12
// 条码内容为:barCode
TSCLIB_DLL.barcode("176", "66", "39", "130", "1", "0", "7", "12", barCode);
// 打印.
TSCLIB_DLL.printlabel("1", "1");
// 关闭 打印机 端口
TSCLIB_DLL.closeport();
}
#endregion
4.Java调用
解压文件,将jna.jar包添加到项目 下载地址
本示例打印的是二维码,由于官方文档中没有重写打印二维码的方法,我也懒得写了,直接使用的发送命令的方式打印。
package com.zmkj.momo.admin;
import com.sun.jna.Library;
import com.sun.jna.Native;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* TSC打印机测试
*/
public class TscPrint {
public interface TscLibDll extends Library {
TscLibDll INSTANCE = (TscLibDll) Native.loadLibrary("TSCLIB", TscLibDll.class);
int about();
int openport(String pirnterName);
int closeport();
int sendcommand(String printerCommand);
int setup(String width, String height, String speed, String density, String sensor, String vertical, String offset);
int downloadpcx(String filename, String image_name);
int barcode(String x, String y, String type, String height, String readable, String rotation, String narrow, String wide, String code);
int printerfont(String x, String y, String fonttype, String rotation, String xmul, String ymul, String text);
int clearbuffer();
int printlabel(String set, String copy);
int formfeed();
int nobackfeed();
int windowsfont(int x, int y, int fontheight, int rotation, int fontstyle, int fontunderline, String szFaceName, String content);
}
public static void main(String[] args) {
System.setProperty("jna.encoding", "GBK");// 支持中文
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = df.format(new Date());
String qrCode = "PD102011";
//TscLibDll.INSTANCE.about();
TscLibDll.INSTANCE.openport("TSC TTP-244 Plus");
//TscLibDll.INSTANCE.downloadpcx("C:\UL.PCX", "UL.PCX");
TscLibDll.INSTANCE.setup("99.5","70","5","8","0","2","0");
TscLibDll.INSTANCE.clearbuffer();
//TscLibDll.INSTANCE.sendcommand("PUTPCX 550,10,"UL.PCX"");
String command = "QRCODE 300,250,Q,8,A,0,M2,S7,"" + qrCode+"""; //打印二维码的参数和内容
TscLibDll.INSTANCE.sendcommand(command); //传送指令
TscLibDll.INSTANCE.windowsfont(260, 100, 36, 0, 0, 0, "arial", "办公耗材-标签纸");
TscLibDll.INSTANCE.windowsfont(450, 150, 32, 0, 0, 0, "arial", time);
TscLibDll.INSTANCE.printlabel("1", "1");
TscLibDll.INSTANCE.closeport();
}
}
C#调用TSC条码打印机打印二维码
#region 调用TSC打印机打印
/// <summary>
/// 调用TSC打印机打印
/// </summary>
/// <param name="title">打印的标题</param>
/// <param name="barCode">打印的条码编号</param>
public static void TSC(string title, string barCode)
{
// 打开 打印机 端口.
TSCLIB_DLL.openport(p_port);
// 设置标签 宽度、高度 等信息.
// 宽 94mm 高 25mm
// 速度为4
// 字体浓度为8
// 使用垂直間距感測器(gap sensor)
// 两个标签之间的 间距为 3.5mm
TSCLIB_DLL.setup("94", "25", "4", "8", "0", "3.5", "0");
// 清除缓冲信息
TSCLIB_DLL.clearbuffer();
// 发送 TSPL 指令.
// 设置 打印的方向.
TSCLIB_DLL.sendcommand("DIRECTION 1");
#region 请求sendcommand指令,打印二维码
//功能:繪製QRCODE二維條碼
//語法:
//QRCODE X, Y, ECC Level, cell width, mode, rotation, [model, mask,]"Data string”
//參數說明
//X QRCODE條碼左上角X座標
//Y QRCODE條碼左上角Y座標
//ECC level 錯誤糾正能力等級
//L 7%
//M 15%
//Q 25%
//H 30%
//cell width 1~10
//mode 自動生成編碼/手動生成編碼
//A Auto
//M Manual
//rotation 順時針旋轉角度
//0 不旋轉
//90 順時針旋轉90度
//180 順時針旋轉180度
//270 順時針旋轉270度
//model 條碼生成樣式
//1 (預設), 原始版本
//2 擴大版本
//mask 範圍:0~8,預設7
//Data string 條碼資料內容
#endregion
string command = "QRCODE 176,8,Q,8,A,0,M2,S7,"" + barCode + """;
TSCLIB_DLL.sendcommand(command);
// 打印文本信息.
// 在 (176, 8) 的坐标上
// 字体高度为34
// 旋转的角度为 0 度
// 2 表示 粗体.
// 文字没有下划线.
// 字体为 黑体.
// 打印的内容为:title
//---------------------------------根据需要再添加
//TSCLIB_DLL.windowsfont(176, 8, 34, 0, 2, 0, "宋体", title);
// 打印条码.
// 在 (176, 66) 的坐标上
// 以 Code39 的条码方式
// 条码高度 130
// 打印条码的同时,还打印条码的文本信息.
// 旋转的角度为 0 度
// 条码 宽 窄 比例因子为 7:12
// 条码内容为:barCode
//TSCLIB_DLL.barcode("176", "66", "39", "130", "1", "0", "7", "12", barCode);
// 打印.
TSCLIB_DLL.printlabel("1", "1");
// 关闭 打印机 端口
TSCLIB_DLL.closeport();
}
#endregion
C#调用TSC条码打印机打印条码
#region 调用TSC打印机打印条码
/// <summary>
/// 调用TSC打印机打印条码
/// </summary>
/// <param name="title">打印的标题</param>
/// <param name="barCode">打印的条码编号</param>
public static void TSC(string title, string barCode)
{
// 打开 打印机 端口.
TSCLIB_DLL.openport(p_port);
// 设置标签 宽度、高度 等信息.
// 宽 94mm 高 25mm
// 速度为4
// 字体浓度为8
// 使用垂直間距感測器(gap sensor)
// 两个标签之间的 间距为 3.5mm
TSCLIB_DLL.setup("94", "25", "4", "8", "0", "3.5", "0");
// 清除缓冲信息
TSCLIB_DLL.clearbuffer();
// 发送 TSPL 指令.
// 设置 打印的方向.
TSCLIB_DLL.sendcommand("DIRECTION 1");
// 打印文本信息.
// 在 (176, 16) 的坐标上
// 字体高度为34
// 旋转的角度为 0 度
// 2 表示 粗体.
// 文字没有下划线.
// 字体为 黑体.
// 打印的内容为:title
TSCLIB_DLL.windowsfont(176, 16, 34, 0, 2, 0, "宋体", title);
// 打印条码.
// 在 (176, 66) 的坐标上
// 以 Code39 的条码方式
// 条码高度 130
// 打印条码的同时,还打印条码的文本信息.
// 旋转的角度为 0 度
// 条码 宽 窄 比例因子为 7:12
// 条码内容为:barCode
TSCLIB_DLL.barcode("176", "66", "39", "130", "1", "0", "7", "12", barCode);
// 打印.
TSCLIB_DLL.printlabel("1", "1");
// 关闭 打印机 端口
TSCLIB_DLL.closeport();
}
#endregion
如果运行报错UnsatisfiedLinkError: Unable to load library “TSCLIB”...可以尝试把JDK换成32位版本。
在调用过程中有不明白的地方看TSPL2说明书,上面有详细的指令用法以及参数说明!!!
以上是关于我们在做一个B/S架构程序,使用TSC打印机,调用TSCLIB.DLL打印,打印时,打印队列却是在服务器的打印队列的主要内容,如果未能解决你的问题,请参考以下文章
关于C/S和B/S结构框架是否可以这样理解:所谓C/S即是winform程序,B/S即是ASP.NET?求高手指教?!~