当前位置:   article > 正文

Java TSC 打印机调用java 实例 打印标签(文字、图片)_tsclib.dll 打印图片

tsclib.dll 打印图片

本文 打印机型号:TSC TTP-243E Pro   选配 USB    分辨率200 DPI,1 点=1/8 mm (300 DPI,1点 =1/12 mm)

 一、 打印机安装

1、安装说明: 官方文档

2、驱动下载:驱动 

二、程序调用

1、下载官方提供的 Java 调用 范例

解压 文件,如下:

 其中提供了调用实例(但会报错,找不到TSCLIB),如下

  1. import com.sun.jna.Library;
  2. import com.sun.jna.Native;
  3. public class Main {
  4. public interface TscLibDll extends Library {
  5. TscLibDll INSTANCE = (TscLibDll) Native.loadLibrary ("TSCLIB", TscLibDll.class);
  6. int about ();
  7. int openport (String pirnterName);
  8. int closeport ();
  9. int sendcommand (String printerCommand);
  10. int setup (String width,String height,String speed,String density,String sensor,String vertical,String offset);
  11. int downloadpcx (String filename,String image_name);
  12. int barcode (String x,String y,String type,String height,String readable,String rotation,String narrow,String wide,String code);
  13. int printerfont (String x,String y,String fonttype,String rotation,String xmul,String ymul,String text);
  14. int clearbuffer ();
  15. int printlabel (String set, String copy);
  16. int formfeed ();
  17. int nobackfeed ();
  18. int windowsfont (int x, int y, int fontheight, int rotation, int fontstyle, int fontunderline, String szFaceName, String content);
  19. }
  20. public static void main(String[] args) {
  21. TscLibDll.INSTANCE.openport("TSC TTP-243E Pro");
  22. TscLibDll.INSTANCE.sendcommand("REM ***** This is a test by JAVA. *****");
  23. TscLibDll.INSTANCE.setup("100", "100", "5", "8", "0", "0", "0");
  24. TscLibDll.INSTANCE.clearbuffer();
  25. TscLibDll.INSTANCE.printerfont ("100", "10", "3", "0", "1", "1", "(JAVA) DLL Test!!");
  26. TscLibDll.INSTANCE.barcode("100", "40", "128", "50", "1", "0", "2", "2", "123456789");
  27. TscLibDll.INSTANCE.windowsfont(400, 200, 48, 0, 3, 1, "arial", "DEG 0");
  28. TscLibDll.INSTANCE.windowsfont(400, 200, 48, 90, 3, 1, "arial", "DEG 90");
  29. TscLibDll.INSTANCE.windowsfont(400, 200, 48, 180, 3, 1, "arial", "DEG 180");
  30. TscLibDll.INSTANCE.windowsfont(400, 200, 48, 270, 3, 1, "arial", "DEG 270");
  31. TscLibDll.INSTANCE.printlabel("1", "1");
  32. TscLibDll.INSTANCE.closeport();
  33. }
  34. }

但在,运行时会找不到.dll文件:

  1. Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'TSCLIB': ???????¨
  2. at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:164)
  3. at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:237)
  4. at com.sun.jna.Library$Handler.<init>(Library.java:140)
  5. at com.sun.jna.Native.loadLibrary(Native.java:375)
  6. at com.sun.jna.Native.loadLibrary(Native.java:360)
  7. at lunch.Test$TscLibDll.<clinit>(Test.java:16)
  8. at lunch.Test.main(Test.java:39)

即使如 文档中要求  Copy the “TscLib.Dll” to the folder \\WINDOWS\system32. 也是一样的效果

无奈只好另求他法,究极原因还是因为这个 TscLib.Dll 找不到

2、DLL文件使用

   2.1、把dll文件放到lib文件夹中,也可以放在外面,后面加载它能找到就行,如下:

2.2、 加载lib 时 build path 是找不到 .dll 文件的,需要如下的配置

快捷键 Alt + Enter 进入属性配置 

 2.3、新建 JniDll 类实例化接口,加载 TSCLIB

  1. package lunch;
  2. import com.sun.jna.Library;
  3. import com.sun.jna.Native;
  4. public class JniDll {
  5. public interface TscLibDll extends Library {
  6. TscLibDll INSTANCE = (TscLibDll) Native.loadLibrary ("TSCLIB", TscLibDll.class);
  7. int about ();
  8. int openport (String pirnterName);
  9. int closeport ();
  10. int sendcommand (String printerCommand);
  11. int setup (String width,String height,String speed,String density,String sensor,String vertical,String offset);
  12. int downloadpcx (String filename,String image_name);
  13. int barcode (String x,String y,String type,String height,String readable,String rotation,String narrow,String wide,String code);
  14. int printerfont (String x,String y,String fonttype,String rotation,String xmul,String ymul,String text);
  15. int clearbuffer ();
  16. int printlabel (String set, String copy);
  17. int formfeed ();
  18. int nobackfeed ();
  19. int windowsfont (int x, int y, int fontheight, int rotation, int fontstyle, int fontunderline, String szFaceName, String content);
  20. }
  21. }

2.4、 调用 jni方法

  1. package lunch;
  2. import lunch.JniDll.TscLibDll;
  3. public class Tester {
  4. // 加载 dll 库文件
  5. static {
  6. System.loadLibrary("TSCLIB");
  7. }
  8. public static void main(String[] args) {
  9. // TODO Auto-generated method stub
  10. System.out.println("------test----------");
  11. //设置打印机型号
  12. TscLibDll.INSTANCE.openport("TSC TTP-243E Pro");
  13. TscLibDll.INSTANCE.sendcommand("REM ***** This is a test by JAVA. *****");
  14. //设置标签的寬度、高度、列印速度、列印浓度、感应器类别、gap/black mark 垂直间距(标签纸的间距)、gap/black mark 偏移距离)
  15. TscLibDll.INSTANCE.setup("60", "40", "5", "8", "0", "3", "0");
  16. TscLibDll.INSTANCE.clearbuffer();
  17. //打印文本
  18. TscLibDll.INSTANCE.printerfont ("20", "10", "3", "0", "1", "1", "(JAVA) DLL Test!!");
  19. //设置条形码(不是二维码) 位置、大小、内容
  20. TscLibDll.INSTANCE.barcode("40", "30", "128", "50", "1", "0", "2", "2", "123456789");
  21. //设置文本(位置(x,y)、大小、旋转角度、文字X方向放大倍率,1~8 、文字Y方向放大倍率,1~8 字体arial、内容)
  22. TscLibDll.INSTANCE.windowsfont(40, 20, 18, 0, 3, 1, "arial", "DEG 0");
  23. TscLibDll.INSTANCE.windowsfont(400, 200, 48, 90, 3, 1, "arial", "DEG 90");
  24. TscLibDll.INSTANCE.windowsfont(400, 200, 48, 180, 3, 1, "arial", "DEG 180");
  25. TscLibDll.INSTANCE.windowsfont(400, 200, 48, 270, 3, 1, "arial", "DEG 270");
  26. //画框
  27. String command = "BOX 16,24,296,168,3";
  28. TscLibDll.INSTANCE.sendcommand(command);
  29. //打印的页数
  30. TscLibDll.INSTANCE.printlabel("1", "1");
  31. TscLibDll.INSTANCE.closeport();
  32. }
  33. }

注:文档的接口中提供的接口 barcode(a,b,c,d,e,f,g,h,I) 打印的是 条形码,若想实现打印二维码 需要自定义命令, 接口说明可去参考提供的 Android 接口文档

 详细指令请参考 TSPL

  1. public static void TscPrinter(String qrCode,String mT,String mS,String mD) {
  2. // TODO Auto-generated method stub
  3. System.setProperty("jna.encoding", "GBK");// 支持中文
  4. String mP ="P:15869423";
  5. String mV ="V:45821";
  6. //初始化 :设备 型号
  7. TscLibDll.INSTANCE.openport("TSC TTP-243E Pro");
  8. // 參數:
  9. // a: 字串型別,設定標籤寬度,單位 mm
  10. // b: 字串型別,設定標籤高度,單位 mm
  11. // c: 字串型別,設定列印速度,(列印速度隨機型不同而有不同的選項)
  12. // 1.0: 每秒1.0吋列印速度
  13. // 1.5: 每秒1.5吋列印速度
  14. // 2.0: 每秒2.0吋列印速度
  15. // 3.0: 每秒3.0吋列印速度
  16. // 4.0: 每秒4.0吋列印速度
  17. // 6.0: 每秒6.0吋列印速度
  18. // 8.0: 每秒8.0吋列印速度
  19. // 10.0: 每秒10.0吋列印速度
  20. // d: 字串型別,設定列印濃度,
  21. // 0~15,數字愈大列印結果愈黑
  22. // e: 字串型別,設定使用感應器類別
  23. // 0 表示使用垂直間距感測器(gap sensor)
  24. // 1 表示使用黑標感測器(black mark sensor)
  25. // f: 字串型別,設定gap/black mark 垂直間距高度,單位: mm
  26. // g: 字串型別,設定gap/black mark 偏移距離,單位: mm,此參數若使用一般標籤時均設為0
  27. TscLibDll.INSTANCE.setup("60","40","4","12","0","3","0");
  28. TscLibDll.INSTANCE.clearbuffer();
  29. //二维码的 位置 、大小、内容
  30. //80 80(x,y位置,8:大小)
  31. String command = "QRCODE 70,80,Q,5,A,0,M2,S7,\"" + qrCode+"\"";
  32. // String command = "QRCODE 80,80,Q,8,A,0,M2,S7,\"" + qrCode+"\"";
  33. //传送指令
  34. TscLibDll.INSTANCE.sendcommand(command);
  35. TscLibDll.INSTANCE.windowsfont(70, 10, 80, 0, 2, 0, "Segoe UI Black", "Title");
  36. TscLibDll.INSTANCE.windowsfont (360, 30, 32,0, 2, 0, "arial", "Logo");
  37. // 說明: 使用 Windows TTF 字型列印文字
  38. // 參數:
  39. // a: 整數型別,文字 X 方向起始點,以點(point)表示。
  40. // b: 整數型別,文字 Y 方向起始點,以點(point)表示。
  41. // c: 整數型別,字體高度,以點(point)表示。
  42. // d: 整數型別,旋轉角度,逆時鐘方向旋轉
  43. // 0 -> 0 degree
  44. // 90-> 90 degree
  45. // 180-> 180 degree
  46. // 270-> 270 degree
  47. // e: 整數型別,字體外形
  48. // 0-> 標準(Normal)
  49. // 1-> 斜體(Italic)
  50. // 2-> 粗體(Bold)
  51. // 3-> 粗斜體(Bold and Italic)
  52. // f: 整數型別, 底線
  53. // 0-> 無底線
  54. // 1-> 加底線
  55. // g: 字串型別,字體名稱。如: Arial, Times new Roman, 細名體, 標楷體
  56. // h: 字串型別,列印文字內容。
  57. TscLibDll.INSTANCE.windowsfont(250, 80, 32, 0, 2, 0, "arial", mP);
  58. TscLibDll.INSTANCE.windowsfont(250, 110, 32, 0, 2, 0, "arial", mT);
  59. TscLibDll.INSTANCE.windowsfont(250, 140, 31, 0, 2, 0, "arial", mV);
  60. TscLibDll.INSTANCE.windowsfont(245, 170, 31, 0, 2, 0, "arial", mS);
  61. TscLibDll.INSTANCE.windowsfont(250, 210, 31, 0, 2, 0, "arial", mD);
  62. TscLibDll.INSTANCE.windowsfont (120, 247, 35,0, 2, 0, "Microsoft YaHei UI", "MADE IN CHINA");
  63. //打印的页数 3:三页
  64. TscLibDll.INSTANCE.printlabel("1", "3");
  65. TscLibDll.INSTANCE.closeport();
  66. }

***关于打印图片   

   根据文档指令

需先将 想要打印的图片,转换成  .pcx  格式,放在本地路径下

然后根据 命令,打印

  1. /*
  2. * C:\\11.PCX 图片路径
  3. * 11.PCX 图片名
  4. * */
  5. TscLibDll.INSTANCE.downloadpcx("C:\\11.PCX", "11.PCX");
  6. /**
  7. *
  8. * (x,y)
  9. * 70 ,15
  10. * */
  11. TscLibDll.INSTANCE.sendcommand("PUTPCX 70,15,\"11.PCX\"");

**注意:运行后,若是报以下错误  ,说明你所依赖的 .dll 文件是 32位的

  1. Exception in thread "main" java.lang.UnsatisfiedLinkError: D:\AecplseWorksp\Tsc\lib\TSCLIB.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
  2. at java.lang.ClassLoader$NativeLibrary.load(Native Method)
  3. at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1929)
  4. at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1847)
  5. at java.lang.Runtime.loadLibrary0(Runtime.java:870)
  6. at java.lang.System.loadLibrary(System.java:1119)
  7. at com.tsc.lunch.Test.<clinit>(Test.java:15)

若是你的环境是64位的,请将你的 JDK 环境 换成 32位的 同样 eclipse也是32位的才行   

亦或者可以去下载 对应的  .dll  文件,附上地址:Windows dall 下载

解压如下:

注意:打包JRE时,若是加载不到 dll文件,改为如下

  1. // 加载 dll 库
  2. static {
  3. // System.loadLibrary("TSCLIB");
  4. //打包时用,否则加载不到 dll库
  5. System.loadLibrary("lib/TSCLIB");
  6. }

 结束:奉上测试时打印的 标签

若想Android实现 可参考上一篇文文章 :Android 连接 TSC打印机, 打印标签(文字、图片)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/179598?site
推荐阅读
相关标签
  

闽ICP备14008679号