4Fang 畅快工作!

正在加载

正在努力为您加载

PAZU云打印版本,客户端纯 js ,全平台全终端全浏览器支持

官方 Jangogo 等级:1级 积分:194 2017-11-17 6742

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)>>



附件下载:

登陆后可回复 ▲

任务流程:

16个回复

头像
mozhu 等级:1级 积分:15 2018-03-16 1楼

PAZU的打印插件,感觉打印有点慢,需要7~8秒才可以打印出来,可以做一下优化吗?


头像
Jangogo 等级:2级 积分:292 2018-05-02
请加作者QQ108112937
头像
等级:1级 积分:10 2018-03-24 2楼

云打印能否增加一个打印日志,在做定时自动打印,偶尔会出现了执行了PAZU.print("HTML代码", null, null, false),但打印字没打印出来的情况,不好去核查是什么原因。


头像
格子 等级:1级 积分:8 2018-03-27 3楼
学习了
头像
格子 等级:1级 积分:11 2018-03-27 4楼
学习
头像
ermaosk 等级:1级 积分:5 2018-06-04 5楼

打印报错,提示r[j].style.cssText为空

a

加上判断后,打印浏览器崩溃。

但是将要打印的页面潜入iframe则能正常打印,求解

头像
c_seeq 等级:1级 积分:5 2018-06-18
请问问题解决了吗,我也遇到同样问题
头像
1435551762 等级:1级 积分:5 2018-07-31 6楼

请问一下怎么判断pazu控件此次打印结束?

头像
JWC4Fang 等级:1级 积分:5 2018-09-03 7楼

问一下,如何获取许可码


头像
gdm00000 等级:1级 积分:5 2018-10-15 8楼

PAZU云版本怎么打印服务器端的excel文件啊?急急急!各位有懂得请帮个忙,谢谢!!!!!!!!

头像
Jangogo 等级:2级 积分:315 2018-12-07
新版本已经支持这个功能功能了
头像
bohui123456 等级:1级 积分:16 2018-12-13 9楼
头像
bohui123456 等级:1级 积分:19 2018-12-13 10楼
头像
🍃 等级:1级 积分:5 2018-12-19 11楼

许可码怎么获取

头像
PLUTO 等级:1级 积分:5 2019-03-28 12楼

react中怎么使用,智能打印纯HTML的格式吗

头像
kok133 等级:1级 积分:10 2019-05-17 13楼

请教,执行PAZU打印为什么总是打印出许可码的注册名称?

头像
kok133 等级:1级 积分:15 2019-05-17 14楼

执行PAZU打印,为什么总是要打印出许可码注册时的名称?

头像
18360534239 等级:1级 积分:110 2019-05-20 15楼
谢谢分享
头像
njmnjx 等级:1级 积分:5 2019-08-17 16楼

在demo页面测试:http://www.4fang.net/tech/pazucloud_demo.html

打印前修改demo相关参数,比如设置页眉并打印成pdf,打印后参数是生效了。

但这些参数作为页面显示内容打印后却没有任何变化,还是显示设置之前的内容。要如何才能打印页面的即时输入或修改内容呢?

打印前设置

打印前


打印输出 

打印后


头像
njmnjx 等级:1级 积分:8 2019-08-17
文本框和下拉选项也是页面内容,但打印内容没有体现出这两个值的变化