Java如何調(diào)用TSC打印機(jī)進(jìn)行打印詳解
前言
最近項(xiàng)目中用到了打印機(jī),最開(kāi)始的完全不懂,現(xiàn)在弄好了,所以做了總結(jié),該篇包括后臺(tái)的調(diào)用打?。▋煞N方式)跟前端的js的打印,但是只有IE現(xiàn)在支持打印,而且如果想遠(yuǎn)程連接打印機(jī),二維碼的生成和直接由打印機(jī)的命令進(jìn)行操作,就要把修改瀏覽器的安全配置,下面再做詳細(xì)的介紹
第一種后臺(tái)打印:
使用javax中的PrintServiceLookup類(lèi)進(jìn)行打印,可以直接調(diào)用默認(rèn)的打印機(jī),也可以使用下列的方法進(jìn)行篩選打印:
PrintServiceLookup.lookupMultiDocPrintServices(flavors, attributes);
可執(zhí)行代碼如下:
public static void main(String[] args) {
FileInputStream textStream = null;
try {
textStream = new FileInputStream("地址");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
if (textStream != null) // 當(dāng)打印內(nèi)容不為空時(shí)
{
// 指定打印輸出格式
DocFlavor flavor = DocFlavor.INPUT_STREAM.PDF;//SERVICE_FORMATTED.PRINTABLE
// 定位默認(rèn)的打印服務(wù)
PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
// 創(chuàng)建打印作業(yè)
DocPrintJob job = printService.createPrintJob();
// 設(shè)置打印屬性
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
// 設(shè)置紙張大小,也可以新建MediaSize類(lèi)來(lái)自定義大小
pras.add(MediaSizeName.ISO_A4);
DocAttributeSet das = new HashDocAttributeSet();
// 指定打印內(nèi)容
Doc doc = new SimpleDoc(textStream, flavor, das);
// 不顯示打印對(duì)話(huà)框,直接進(jìn)行打印工作
try {
job.print(doc, pras); // 進(jìn)行每一頁(yè)的具體打印操作
} catch (PrintException pe) {
pe.printStackTrace();
}
} else {
// 如果打印內(nèi)容為空時(shí),提示用戶(hù)打印將取消
JOptionPane.showConfirmDialog(null,
"Sorry, Printer Job is Empty, Print Cancelled!",
"Empty", JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE);
}
}
第二種后臺(tái)打?。?/strong>
注意:第二種跟第三種打印使用的是打印機(jī)的命令進(jìn)行操作,這里需要jna的jar包,還有jdk要求是32位的,并且要要注冊(cè)對(duì)應(yīng)的dll,對(duì)應(yīng)不同的系統(tǒng)要在不同的Windows下進(jìn)行注冊(cè)DLL,注冊(cè)成功之后需要win+R ,調(diào)用并運(yùn)行 Regsvr32.exe TSCActiveX.dll 指令
可執(zhí)行代碼如下:
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");//打印機(jī)型號(hào)
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+"\""; //打印二維碼的參數(shù)和內(nèi)容
TscLibDll.INSTANCE.sendcommand(command); //傳送指令
TscLibDll.INSTANCE.sendcommand("TEXT 300 70 36 0 0 0 arial"+ "辦公耗材-標(biāo)簽紙");
//TscLibDll.INSTANCE.windowsfont(300, 70, 36, 0, 0, 0, "arial", "辦公耗材-標(biāo)簽紙");
TscLibDll.INSTANCE.printlabel("1", "1");
TscLibDll.INSTANCE.closeport();
}
}
注意:這種打印方式,需要USB連接(ttp-244 pro),如果想在線(xiàn)生成,遠(yuǎn)程連接,需要使用第三種方式
第三種JS打印
在使用JS進(jìn)行打印的時(shí)候要主要瀏覽器的限制,目前只有IE瀏覽器進(jìn)行支持,在進(jìn)行打印時(shí),控制臺(tái)出現(xiàn)Automation 服務(wù)器不能創(chuàng)建對(duì)象的,請(qǐng)調(diào)節(jié)瀏覽器的安全中的自定義級(jí)別中的ActiveX中相關(guān)的設(shè)置為啟用,代碼如下:
<script type="text/javascript">
function printQRcode(){
var TSCObj = new ActiveXObject("TSCActiveX.TSCLIB");//打印機(jī)使用的dll
//TSCObj.ActiveXabout(); // 打印機(jī)信息
TSCObj.ActiveXopenport ("TSC TTP-244 Pro");//打印機(jī)名稱(chēng),不能寫(xiě)錯(cuò)
//TSCObj.ActiveXdownloadpcx ("D:/myeclipseproject/filesManager/trunk/doc/02-參考資料/03-二維碼打印機(jī)/01-開(kāi)發(fā)幫助/PHP調(diào)用范例/TSCActiveX.DLL-PHP-Example/","123.PCX");
TSCObj.ActiveXsetup("70","40","4","15","0","2.5","0");//打印機(jī)設(shè)置
//TSCObj.ActiveXsetup("標(biāo)簽寬度","標(biāo)簽高度","打印速度","打印濃度(0-15)","感應(yīng)器類(lèi)別字串型,0 表示使用垂直間距感測(cè)器(gap sensor), 1 表示使用黑標(biāo)感測(cè)器(black mark senso)","Gap/Black mark垂直間距(mm)","Gap/Black mark偏移距離(mm)");
//TSCObj.ActiveXformfeed();
//TSCObj.ActiveXnobackfeed();
TSCObj.ActiveXsendcommand("DIRECTION 1"); //設(shè)置標(biāo)簽方向 ,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\"");
/*
1、ActiveXprinterfont采用機(jī)器內(nèi)置編碼通常用來(lái)打英文。
2、ActiveXwindowsfont可以輸出漢字,但是必須是系統(tǒng)中存在的字體。
TSCObj.ActiveXprinterfont ("a","b","c","d","e","f","g");
a:字符串,文字X方向起始點(diǎn),以點(diǎn)表示。
b:字符串,文字Y方向起始點(diǎn),以點(diǎn)表示。
c:內(nèi)建字型名稱(chēng),共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: 簡(jiǎn)體中文 24*24 TSS16.BF2: 簡(jiǎn)體中文 16*16 K: 韓文 24*24 L: 韓文 16*16 )
d:字符串,旋轉(zhuǎn)角度
e:字符串,X方向放大倍率1-8
f:字符串,Y方向放大倍率1-8
g:字符串,打印內(nèi)容
ActiveXwindowsfont(a,b,c,d,e,f,g,h)
說(shuō)明:使用Windows TTF字體打印文字。
參數(shù):
a:整數(shù)類(lèi)型,文字X方向起始點(diǎn),以點(diǎn)表示。
b:整數(shù)類(lèi)型,文字Y方向起始點(diǎn),以點(diǎn)表示。
c:整數(shù)類(lèi)型,字體高度,以點(diǎn)表示。
d:整數(shù)類(lèi)型,旋轉(zhuǎn)角度,逆時(shí)針?lè)较蛐D(zhuǎn)。0-旋轉(zhuǎn)0°,90-旋轉(zhuǎn)90°,180-旋轉(zhuǎn)180°,270-旋轉(zhuǎn)270°。
e:整數(shù)類(lèi)型,字體外形。0:標(biāo)簽;1:斜體;2:粗體;3:粗斜體。
f:整數(shù)類(lèi)型,下劃線(xiàn),0:無(wú)下劃線(xiàn);1:加下劃線(xiàn)。
g:字符串類(lèi)型,字體名稱(chēng)。如:Arial,Times new Roman。
h:字符串類(lèi)型,打印文字內(nèi)容。
*/
// TSCObj.ActiveXwindowsfont (500, 200, 48, 90, 0, 0, "Arial", "\u7f16\u7801");
TSCObj.ActiveXwindowsfont (260, 60, 60, 0, 2, 0, "Arial", "XX專(zhuān)用");
//var cmd = 'QRCODE 條碼X方向起始點(diǎn),條碼Y方向起始點(diǎn),糾錯(cuò)級(jí)別,二維碼高度,A(A和M),旋轉(zhuǎn)角度,M2(分為類(lèi)型1和類(lèi)型2),S1 (s1-s8,默認(rèn)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");//(打印份數(shù),每頁(yè)打印張數(shù))
TSCObj.ActiveXclearbuffer();//清除
TSCObj.ActiveXcloseport();//關(guān)閉打印端口
}
</script>
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
解析Java編程中對(duì)于包結(jié)構(gòu)的命名和訪(fǎng)問(wèn)
這篇文章主要介紹了Java編程中對(duì)于包結(jié)構(gòu)的命名和訪(fǎng)問(wèn),是Java入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-12-12
java并發(fā)編程專(zhuān)題(三)----詳解線(xiàn)程的同步
這篇文章主要介紹了JAVA并發(fā)編程 線(xiàn)程同步的的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06
劍指Offer之Java算法習(xí)題精講鏈表與二叉樹(shù)專(zhuān)項(xiàng)訓(xùn)練
Java使用正則表達(dá)式(regex)匹配中文實(shí)例代碼

