Java調用TSC打印機進行打印

    最近項目中用到了打印機,最開始的徹底不懂,如今弄好了,因此作了總結,該篇包括後臺的調用打印(兩種方式)跟前端的js的打印,可是隻有IE如今支持打印,並且若是想遠程鏈接打印機,二維碼的生成和直接由打印機的命令進行操做,就要把修改瀏覽器的安全配置,下面再作詳細的介紹javascript

第一種後臺打印:    
    使用javax中的PrintServiceLookup類進行打印,能夠直接調用默認的打印機,也可使用下列的方法進行篩選打印: 
    PrintServiceLookup.lookupMultiDocPrintServices(flavorsattributes);
 可執行代碼以下:
public static void main(String[] args) {
            FileInputStream textStream = null;
            try {
                textStream = new FileInputStream("地址");
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } 
            if (textStream != null) // 當打印內容不爲空時
            {
                // 指定打印輸出格式
                DocFlavor flavor = DocFlavor.INPUT_STREAM.PDF;//SERVICE_FORMATTED.PRINTABLE
                // 定位默認的打印服務
                PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
                // 建立打印做業
                DocPrintJob job = printService.createPrintJob();
                // 設置打印屬性
                PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
                // 設置紙張大小,也能夠新建MediaSize類來自定義大小
                pras.add(MediaSizeName.ISO_A4);
                DocAttributeSet das = new HashDocAttributeSet();
                // 指定打印內容
                Doc doc = new SimpleDoc(textStream, flavor, das);
                // 不顯示打印對話框,直接進行打印工做
                try {
                    job.print(doc, pras); // 進行每一頁的具體打印操做
                } catch (PrintException pe) {
                    pe.printStackTrace();
                }
            } else {
                // 若是打印內容爲空時,提示用戶打印將取消
                JOptionPane.showConfirmDialog(null,
                        "Sorry, Printer Job is Empty, Print Cancelled!",
                        "Empty", JOptionPane.DEFAULT_OPTION,
                        JOptionPane.WARNING_MESSAGE);
            }
        }

 

 

 

 
第二種後臺打印:
    注意:第二種跟第三種打印使用的是打印機的命令進行操做,這裏須要jna的jar包,還有jdk要求是32位的,而且要要註冊對應的dll,對應不一樣的系統要在不一樣的Windows下進行註冊DLL,註冊成功以後須要win+R ,調用並運行  Regsvr32.exe TSCActiveX.dll 指令
    可執行代碼以下:
public class JavaDemo {
    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.openport("TSC TTP-244 Pro");//打印機型號
        TscLibDll.INSTANCE.setup("70","40","5","8","0","2","0");
        TscLibDll.INSTANCE.clearbuffer();
        String command = "QRCODE 120,90,Q,8,A,0,M1,S7,\"" + qrCode+"\""; //打印二維碼的參數和內容
        TscLibDll.INSTANCE.sendcommand(command); //傳送指令
        TscLibDll.INSTANCE.sendcommand("TEXT 300 70 36 0 0 0 arial"+ "辦公耗材-標籤紙");
        //TscLibDll.INSTANCE.windowsfont(300, 70, 36, 0, 0, 0, "arial", "辦公耗材-標籤紙");
        TscLibDll.INSTANCE.printlabel("1", "1");
        TscLibDll.INSTANCE.closeport();
    }
}

 


注意:這種打印方式,須要USB鏈接(ttp-244 pro),若是想在線生成,遠程鏈接,須要使用第三種方式
第三種JS打印
    在使用JS進行打印的時候要主要瀏覽器的限制,目前只有IE瀏覽器進行支持,在進行打印時,控制檯出現Automation 服務器不能建立對象的,請調節瀏覽器的安全中的自定義級別中的ActiveX中相關的設置爲啓用,代碼以下:
<script type="text/javascript">
 
function printQRcode(){
    
    var TSCObj = new ActiveXObject("TSCActiveX.TSCLIB");//打印機使用的dll
    //TSCObj.ActiveXabout(); // 打印機信息
    TSCObj.ActiveXopenport ("TSC TTP-244 Pro");//打印機名稱,不能寫錯
    //TSCObj.ActiveXdownloadpcx ("D:/myeclipseproject/filesManager/trunk/doc/02-參考資料/03-二維碼打印機/01-開發幫助/PHP調用範例/TSCActiveX.DLL-PHP-Example/","123.PCX");
    TSCObj.ActiveXsetup("70","40","4","15","0","2.5","0");//打印機設置
    //TSCObj.ActiveXsetup("標籤寬度","標籤高度","打印速度","打印濃度(0-15)","感應器類別字串型,0 表示使用垂直間距感測器(gap sensor), 1 表示使用黑標感測器(black mark senso)","Gap/Black mark垂直間距(mm)","Gap/Black mark偏移距離(mm)");
    //TSCObj.ActiveXformfeed();
    //TSCObj.ActiveXnobackfeed();
    TSCObj.ActiveXsendcommand("DIRECTION 1");  //設置標籤方向 ,DIRECTION 1 左上角 (x,y)={0,0};DIRECTION 0 右下角 (x,y)={0,0};
    TSCObj.ActiveXsendcommand ("SET TEAR ON");
    TSCObj.ActiveXclearbuffer();
    //TSCObj.ActiveXsendcommand ("PUTPCX 0,0,\"123.PCX\"");
    /*
    一、ActiveXprinterfont採用機器內置編碼一般用來打英文。
    二、ActiveXwindowsfont能夠輸出漢字,可是必須是系統中存在的字體。
    TSCObj.ActiveXprinterfont ("a","b","c","d","e","f","g");
    a:字符串,文字X方向起始點,以點表示。
    b:字符串,文字Y方向起始點,以點表示。
    c:內建字型名稱,共12種(1: 8*12 dots 2: 12*20 dots 3: 16*24 dots 4: 24*32 dots 5: 32*48 dots TST24.BF2: 繁體中文 24*24 TST16.BF2: 繁體中文 16*16 TTT24.BF2: 繁體中文 24*24 (電信碼) TSS24.BF2: 簡體中文 24*24 TSS16.BF2: 簡體中文 16*16 K: 韓文 24*24 L: 韓文 16*16 )
    d:字符串,旋轉角度
    e:字符串,X方向放大倍率1-8
    f:字符串,Y方向放大倍率1-8
    g:字符串,打印內容
    ActiveXwindowsfont(a,b,c,d,e,f,g,h)
    說明:使用Windows TTF字體打印文字。
    參數:
    a:整數類型,文字X方向起始點,以點表示。
    b:整數類型,文字Y方向起始點,以點表示。
    c:整數類型,字體高度,以點表示。
    d:整數類型,旋轉角度,逆時針方向旋轉。0-旋轉0°,90-旋轉90°,180-旋轉180°,270-旋轉270°。
    e:整數類型,字體外形。0:標籤;1:斜體;2:粗體;3:粗斜體。
    f:整數類型,下劃線,0:無下劃線;1:加下劃線。
    g:字符串類型,字體名稱。如:Arial,Times new Roman。
    h:字符串類型,打印文字內容。
    */
//    TSCObj.ActiveXwindowsfont (500, 200, 48, 90, 0, 0, "Arial", "\u7f16\u7801");
    TSCObj.ActiveXwindowsfont (260, 60, 60, 0, 2, 0, "Arial", "XX專用");
 
    //var cmd = 'QRCODE 條碼X方向起始點,條碼Y方向起始點,糾錯級別,二維碼高度,A(A和M),旋轉角度,M2(分爲類型1和類型2),S1 (s1-s8,默認s7),\"1231你好2421341325454353\"';
    var cmd = 'QRCODE 80,80,H,7,A,0,M2,S1,\"'+"123456789"+'\"';
 
    TSCObj.ActiveXsendcommand(cmd);
    TSCObj.ActiveXwindowsfont (280, 150, 40, 0, 0, 0, "Arial", "123456789");
    TSCObj.ActiveXwindowsfont (180, 260, 30, 0, 0, 0, "Arial", "XXXXXXXX");
    TSCObj.ActiveXprintlabel ("1","1");//(打印份數,每頁打印張數)
    TSCObj.ActiveXclearbuffer();//清除
    TSCObj.ActiveXcloseport();//關閉打印端口
}
 
</script>

 

 

 
                        謝謝!!!
相關文章
相關標籤/搜索