如何通过程序来控制打印机的参数?

如何通过程序来控制打印机的参数?,第1张

一台打印机有相应的驱动程序,这个驱动程序就是用来控制打印机的运行,以及通过选项、设置来改变打印参数,从实现打印的效果。

一般可以预先设置打印机参数,从开始——设备与打印机,图00,图01。

也可以在就用程序中通过打印——首选项——来设置参数。下图示,是在网页浏览窗口,从文件——打印,来设置参数的对话窗口。

1、点击电脑左下方的开始,选择控制面板,找到打印机和传真,进入到打印机和传真窗口,选择OKI针式打印机;

2、点击窗口左上方的文件菜单,选择服务器属性

3、在d出窗口的中间位置,勾选创建新格式,并在上方表格名处输入自定义的名称,最后,在窗口左下方的纸张大小窗口里面输入实际使用纸张的宽度和高度,注意输入的单位为厘米(cm)

4、按确定按钮关闭此窗口,至此,自定义纸张设置完成。

5、如果上述4步 *** 作没有解决,请卸载打印机,重新安装打印机程序。

我以前写的Android应用

/**

*/

package com.example.printertest

import java.io.IOException

import java.io.OutputStream

import java.io.OutputStreamWriter

import java.io.UnsupportedEncodingException

import java.net.Socket

import java.util.List

import java.util.Map

/**

* @    POS小票打印机  网口无驱打印

*调用方法  new PrintLine().print(list,map,string)

* @author Btboy1978 QQ: 138027869

*/

public class PrintLine { 

static String PRINT_IP = "192.168.1.254"

static int PRINT_PORT = 9100

Socket socket = null

OutputStream socketOut = null

OutputStreamWriter writer = null

String[] Colum_Name = new String[] { "ID", "菜名", "份数", "小计金额" }// 设定小票列标题

/**

  * @throws IOException

  * 

  */

public PrintLine() throws IOException {

  // TODO Auto-generated constructor stub

  // 建立打印机连接

  //

  socket = new Socket("192.168.1.254", PRINT_PORT)

  socketOut = socket.getOutputStream()

  writer = new OutputStreamWriter(socketOut, "GBK")

}

/**

  * @param PRINT_DATA

  *            小票主要数据

  * @param GS_INFO

  *            小票附带信息

  * @param CAIDAN_SN

  *            小票号码

  */

public void print(List<Map<String, Object>> PRINT_DATA,

   Map<String, String> GS_INFO, String CAIDAN_SN) {

  /*

   * 接收小票页面 公司信息 Map<String,String> map=new HashMap<String,String>()

   * map.put("GS_Name", "武汉联兴科技有限公司") map.put("GS_Address",

   * "武汉市解放大道2679号") map.put("GS_Tel", "13507115045") map.put("GS_Qq",

   * "138027869")

   */

  try {

   // 条码打印指令

   byte[] PRINT_CODE = new byte[9]

   PRINT_CODE[0] = 0x1d

   PRINT_CODE[1] = 0x68

   PRINT_CODE[2] = 120

   PRINT_CODE[3] = 0x1d

   PRINT_CODE[4] = 0x48

   PRINT_CODE[5] = 0x10

   PRINT_CODE[6] = 0x1d

   PRINT_CODE[7] = 0x6B

   PRINT_CODE[8] = 0x02

   // 清除字体放大指令

   byte[] FD_FONT = new byte[3]

   FD_FONT[0] = 0x1c

   FD_FONT[1] = 0x21

   FD_FONT[2] = 4

   // 字体加粗指令

   byte[] FONT_B = new byte[3]

   FONT_B[0] = 27

   FONT_B[1] = 33

   FONT_B[2] = 8

   // 字体纵向放大一倍

   byte[] CLEAR_FONT = new byte[3]

   CLEAR_FONT[0] = 0x1c

   CLEAR_FONT[1] = 0x21

   CLEAR_FONT[2] = 0

   // 计算合计金额

   int price = 0

   // 初始化打印机

   socketOut.write(27)

   socketOut.write(64)

   socketOut.write(FD_FONT)// 字体放大

   socketOut.write(FONT_B)// 字体加粗

   socketOut.write(10)

   writer.write("  " + GS_INFO.get("GS_Name") + " \r\n")   

   writer.flush()// 关键,很重要,不然指令一次性输出,后面指令覆盖前面指令,导致取消放大指令无效

   socketOut.write(CLEAR_FONT)

   socketOut.write(10)

   writer.write("NO:  " + CAIDAN_SN + " \r\n")

   writer.write("---------------------------------\r\n")

   writer.write("地址: " + GS_INFO.get("GS_Address") + "\r\n")

   writer.write("联系电话: " + GS_INFO.get("GS_Tel") + " \r\n")

   writer.write("---------------------------------\r\n")

   writer.write(Fix_String_Lenth(1,Colum_Name[0], 6)

     + Fix_String_Lenth(0,Colum_Name[1], 14)

     + Fix_String_Lenth(1,Colum_Name[2], 4)

     + Fix_String_Lenth(1,Colum_Name[3], 6) + "\r\n")

   for (int i = 0 i < PRINT_DATA.size() i++) {

    writer.write(Fix_String_Lenth(1,i + 1 + "", 6)

      + Fix_String_Lenth(0,PRINT_DATA.get(i).get("cai_name")

        .toString(), 14)

      + Fix_String_Lenth(1,1 + "", 4)

      + Fix_String_Lenth(1,PRINT_DATA.get(i).get("cai_price")

        .toString(), 6) + "\r\n")

    price += Integer.parseInt(PRINT_DATA.get(i).get("cai_price")

      .toString())

   }

   writer.write("---------------------------------\r\n")

   writer.write("本单共  " + PRINT_DATA.size() + " 道菜品,合计费用:  " + price

     + "元\r\n")

   writer.write("---------------------------------\r\n")

   writer.write("    欢 迎 品 偿       谢 谢 惠 顾\r\n")

   // 下面指令为打印完成后自动走纸

   writer.write(27)

   writer.write(100)

   writer.write(4)

   writer.write(10)

   writer.close()

   socketOut.close()

  } catch (IOException e) {

   // TODO Auto-generated catch block

   e.printStackTrace()

  }

}

/**

  * 字符串长度补齐,方便打印时对齐,美化打印页面,不过中文计算好像有点问题

  * 

  * @param strs

  *            源字符

  * @param len

  *            指定字符长度

  * @return

  * @throws UnsupportedEncodingException 

  */

public String Fix_String_Lenth(int type ,String strs, int len) {

  String strtemp = strs

  int len1 = strs.length()

  switch (type) {

  case 0:

   while (strtemp.length() < len) {

    strtemp += " "}

   break

   case 1:

    while (strtemp.length() < len) {

     strtemp += " "}

    break

  default:

   

   break

  }  

  return strtemp

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7898993.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存