-
PAZU云打印版本 客户端是纯 js 的,可以嵌入到任何操作系统下任何支持js的浏览器。可以实现私有云、公有云、局域网等各种应用环境的部署。
对于操作系统平台的广泛支持,您现在可以让您的应用实现全平台的打印支持(包括并不限于:PC端,移动端,无论是IOS,MacOS,windows,安卓,linux....)
PAZU云打印 支持 互联网/局域网/单机(离线)下的打印,不需要链接互联网服务器!
强烈建议升级到云版本(授权许可通用,无需二次申请),旧IE ActiveX版已停止支持PAZU云打印的打印服务器是windows版本的(该服务器我们称作:打印服务器)。 打印服务器下需要下载安装 PAZU云打印值守 程序(PAZUCloud_setup.exe)。
运作模式 如下: 客户端(PC,手机等)--> 打印服务器 -->打印机
PAZUCloud编程指南: 例程(DEMO)>>
1.打印服务器的搭建
下载并安装 PAZUCloud_setup.exe ,程序会被安装到%Program Files%\PAZU云打印组件 目录。
把该文件夹的js文件夹内的pazuclient.js文件复制到您自己的应用根目录下js目录里,确保你的页面可以访问到这个页面。
如 http(s)://你的应用/js/pazuclient.js
2.在页面中加载 PAZU
在你需要打印的页面中加入 如下javascript代码:
var PAZU_Config = { prot:"http", //访问你的应用的协议 server: 'localhost', //打印服务器地址,如果你的应用面向Windows平台,则无需更改(每台客户端都自己做打印服务器) port: 6894, //不要更改端口,并确保打印服务器上 license:'' //你的PAZU许可码,可以自行在官方申请,不收费,转发微信朋友圈即可申请成功 }
再加入 pazuclient.js的引用,文件所在位置与 步骤1. 中的对应。
<script type="text/javascript" src=/js/pazuclient.js></script>
3.检查PAZU云打印组件是否成功加载到你的应用页面
用判断windows.PAZU对象是否为null即可,如:
function chkPAZU(){ if(!window.PAZU){ alert("PAZU云打印组件加载失败,请下载安装 \r\n :" + PAZU_Config.server + "/可以下载到PAZUCloud_setup.exe的url"); //也可以你自己在页面里面构建一个链接提示用户下载 return false; } return true; }
请注意,请不要在<body>加载的时候检查:,以下两种都会失败:
<body onload="chkPAZU()"> <!--这样检测PAZU是否加载会失败,因为PAZU是异步加载的--> </body>
或者
$(docment).ready(function(){ //.... chkPAZU(); //这样检测会失败,因为PAZU加载是异步的 //... })
正确检测PAZU是否加载成功的方法有以下几种:
A。用户点击某个按钮(要真正调用PAZU进行打印前)进行检测
例如在用户点击某个按钮的时候检查(jquery的写法:
//以JQuery为例 $(myPrintButton).click(function(){ chkPAZU(); //........ });
B。使用window.onPAZUReady事件,如果PAZU加载成功,这个onPAZUReady定义的function会触发。你要做的是定义这个事件:
window.onPAZUReady=function(){ //这里表示PAZU肯定已经加载成功了 alert("PAZU_Cloud init ok") }
C。如果非得要在<body>加载或者$(document).ready中检测,则需要把PAZU的加载改成同步的,方法是去掉pazuclient.js的引用,改为直接引用打印服务器上的pazucloud.js.
<!--删除下一行--> <script src="/js/pazuclient.js"></script> <!--改成这样:--> <script src="http://localhost:6894/js/pazucloud.js?license=xxxxxx&server=localhost"></script> <!-- 注意:localhost 为打印服务器的域名或ip,6894为服务端口 两者一般用默认 server的值要填入打印服务器的域名或ip,license为你的许可授权码。 千万要注意server和license必须填写encodeURIComponent后的值 -->
4.PAZU的详细接口及原型
/* *以下为PAZU对象的原型,包括一个print方法和一个TPrinter的子对象 */ /*========================================================================================= PAZU.print = function (xContent, aryJsRef, aryCssRef, bPreview,bPromptUser,callBack){} xContent: 如果类型是字符串,则看第一个字符,如果第一个字符为"{"或者"[" 则为JSON 类型,如果第一个字符为"<" 则看 第二个字符,如果为? 则为xml,否则为html, 如果非html/xml/json则为 页面元素的ID 如果类型是Object(非数组),则看看xContent[0]是否为Object,如果是,则为JQ的对象,否则为原生html元素(这只是简单的容错的处 理方式,对于某些特殊情况则无能为力,因此建议大家使用原生html元素传入) 如果为null,则打印当前页面所有内容 aryJsRef[Optional]: 如果想把xContent重新整理后再打印,则需要指定整理过程所用的外部javascript文件,如: ["http://cdn.jq.com/jquery.mini.js","myHandler.js","otherJsRef.js"...] 特别注意:如果你的xContent是JSON/xml时,必须指定一个整理这些数据js,并在其中一个js内实现 window.onbeforepazuprint(data,callback)函数。这时你可以调用真正的pazu(小写)插件,来实现更深的打印控制(如直接使用Windows的 Printer进行打印编程等) aryCssRef[Optional]: 系统会自动取得当前内容的样式,但某些情况下可能和显示的有出入(真正的打印排版是遵循PrintServer的IE的CSS), 当出现这种问题时,你需要写CSS Hack。或者当你想在打印时的样式和当前页面样式不一样时。也可以这样做。 bPreview [Optional]: 打印前是否先预览,如果PrintServer非localhost(127.0.0.1),这个参数是无效的,why? PrintServer 是可能是无 人值守的(或者是其他人使用的计算机),你总不可能通过你的手机打印的时候,在PrintServer上弹出一个预览界面吧。 bPromptUser [Optional]: 打印前是否提示用户选择打印机,如果PrintServer非localhost(127.0.0.1),这个参数是无效的,why? 参考bPreview 参数说明 callBack [Optional]: 本参数一般不需要 =========================================================================================*/ PAZU.print = function (xContent, aryJsRef, aryCssRef,bPreview,bPromptUser,callBack) {} //PAZU.TPrinter //和IE插件版本兼容的对象,用于页面设置 //某些属性或方法会有变动,具体见以下的详细说明 PAZU.TPrinter = { marginTop: 10, //属性 上边距 数据类型:数字 单位:毫米 marginBottom: 10, //属性 下边距 数据类型:数字 单位:毫米 marginLeft: 10, //属性 左边距 数据类型:数字 单位:毫米 marginRight: 10, //属性 右边距 数据类型:数字 单位:毫米 /* 例子:把上边距设置为10mm PAZU.TPrinter. marginTop=10 */ footer: "", //属性 页脚 数据类型:字符串 header: "", //属性 页眉 数据类型:字符串 /* 例子:设置页眉 PAZU.TPrinter.header=”这是新的页眉” 要取消页眉和页脚,只要赋给它们一个空字符串就行了,例如不要页眉: PAZU.TPrinter.header=”” 同时页眉和页脚也支持左中右的对齐方式和自动用日期、URL、页码等的填充。这方面的信息可以参考IE这方面的相关文档 */ fontCSS: "", //字符串,设置页面页脚的字体的CSS(2017年增加)注意字体大小要用pt做单位 //如果不设置 ,PAZU默认使用 8pt 字体大小,即fontCSS的默认值为"font-size:8pt;color:rgb(0,0,0)" orientation: 1, //属性纸张方向 数据类型:整数1或者2 , 1=纵向 2=横向 /* 例子:设置纸张方向为横向 pazu.TPrinter. orientation=2 */ paperName: "A4", //属性 纸张大小名称 数据类型:字符串 printerName: "", //属性 打印机名称 数据类型:字符串 /*这两个属性我们都不要求完全匹配,可以采用左匹配的方式,举例: 假设您有两台打印机,一台是 Epson 1600K III ,一台是 HP Deskjet 300。如果你要制定打印机为 HP Deskjet 300 你有两种方式: 方式一:全匹配 PAZU.TPrinter.printerName="HP Deskjet 300" 方式二:左匹配 PAZU.TPrinter.printerName="HP" 纸张的大小也是一样的道理,例如,指定用B5纸: PAZU.TPrinter.paperName="B5" 提示:所有纸张格式和所有打印机的列表都可以通过PAZU的相应方法取得,你还可以自定义纸张的大小。请看本文相应的章节。 */ isPrintBackground: false, //属性 是否打印背景 数据类型:Boolean true / false isZoomOutToFit: false, //属性 是否缩放以适应大小打印 数据类型:Boolean true / false printTemplate: "", //属性 打印模板的URL -- (本属性 非高手莫用 ^_^) /* 特别说明:打印模板是指利用微软的printTemplate技术时,你自己定义的符合微软的printTemplate技术规范的打印模板的URL。 您不需要设置这个属性,控件会自动使用默认的打印模板(微软自带的),当你需要对打印进行更深层次的控制的时候,您才需要设置这个URL 以指向你自己设计的printTemplate。 当您设置了这个属性的时候,如果该URL的页面存在,控件就会载入这个页面作为打印模板,那么你就必须自己在你自己的打印模板页面里面 对所有的打印相关内容进行控制(如分页、边距、打印机选择等)。 如果该URL无效,控件会自动调用微软自带的默认的打印模板 微软的printTemplate相关技术 请参考 微软的MSDN。里面有详细的说明。本文档的最后一节也有关于这个技术的应用的一些例程和说明。 在“特殊应用”章节里面也有部分说明 **printTemplate属性是打印模板的URL,详细的内容请参考微软的printTemplate技术的说明。 */ copies: 1, //属性 打印份数 数据类型:整数,默认为1 range: "", //属性 页面范围 数据类型:字符串 isCopyByCopy: false, //属性 是否整份打印结束后再打印下一份 数据类型:Boolean true / false /*说明: copies属性允许你当前内容打印多份拷贝 range 你可以指定打印的页面,例如: 只打印1到5页:PAZU.TPrinter.range="1-5" 只打印1,3,5,7页:PAZU.TPrinter.range="1,3,5,7" 提示:利用range属性可以实现双面打印功能 */ onlyPrintElementID: "", // 属性(2012-1-2新增加) 用于指定打印或者预览页面内的某个ID的元素,可以是任意元素 (IFRAME也可以),除此外的页面上的其他内容将不会被打印。 /* 如果是IFRAME,请注意: A。请务必注意必须是用一个域内的网页,因为IE不允许跨域访问。 B。IFrame内的网页和父页面最好是同一个相对目录,如果不是同一个目录,则Iframe内的图片引用请使用绝对路径(或相对于跟目录) 的引用,否则可能无法正确打印该图片 C。本属性只在http:// 和 https:// 协议中有效,如果您是双击打开本地的网页文件(File:///协议)本属性是无效的 D。使用完成后请最好重置本属性值为空字符,以释放资源。 } */ getPrinters: function (callBack) { }, //方法 返回一个打印机列表,返回以一个回车换行符分隔的字符串,异步返回到 callBack函数 /* //例如:获得所有的打印机 PAZU.TPrinter.getPrinters(function(ps){ alert(ps); //获得是一个以回车换行分隔的字符串 var pa=ps.split("\r\n"); for(var i=0;i<pa.length;i++){ alert(pa[i]); } }); */ getPaperForms: function (thePrinterName, callBack) { }, //方法 返回所有纸张格式的列表,返回以一个回车换行符分隔 的字符串 /* 和getPrinters类似,不同的是getPaperForms是带参数的,你可以指定获得那个打印机的纸张类别,没有参数或者参数为空字符表示获得当前默认 打印机的纸张列表 例如:PAZU.TPrinter.getPaperForms("HP deskjet 300",function(pp){ alert(pp); }); */ //getDefaultPrinter : function(){}, // 方法 获得默认打印机的对象,返回一个Printer Object ( 详解>>) //通过返回的对象,你可以控制该打印机,调用该打印机的EndDoc等方法,来实现直接输出内容到打印机 /*云版本不支持getDefaultPrinter方法,但是可以通过PAZU.print方法 的 aryJsRef参数中注入自己的自己的JS来调用IE版本原生的 getDefaultPrinter来实现,具体看PAZU.print方法*/ setDefaultPrinter: function (strPrinterName,callBack) { }, //方法 设置某台指定的打印机为默认打印机,注意: (PAZU 2012.6.25以后版本支持,同时需要IE在非保护模式下运行(信任域)) printToDefaultPrinter: function (txt,callBack) { }, //方法 把要打印的字符串输送到默认打印机(配合getDefaultPrinter 使用) ,参数:字符串,因为云PAZU是异步的,不建议使用本方法,因为DefaultPrinter有可能已经再设置后被其他进程改变 createPaper: function (paperWidth, paperHeight,callBack,strPrinterName) { }, // 方法 按指定的宽度和 高度创建自定义纸张 /* 前两个参数,paperWidth 和 paperHeight ,参数类型都是数字,单位是毫米。如果你指定的大小的纸张存在,则返回该纸张的名称, 如果不存在,就先创建新的纸张格式并返回新的格式名称 strPrinterName是可以选的 ,strPrinterName(在指定的打印机上创建纸张格式,如果不指定则为系统默认的打印机) 例如:PAZU.TPrinter.createPaper(200,140,function(paper){ alert('成功创建纸张格式:'+paper); }); //创建20cm*14cm的纸张格式,PAZU用的是毫米 */ doPrint: function (bPromptUser,callBack) { }, //执行打印(打印当前页面或者onlyPrintElementID), 相当于调用PAZU.print(document||onlyPrintElementID);一般不需要callBack参数 /*有一个boolean的参数,该参数表示是否要弹出打印机选择对话框,如果PrintServer非localhost(127.0.0.1),这个参数是无效的 例如:不提示用户直接打印: PAZU.TPrinter.doPrint(false) */ // doPrint_: function () { }, // 方法 执行打印但是不进行页面参数设置 /*和doPrint类似,但是没有参数,而且执行打印前不去进行页面参数的设置,也不提示用户 云版本不支持本方法,但是可以通过PAZU.print方法 的 aryJsRef参数中注入自己的自己的JS来调用IE版本原生的getDefaultPrinter来实现, 具体看PAZU.print方法 */ doPreview: function () { }, // 方法 打印预览,没有参数, 如果PrintServer非localhost(127.0.0.1), 这个方法是无效的 //doPageSetup: function () { } // 方法 执行页面参数的设置,一般不需要callBack参数 /*云版本不支持doPageSetup方法(云版本执行print或者预览的时候会先执行页面设置,因此不需要独立的doPageSetup),但是可以通过 PAZU.print方法 的 aryJsRef参数中注入自己的自己的JS来调用IE版本原生的getDefaultPrinter来实现,具体看PAZU.print方法*/ //showPageSetup : function(bPromptUser){}, // 方法 弹出页面设置窗口没有参数 /*云版本不支持showPageSetup方法,但是可以通过PAZU.print方法 的 aryJsRef参数中注入自己的自己的JS来调用IE版本原生的 getDefaultPrinter来实现,具体看PAZU.print方法*/ } //========================================================================================= //PAZU的定义到此结束 //=========================================================================================
5. 调用示例
PAZU.TPrinter.marginTop=30; PAZU.TPrinter.footer="页大脚:)"; //..... 设置其他参数 //调用打印 PAZU.print(); //如果要预览 //PAZU.print(null,null,null,true);
2018-05-02 新增:Https协议支持,但必须注意的是你的浏览器必须支持H5,才能支持https的应用打印,因为PAZU云版本使用Websocket和打印服务器进行通信。
2018-12-07 新增:debug模式,在 PAZU_Config.debug=1 时,进入debug模式。方便hack入自己的JS进行深度的调试。
例程中的例子5,所需pazu_hack.js可以在安装目录的js目录里面找到。
////通过自己实现 onbeforepazuprint ,可以深度控制你要打印的内容 window.onbeforepazuprint = function (oX, callback) { //alert(JSON.stringify(oX.json)) var o = oX.json; //或 oX.xml xml的文档字符串。这些是你需要打印的传给PAZU的数据 ////////////////////////////////////////////////////////// ////在这里你可以对你的数据进行任何方式的处理:重新排版、H5画图 等 /////////////////////////////////////////////////////////// callback();//必须调用callback来执行真正的打印,当然如果你自己调用pazu对象(注意:不是大写的PAZU,小写pazu代表真正的打印插件控件)进行更深入控制时,可以按自己需要决定是否调用。 };
2018-12-11新增功能:
getPrinterStatus 获取打印机状态
注意:这个状态并不完全准确,按微软官方说明 ,这个状态在有打印任务的时候才会更新。所以返回状态并不会很确切,请谨慎使用,PAZU开发者也不会再对这个功能提供更多的支持。
getPrinterStatus:function(ArrayPrinterNames,cb){} //获取打印机状态,可以一次获取多个打印机的状态,参数是一个打印机名称的js数组, 返回一个对象数组 /* 返回状态时以下值,必须说明的是(不是所有的状态都能准确支持的): 1. 所有的打印机都会实现的状态是 READY 和 OFFLINE ,其他状态不同的品牌和型号实现由差异 2. 由于windows对打印机的状态刷新也不是实时的,所以我们获取的状态并不绝对准确 3. 文件输出型打印机(例如微软自带的XPS和pdf打印机)会由于权限问题而返回 SERVER_UNKNOWN,因为云打印值守进程默认是非管理员权限运行,如果你要使用该类型打印机,请注意这个状态值 READY PAUSED ERROR PENDING_DELETION PAPER_JAM PAPER_OUT MANUAL_FEED PAPER_PROBLEM OFFLINE IO_ACTIVE BUSY PRINTING OUTPUT_BIN_FULL NOT_AVAILABLE WAITING PROCESSING INITIALIZING WARMING_UP TONER_LOW NO_TONER PAGE_PUNT USER_INTERVENTION OUT_OF_MEMORY DOOR_OPEN POWER_SAVE SERVER_UNKNOWN */
getPrinters2 获取打印机列表,和getPrinters 的区别只是返回值不一样,getPrinters2 返回 js 数组
例程(DEMO)>>Fri Nov 17 2017 17:03:54 GMT+0800 (中国标准时间) 回复
+发帖