2       网页打印

网页打印是JCP的最主要功能,JCP的其他功能,如PDF打印、Office打印等,也是在这个功能的启发下,慢慢发展出来的。

 

使用JCP进行网页打印,离不开两个核心方法:print方法用来打印,printPreview方法用来打印预览。

 

JCP打印网页时,你可以进行各种控制,比如,你可以在print方法参数中,设置打印到哪个打印机、纸张、份数等,也可以在打印页(<div>)上设置breakable控制样式类,来告诉JCP进行自动分页。

 

提示:

你可以使用两种方法,来控制JCP的网页打印:print方法参数和控制样式类。

 

2.1        基本打印设置

本节介绍如何用 print方法参数来进行打印控制。

2.1.1    打印预览、直接打印、选择打印机打印

打印预览、选择打印机打印、直接打印

调用浏览器自带的打印方法,window.print,很难做到所谓的静默打印,即不弹打印机选择框进行打印,而JCP可以,当然弹框打印也可以:

 

1.  function doPrint(how) {  

2.    

3.      var myDoc = {  

4.          documents : document,   

5.          copyrights : '杰创软件拥有版权  www.jatools.com'   

6.      var jcp = getJCP();  

7.        

8.      if (how == '打印预览')  

9.          jcp.printPreview(myDoc, false);  

10.     else if (how == "打印预览(显示进度条)") {  

11.         jcp.printPreview(myDoc, true);  

12.     } else if (how == '弹出打印机选择对话框打印') {  

13.         jcp.print(myDoc, true);  

14.     } else  

15.         jcp.print(myDoc, false); // 不弹出对话框打印  

16.   

17. }  

 

从示例可见,JCP的打印及打印预览,使用的是printprintPreview两个方法。

 

print方法的第一个参数myDoc,用来设置打印参数,比如设置输出打印机、纸张类型、边距等,其中必选的两个属性是documentscopyrightsdocuments表示打印来源内容,如果打印内容为本页面中IDpage1page2...div,则设置为documentcopyrights为定值,必须设置为示例所示值。

 

print的第二个参数表示打印前是否显示打印机选择对话框。

 

printPreview方法的第一个参数myDoc,作用与print方法一样,第二个参数表示是否显示页面生成进度条,当有大数据量的自动分页时,建议显示这个进度条,提示用户等待。

 

两个方法都没有返回值,如果想知道打印是否完成,可以在myDoc中,设置done回调函数。

 

2.1.2    选择打印机打印  

选择打印机打印

JCP中,选择打印机打印有两种方法,第一种即上节示例所示,调用 jcp.print(myDoc,true) 方法,那么,JCP在打印前,会弹出系统的打印机选择对话框,由用户选择后,再进行打印。

 

第二种方法,是利用JCPgetPrinters方法,检索出系统安装的打印机,用js填充到页面的<select>元素中,如:

1.  <script>  

2.  function loadPrinters() {  

3.      // 取得系统安装的打印机  

4.      getJCP().getPrinters(function(printers) {  

5.                  // printers是取到的打印机列表,是一个字符串数组,每个元素表示一个打印机的名称  

6.                  var printerlist = document.getElementById('printer-list');  

7.                  // 填充到一个select  

8.                  for (i = 0; i < printers.length; i++)  

9.                      printerlist.options[i + 1] = new Option(printers[i], printers[i]);  

10.                 printerlist.options[0].selected = true;  

11.             })  

12. }  

13. function doPrint() {  

14.     var printer = document.getElementById('printer-list').value;  

15.     var myDoc = {  

16.         settings : {  

17.             // 设置要输出的打印机  

18.             printer : printer  

19.         },  

20.         documents : document,  

21.         copyrights : '杰创软件拥有版权  www.jatools.com'  

22.     };  

23.     jcp.print(myDoc, false); // 不弹出对话框打印  

24. }  

25. <script>  

26. ...  

27. <body onload="loadPrinters()">  

28.    ...  

29.    <select id="printer-list"></select>  

30.     ...          

 

一般在文档加载完成时调用 JCPgetPrinters方法,当用户打印时,只需要将用户选择的打印机名称,设置到myDoc.settings.printer属性,即可将打印内容打印到该打印机。

 

如果不设置 printer属性, JCP将打印到默认打印机。

 

提示:

利用 getPrinters方法,使用户可以在<select>中选择输出打印机,同时,可以使用jscookie方法,将用户最后一次选择的打印机,记录在cookie中,在下次打印时用js自动从cookie中取得上次使用的的打印机,设置到 <select>默认选项中,这种方法让可以让用户,免去每次选择打印机的麻烦。

 

 

2.1.3    选择纸张类型、方向、页边距

选择纸张类型打印、方向、页边距

当你调用JCPprint(打印),和printPreview(打印预览)方法时,你可以在myDoc.settings属性中设置,要打印机纸张类型、方向、页边距,如:

 

1.  var myDoc = {  

2.      settings : {  

3.          paperName : "A4"// 纸张名称  

4.          portrait : true// 纵向  

5.          marginLeft : 5, //设置左边距,单位为mm  

6.          marginTop : 5,  

7.          marginRight : 5,  

8.          marginBottom : 5  

9.    

10.     },  

11.     documents : document,  

12.     copyrights : '杰创软件拥有版权  www.jatools.com'  

13. };  

14. getJCP().print(myDoc);  

 

paperName:要使用的纸张名称;

portrait: true为纵向打印,false为横向打印;

marginLeftmarginTopmarginRightmarginBottom:指定左、上、右、下边距,单位为mm,可以带1位小数点,默认为打印机的默认边距;

 

paperName是指当前打印机可用纸张,否则无效,比如,在一个不支持A4纸张的打印机上,指定A4,则无效,在此情况下,JCP使用打印机的默认纸张。

 

如果你想取得某一台打印机的可用纸张,可以调用 getPapers方法,如下:

1.  // 取得 <select>元素,用来放置可用纸张列表  

2.  var paperlist = document.getElementById("papers");  

3.  // 取得虚拟打印机的可用纸张,  

4.  getJCP().getPapers("Microsoft XPS Document Writer"function(papers) {  

5.              for (i = 0; i < papers.length; i++)  

6.              // 将纸张名称,填充到<select>   

7.                  paperlist.options[i + 1] = new Option(papers[i].name, papers[i].name);   

8.          });  

getPapers返回的是一个 Object对象数组,其中name属性是纸张名称。

 

提示:

某些打印机不能紧贴纸张边缘打印,这时,你不能把边距设得太小了,太小了会不起作用。

 

2.1.4    自动生成自定义纸张

自动生成自定义纸张

有时,需要打印一些发票、快递单、发货单等,这些单据的大小,并不是标准的A4A5之类,在默认的打印机驱动中,也不会内置这些纸张类型,所以在打印这类单据时,需要事先创建好相应大小的纸张,即所谓的自定义纸张。

 

如果使用浏览器来打印这些网页,那么,需要手工在控制面板,设备与打印机中,设置好这些规格的纸张,然后,再在系统页面选择对话框中,选用这个纸张。

 

使用JCP不需要这些手工设置,只需要在程序中,设置好纸张的高、宽即可,如下:

1.  var myDoc = {  

2.      settings : {  

3.          paperWidth : 200, // 自定义纸张, 宽度为 200mm  

4.          paperHeight : 150  // 高度为 150mm  

5.          // paperName : "A4", // 设置了 paperWidth,paperHeight,就不要设置 paperName了,二选一  

6.      },  

7.      documents : document,  

8.      copyrights : '杰创软件拥有版权  www.jatools.com'  

9.  };  

JCP解析到myDoc.settingspaperWidthpaperHeight属性时,会自动到打印机的可用纸张中,查询是否有此规格的纸张,如果有,则选用之,如果没有则自动生成一个纸张并选用之。

 

自动生成的纸张名称为 jcp [paperWidth] x [paperHeight] mm

 

有些打印机,不支持自定义纸张,特别是一些激光打印机。判断打印机是否可以自定义纸张,可用JCPisCustomPaperSupported方法

 

不要同时指定paperNamepaperWidthpaperHeight,如果同时指定,则后者将被忽略。

 

2.1.5    打印份数控制

设置打印份数

可以用 myDoc.settings.copies 属性,指定打印份数:

1.  var myDoc = {  

2.      settings : {  

3.          copies : 3, // 打印三份  

4.          collate : true  // 逐份打印,即以 1,2,3,...,1,2,3,... ,1,2,3,... 顺序打印  

5.      },  

6.      documents : document,  

7.      copyrights : '杰创软件拥有版权  www.jatools.com'  

8.  };  

9.  getJCP().print(myDoc);  

可以用collate指定打印顺序:

true,逐份打印,即123...123... 123...

false,为逐页打印,即111222333...

 

2.1.6    打印指定页

指定打印页

可以用 myDoc.settings pageFrom pageTo属性,指定要打印的页面,如:

1.  var myDoc = {  

2.      settings : {  

3.          pageFrom : 2,  

4.          pageTo : 3  

5.      },  

6.      documents : document,  

7.      copyrights : '杰创软件拥有版权  www.jatools.com'  

8.  };  

9.  getJCP().print(myDoc);  

 

以上打印第23两页。

 

2.1.7    双面打印

双面打印

myDoc.settings.duplex属性设置是否双面打印,如下:

1.  var myDoc = {  

2.      settings : {  

3.          duplex : 2 // 1: 不双面打印, 2:左侧装订, 3: 上方装订  

4.      },  

5.      documents : document,  

6.      copyrights : '杰创软件拥有版权  www.jatools.com' // 版权声明必须  

7.  };  

8.  getJCP().print(myDoc);  

以上为双面打印,且为左侧装订。

 

提示:

当你的打印机不支持双面打印时,此设置无效。检测打印机是否支持双面打印,可以参照getPrinterCapability

 

2.1.8    预设打印设置到注册表

预设打印参数到注册表

想像一下,有这样的需求:既要允许用户自己设置打印机,纸张,又能让用户不必每次都去设置这些参数,以简化打印操作,我们可以利用JCP保存打印参数到注册表的功能来实现。

 

JCP保存打印设置到注册表,就是将打印参数,如打印机、纸张类型、边距等,事先保存到注册表,并以一个ID 标记,以后,直接打印时只要告诉 JCP 这个IDJCP就会到注册表中找到对应的设置来打印了。以下是打印设置保存到注册表中的样子:

所有的打印设置,被保存在 HKEY_CURRENT_USER\Software\jatools\jatoolsPrinter 下,左侧注册项名称是设置ID,右侧是具体的打印设置。

 

假设给用户的界面是这样的:

 

 

用户多数情况下,都是点直接打印(不弹任何对话框)来打印,只有在第一次打印或者需要更改打印设置时,才点击 设置打印参数

设置打印参数 的作用是,显示一个打印参数设置面板,让用户可以在此面板中来设置参数,并保存到注册表,以下是点击后显示的面板效果(该面板你可以自由定制)

 

 

保存设置到注册表的代码:

1.  function saveSettings() {  

2.      var settings = {  

3.          printer : document.getElementById('printer-list').value,// 设置选中的打印机  

4.          paperName : document.getElementById('paper-list').value,// 设置选中的纸张  

5.          orientation : document.getElementById('portrait').checked ? 1 : 2,  // 方向  

6.          marginLeft : parseFloat(document.getElementById('leftmargin').value), // 边距  

7.          marginTop : parseFloat(document.getElementById('topmargin').value),  

8.          marginRight : parseFloat(document.getElementById('rightmargin').value),  

9.          marginBottom : parseFloat(document.getElementById('bottommargin').value)  

10.     }  

11.     getJCP().setLastSettings("订单", settings);  

12. }  

代码先从界面上收集到设置的参数,放到一个js 对象中,然后用 JCP setLastSettings方法将设置保存到注册表,该方法的第一个参数是设置ID,在直接打印代码中要用到,第二个参数是具体设置。

 

直接打印按钮要执行的代码:

1.  function doPrint() {  

2.      var myDoc = {  

3.          settingsId : '订单',  // 引用设置id  

4.          documents : document,  

5.          copyrights : '杰创软件拥有版权  www.jatools.com'  

6.      };  

7.      getJCP().print(myDoc, false); // 不弹出对话框打印  

8.  }  

直接打印时,不设置具体的打印参数,而代之以通过设置myDoc. settingsId 的方式,让JCP使用保存在注册表中的设置,如果在注册表中,没有这个设置,JCP会使用系统的默认设置,如默认打印机,默认纸张等。

 

可以保存在注册表中的打印参数包括:

printer

输出打印机

paperHeight

纸张高度

paperWidth

纸张宽度

marginLeft

左边距

marginRight

右边距

marginTop

上边距

marginBottom

下边距

noMargins

是否零边距

orientation/portrait

纸张方向

copies

打印份数

collate

是否逐份打印

 

2.1.9    保留打印设置到注册表

保留打印设置到注册表

上例中,我们使用了一个自定义的HTML界面,来收集打印设置,比如,打印机、纸张等,再保存到注册表,但有时,这种方式稍嫌麻烦,或者不够直观,比如,在HTML界面中设置边距,纸张,你无法实时看到效果,那么,我们可以使用JCP的打印预览窗口,代替 HTML界面。

 

当你使用 JCP printPreview方法,并设置了属性 myDoc.settingsId,那么,每次在预览窗口中点击打印后,该次打印使用的设置,就会被记录到注册表,注意,必须打印,不打印不会记录。

 

启动打印预览窗口,保存打印设置到注册表的代码:

1.  var myDoc = {  

2.      settingsId:"订单"// 打印预览窗口中,点击打印后,将打印参数保存到注册表项目 订单   

3.      documents : document,  

4.      copyrights : '杰创软件拥有版权  www.jatools.com'  

  1. };  
  2. getJCP().printPreview(myDoc,false); 

 

直接打印按钮要执行的代码:

1.  function doPrint() {  

2.      var myDoc = {  

3.          settingsId : '订单',  // 引用设置id  

4.          documents : document,  

5.          copyrights : '杰创软件拥有版权  www.jatools.com'  

6.      };  

7.      getJCP().print(myDoc, false); // 不弹出对话框打印  

8.  }  

 

提示:

只要设置了属性 myDoc.settingsId,不管是使用Print方法,还是使用printPreview方法,只要进行了实际的打印,都会将最后一次打印使用的设置,记录到注册表。

 

 

提示:

为什么需要保存设置功能?

 

保存设置功能,通常用在以下两种情况:

1)一个套打系统,由于各客户端打印机不同,或者进纸盒的位置不同,或者其他原因,可能引起打印出来的票据位置发生偏移,用户希望能根据自己打印机的状况,自行调整边距以纠正位置,但不希望每次打印前,都进行一次手工调整。

2)一个客户端配置了多台打印机,分别用于打印不同类型的文档,用户不希望每次打印一个文档前,选择一次打印机;

 

对于第一种情况,你可以这样解决:

1. 页面中设置两个按钮,一个"直接打印",一个"打印预览"

2. 当客户发现位置有偏移时,可以点击"打印预览"按钮,调整左、上边距,并打印这个页面;

3. 如果发现位置还不理想,则重复第2步,如果正确,则下一次打印这个票据时,只需点击"直接打印"即可保证位置正确。

 

对于第二种多种打印机的情况,你可以这样解决:

1. 页面中设置两个按钮,一个"直接打印",一个"打印预览"

2. 第一次打印时,可以点击"打印预览"按钮,选择你想要的打印机进行打印;

3. 则下一次打印这个票据时,只需点击"直接打印"即可保证输出到正确的打印机。

 

提一点建议:因为"打印预览"按钮不常用,最好不要跟"直接打印"按钮并排放在一起,以避免干扰。

 

保存设置参数的工作原理是怎样的?

 

JCP是如何保留设置参数的,有些用户感觉困惑,下面介绍一下保留与加载打印参数的工作原理。

 

保存设置参数原理:

1. 客户打印一个文档到打印机后;

2. JCP触发打印完成事件;

3. JCP响应打印完成事件,查询本次打印是否有myDoc.settingsId属性,如果有,则保存本次打印的配置参数到注册表(如果注册表中存在该id设置,则替换以前设置)

 

所以,保存打印参数的前提是:已经输出到打印机,并且设置了myDoc.settingsId。 有些用户,只在JCP的预览窗口中设置了边距等,而不实际打印,这样,JCP是不会保留你的设置的。

 

加载打印参数原理:

1. 客户在预览或打印前,JCP检查是否有 myDoc.settingsId属性;

2. 如果有myDoc.settingsId属性,JCP尝试从注册表中读入该id相关的配置参数,如果存在,则用该配置参数来设置打印机(即忽略myDoc.settings里的设置),转第4步;

3. 根据用户的myDoc.settings里的设置,设置打印参数;

4. 根据设置,启动打印或打印预览。

 

2.1.10         删除注册表中的打印设置

删除注册表中的打印设置

你可以调用clearSettings方法,清除注册表中的打印设置项,如下:

1.  //清除注册表中idmysettings1 的打印参数项  

2.  getJCP().clearSettings("mysettings1",function(result) {  

3.                  console.log("成功?"+result);  

4.              })  

你可以调用 getSettingsIds 取得注册表中的所有 settingsId

1.  getJCP().getSettingsIds(function(settings) {  

2.           // settings是一个字符串数组,表示在注册表中记录的所有setttingsId  

3.              for (i = 0; i < settings.length; i++)  

4.                  console.log(settings[i]);  

5.          })  

 

2.2        打印页面来源设置

JCP可以打印本页面中的内容,以及URL上的内容、iframe上的内容等,本节介绍如何用print/printPreview参数属性 myDoc.documents 来控制打印内容。

 

打印本页面中的内容,在《JCP快速入门》和上节中都有提及,在此不再赘述。

2.2.1    多个文档共存在同一web页面中,区别打印

多个文档共存在同一web页面中,区别打印

如果同一个文档中的若干页面,分属不同票据,如下例,6个页面分属资产负责表和现金流量表:

1.  <div id='zc-page1'>资产负债表,第一页(div#zc-page1)</div>  

2.  <div id='zc-page2'>资产负债表,第二页(div#zc-page2)</div>  

3.  <div id='zc-page3'>资产负债表,第三页(div#zc-page3)</div>  

4.  <br/>  

5.  <div id='xj-page1'>现金流量表,第一页(div#xj-page1)</div>  

6.  <div id='xj-page2'>现金流量表,第二页(div#xj-page2)</div>  

7.  <div id='xj-page3'>现金流量表,第三页(div#xj-page3)</div>  

怎么样让JCP区别打印?答案是使用pagePrefix属性,如下所示:

1.  var myDoc = {    

2.      pagePrefix : "zc-"// 仅打印idzc-开始的页面, zc-page1,zc-page2,...    

3.      documents : document,    

4.      copyrights : '杰创软件拥有版权  www.jatools.com'    

5.  };    

6.  getJCP().print(myDoc);    

pagePrefix+page+页序号构成可打印divid 如本例前缀为 'zc-' ,则找到以 'zc-page1'iddiv作为文档首页, 该属性默认值为空。

 

2.2.2    不显示文档,直接指定URL打印

不显示文档,直接指定url打印

1.  var myDoc = {  

2.      //打印页面page1,page2,... urlpages.htm指定的一个文档中,  

3.      documents : "pages.htm",  

4.      copyrights : '杰创软件拥有版权  www.jatools.com' // 版权声明必须  

5.  };  

6.  getJCP().print(myDoc);  

你可以将 documents 属性设置成一个字符串,表示你想打印一个URL上的页面,该URL返回的页面中,有idpage1page2…这样的divJCPprint方法会自动请求这个URL上的页面,并打印之。

 

本例中,URL设置到 pages.htm,看上去是一个服务端的静态文件,实际上,你也可以使用任何语言,框架产生的HTML文档流,比如 jsp phpasp等,也可以在URL上指定参数。

 

documents设置为document,则打印页面page1page2…必须已经显示在本文档中,而设置到URL,则意味着打印内容不必显示出来,就可以打印,设想这样的用户场景:

 

用户在一个订单列表中,勾选需要打印的订单,然后,按打印按钮进行打印,这时,你可以将用户勾选到的id作为参数,设置到documents

 

1.  var myDoc = {  

2.      // 选择了1,2,5号订单,那么,后台返回 page1,page2,page3, 分别表示1,2,5号订单内容  

3.      documents : "getOrders.jsp?orders=1,2,5",   

4.      copyrights : '杰创软件拥有版权  www.jatools.com'  

5.  };  

6.  getJCP().print(myDoc);    

你的服务端程序 getOrders.jsp,解析orders参数,并返回相应的页面内容。

 

注意:

    URL 返回的页面内,必须有 idpage1div,否则,JCP报不存在可打印的页错误。

 

2.2.3    打印隐藏对象

打印预览一个隐藏的文档

有时,打印内容已经在当前文档document中,你可以将它们设置到一个隐藏的容器中,仍然可以用JCP打印出来:

1.  var myDoc = {  

2.      documents : document,  

3.      copyrights : '杰创软件拥有版权  www.jatools.com'  

4.  };  

5.  getJCP().print(myDoc);  

6.  ...  

7.  <div style="display:none">  

8.          <div id='page1'>第一页(div#page1)</div>  

9.          <div id='page2'>第二页(div#page2)</div>  

10.         <div id='page3'>第三页(div#page3)</div>  

11.         <div id='page4'>第四页(div#page4)</div>  

12.         <div id='page5'>第五页(div#page5)</div>  

13.         <div id='page6'>第六页(div#page6)</div>  

14. </div>  

15. ...    

注意:

    不要将display:none,设置到page div上,这样会出现打印出空白页的情况。

 

2.2.4    打印<iframe>的页面

打印<iframe>的页面

你可以打印iframe中的内容,只要该iframe里面包含page1page2...这样的打印div页面:

1.  <script>  

2.  ...  

3.  var myDoc = {  

4.              // 打印一个iframe里面的页面,该iframe  idmyframe  

5.              documents : document.getElementById("myframe").contentWindow.document,  

6.              copyrights : '杰创软件拥有版权  www.jatools.com'  

7.          };  

8.  getJCP().print(myDoc);  

9.  </script>  

10. ...  

11. <iframe id='myframe' src='pages.htm'></iframe>  

12. ...  

可以用类似 document.getElementById("IFRAMEID").contentWindow.document 这样的形式,取得iframe里的document对象。

 

注意,打印iframe前,应该确保其已经加载完成,所以,如果你需要动态指定iframesrc属性时,应该在文档加载完成后,再调用JCP进行打印,如:

1.  function main() {  

2.      // 加载完成后,再打印  

3.      loadFrame("getpages.jsp", doPrint);  

4.  }  

5.  function doPrint() {  

6.      var myDoc = {  

7.          documents : document.getElementById("myframe").contentWindow.document,  

8.          copyrights : '杰创软件拥有版权  www.jatools.com'  

9.      };  

10.     getJCP().print(myDoc);  

11. }  

12. function loadFrame(src, callback) {  

13.     // 加载完成后,回调 callback  

14.     var loaded = function() {  

15.         callback();  

16.     }  

17.     var frame = document.getElementById("myframe");  

18.     if (frame.attachEvent) {  

19.         frame.attachEvent("onload", loaded);  

20.     } else {  

21.         frame.onload = loaded;  

22.     }  

23.     frame.src = src;  

24. }  

 

2.2.5    打印指定的 HTML文本串

打印指定的 HTML

如果你有一个 html文本,想把它打印出来,那么可以这样:

1.  var myDoc = {  

2.      documents : { 

3.           //  html 指定每页的html,数组,每个元素表示一页 

4.          html : ['<span>我是老大,哈哈 </span>''<span id="second">我是老二 </span>'],   

5.          style : "span#second{font-size:150%;}" // 可以用 style指定所有页面的 css  

6.      },  

7.      //当只有一页时,可以直接以字符串指定,如:  

8.      //documents: {html:'<span>我是老大!</span>'},      

9.      copyrights : '杰创软件拥有版权  www.jatools.com' 

10. };  

11. getJCP().print(myDoc);  

你可以将documents设置到一个Object对象,其属性 html可以为一个字符串数组,表示每页中显示的内容,当只有一页时,html可以直接设置为一个 html 字符串。

 

如果你还想指定公用的css,可以同时指定 style属性,此属性非必须。

 

2.2.6    打印指定的 HTML,可同时指定 page div 属性

打印指定的 HTML,可同时指定 page div 属性

上例打印html时,有个问题,就是不能指定 div page1上的属性,比如 style等,如果你想指定div页上的属性,可以使用 pages属性,如下所示:

1.  var myDoc = {  

2.      documents : {  

3.          pages : '<div id=page1 style="background-color:lightgray"><span>我是老大,哈哈 </span></div><div id=page2><span id="second">我是老二 </span></div>',  

4.          style : "span#second{font-size:150%;}" // 可以用 style指定所有页面的 css  

5.      },  

6.    

7.      copyrights : '杰创软件拥有版权  www.jatools.com' // 版权声明必须  

8.  };  

9.  getJCP().print(myDoc);  

 

本例指定了div page1的背景色。当以pages指定html时,必须以page1page2page3...这样的div包裹打印内容。

 

2.2.7    一次打印多个文档

一次打印多个文档

一次打印多个文档,是指可以将多个文档作为一个打印任务,打印到打印机。如果想一次性打印多个文档,你可以指定documents为一个数组,如下所示:

1.  //打印文档对象  

2.  var myDoc = {  

3.      //用数组来指定打印文档  

4.      documents : ['sample1.htm''sample2.htm'],  

5.      copyrights : '杰创软件拥有版权  www.jatools.com'  

6.  };  

7.  getJCP().print(myDoc);  

本例将sample1.htm,和sample2.htm上的page1page2...一次性打印出来,次序是先打印sample1.htm的页面,再打印sample2.htm上的页面。

 

以此方式指定的多个打印文档,在打印预览printPreview时,也是显示在一起的.

 

注意:

sample1.htmsample2.htm,都必须有 page1开始的div,页数可以不定,如:

sample1.htm  

1.  <div id=page1>...</div><div id=page2>...</div>  

正确的sample2.htm

1.  <div id=page1>...</div>  

错误的sample2.htm,没有page1 divJCP会报不存在可打印的页:

1.  <div id=page3>...</div>  

除了可以一次性打印不同的URL上的文档,还可以打印不同方式指定的打印内容,参照下节。

 

 

2.2.8    一次打印多种方式指定的多个文档(包括DOM documentURLhtml文本串)

一次打印多种方式指定的,多个文档

你可以将本章所述的多种打印页面来源,设置到documents属性,一次性打印出来或者预览,如:

1.  var myDoc = {  

2.      documents : [  

3.              document,// 本文档中的page1,page2,...,  

4.              'sample1.htm'// url  

5.              {  

6.                  html : ['<span>我是老大,首先出场!</span>''<span id="second">我是老二,跟上!</span>'], //  html 指定每页的html,数组,每个元素表示一页  

7.                  style : "span#second{font-size:150%;}" // 可以用 style指定所有页面的 css  

8.              }],  

9.      copyrights : '杰创软件拥有版权  www.jatools.com' // 版权声明必须  

10. };  

11. getJCP().print(myDoc);  

本示例顺序打印以下三个文档:

1. document,即本页面上的page1page2...

2. 再打印URLsample1.htm上的page1page2...

3. 最后打印 html上指定的html

 

以此方式指定的多个打印文档,在打印预览 printPreview 时,也是显示在一起的.