整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          一個精悍的Javascript庫,實現(xiàn)Web打印(print.js)

          載地址在github,文末有使用方法

          github地址:https://github.com/crabbly/Print.js/

          官網(wǎng):https://printjs.crabbly.com/(可能被墻)

          無法訪問可以加企鵝群看離線版:1006429377

          或者訪問:https://www.yuque.com/caiyongjie/snknlo/ga5ef9

          官網(wǎng)截圖

          簡介

          • 原文:

          Print.js was primarily written to help us print PDF files directly within our apps, without leaving the interface, and no use of embeds. For unique situations where there is no need for users to open or download the PDF files, and instead, they just need to print them.

          One scenario where this is useful, for example, is when users request to print reports that are generated on the server side. These reports are sent back as PDF files. There is no need to open these files before printing them. Print.js offers a quick way to print these files within our apps.

          • 谷歌翻譯:

          Print.js主要是為了幫助我們直接在我們的應(yīng)用程序中打印PDF文件,而無需離開界面,也不使用嵌入。 對于不需要用戶打開或下載PDF文件的獨特情況,相反,他們只需要打印它們。

          例如,當(dāng)用戶請求打印在服務(wù)器端生成的報告時,這種情況很有用。 這些報告以PDF文件形式發(fā)回。 打印前無需打開這些文件。 Print.js提供了一種在我們的應(yīng)用程序中打印這些文件的快捷方式。

          • 注意的地方:

          PDF files must be served from the same domain as your app is hosted under. Print.js uses iframe to load files before printing them, therefore, it is limited by the Same Origin Policy. This helps preventing Cross-site scripting (XSS) attacks.

          必須在托管應(yīng)用程序的同一域中提供PDF文件。 Print.js在打印文件之前使用iframe加載文件,因此它受同源策略的限制。 這有助于防止跨站點腳本(XSS)攻擊。

          初體驗

          首先在頁面上添加一個按鈕

          • 打印PDF(注意:火狐不支持iframes,可以使用新標(biāo)簽頁)
          <button type="button" onclick="printJS('docs/printjs.pdf')">
           Print PDF
           </button>
          
          • 打印大文件(可以彈出提示消息)
          <button type="button" onclick="printJS({printable:'docs/xx_large_printjs.pdf', type:'pdf', showModal:true})">
           Print PDF with Message
           </button>
          
          • html打印
           <form method="post" action="#" id="printJS-form">
           ...
           </form>
           <button type="button" onclick="printJS('printJS-form', 'html')">
           Print Form
           </button>
          
          • 打印帶頭部
           <button type="button" onclick="printJS({ printable: 'printJS-form', type: 'html', header: 'PrintJS - Form Element Selection' })">
           Print Form with Header
           </button>
          
          • 打印圖片
          <img src="images/print-01.jpg" />
           printJS('images/print-01-highres.jpg', 'image')
           printJS({printable: 'images/print-01-highres.jpg', type: 'image', header: 'My cool image header'})
          
          • 帶頭
           printJS({
           printable: ['images/print-01-highres.jpg', 'images/print-02-highres.jpg', 'images/print-03-highres.jpg'],
           type: 'image',
           header: 'Multiple Images',
           imageStyle: 'width:50%;margin-bottom:20px;'
           })
          
          • 從JSON數(shù)據(jù)
           someJSONdata = [
           {
           name: 'John Doe',
           email: 'john@doe.com',
           phone: '111-111-1111'
           },
           {
           name: 'Barry Allen',
           email: 'barry@flash.com',
           phone: '222-222-2222'
           },
           {
           name: 'Cool Dude',
           email: 'cool@dude.com',
           phone: '333-333-3333'
           }
           ]
           <button type="button" onclick="printJS({printable: someJSONdata, properties: ['name', 'email', 'phone'], type: 'json'})">
           Print JSON Data
           </button>
          
          • 自定義CSS
           <button type="button" onclick="printJS({
          	 printable: someJSONdata,
          	 properties: ['name', 'email', 'phone'],
          	 type: 'json',
          	 gridHeaderStyle: 'color: red; border: 2px solid #3971A5;',
          	 gridStyle: 'border: 2px solid #3971A5;'
          	})">
           Print JSON Data
           </button>
          
          • 自定義頭
           <button type="button" onclick="printJS({
          	 printable: someJSONdata,
          	 properties: [
          		{ field: 'name', displayName: 'Full Name'},
          		{ field: 'email', displayName: 'E-mail'},
          		{ field: 'phone', displayName: 'Phone'}
          	 ],
          	 type: 'json'
           })">
           Print with custom table header text
           </button>
          <button type="button" onclick="printJS({
          		printable: someJSONdata,
          		type: 'json',
          		properties: ['name', 'email', 'phone'],
          		header: '<h3 class="custom-h3">My custom header</h3>',
          		style: '.custom-h3 { color: red; }'
          	 })">
          	Print header raw html
          </button>
          

          安裝使用

           npm install print-js --save
          //或
           yarn add print-js
          


          import print from 'print-js'
          


           //cdn,不知道能不能訪問,我這可以訪問
           https://printjs-4de6.kxcdn.com/print.min.js
           https://printjs-4de6.kxcdn.com/print.min.cssye
           <script src="print.js"></script>
          
          • 如果您將使用模態(tài)功能,還包括頁面上的Print.css。
           <link rel="stylesheet" type="text/css" href="print.css">
          



          詳細(xì)配置:

          兼容性

          .首先引入js插件

          <!--第一個生成二維碼,2,3分別2種打印插件-->

          <script type="text/javascript" src="/Liems/plugins/aweto/jquery.qrcode.min.js"></script>

          <script type="text/javascript" src="/Liems/plugins/aweto/jquery.jqprint-0.3.js">

          </script><script src="/Liems/plugins/aweto/jquery.PrintArea.js"></script>

          2.然后再html中添加二維碼顯示的位置

          <div id="wai" >

          <div id="qrcode"></div>

          <!--startprint-->

          <div id="daying"><img src="" id="image" style="display: none;"/></div>

          <!--endprint-->

          <button id="bu" class='i-form-button' onclick="stamp()" style="display: none;">打印二維碼</button>

          </div>

          3.然后在js中寫入生成二維碼的方法

          jQuery(function(){

          //獲取身份證號碼

          var idCard = $('#EOEMPMST__0__EEM_SFZ_COD').val();

          var jsons=idCard+"|1";

          var zhi=utf16to8(jsons);

          //判斷是否新建

          if(idCard != null && idCard != ''){

          jQuery('#qrcode').qrcode({

          render : "canvas",

          width : 150,

          height : 150,

          text : zhi

          });

          //保存為圖片

          $("canvas").attr("id","erw");

          var canvas = document.getElementById('erw');

          var context = canvas.getContext('2d');

          var image = new Image();

          var strDataURI =canvas.toDataURL("image/png");

          document.getElementById('image').src = strDataURI;

          document.getElementById('bu').setAttribute('style', 'display: block');

          }

          })

          4.qrcode對中文支持不太好,,所以需要轉(zhuǎn)碼

          //轉(zhuǎn)碼

          function utf16to8(str) {

          var out, i, len, c;

          out = "";

          len = str.length;

          for(i = 0; i < len; i++) {

          c = str.charCodeAt(i);

          if ((c >= 0x0001) && (c <= 0x007F)) {

          out += str.charAt(i);

          } else if (c > 0x07FF) {

          out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));

          out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));

          out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));

          } else {

          out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));

          out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));

          }

          }

          return out;

          }

          5.最后進(jìn)行局部打印

          //局部打印

          function stamp(){

          var bdhtml=window.document.body.innerHTML;//獲取當(dāng)前頁的html代碼

          var odd=bdhtml;

          var sprnstr="<!--startprint-->";//設(shè)置打印開始區(qū)域

          var eprnstr="<!--endprint-->";//設(shè)置打印結(jié)束區(qū)域

          var prnhtml=bdhtml.substring(bdhtml.indexOf(sprnstr)+17); //從開始代碼向后取html

          prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr));//從結(jié)束代碼向前取html

          window.document.body.innerHTML=prnhtml;

          window.print();

          //第二種打印jQuery('#wai').PrintArea();

          //還原原網(wǎng)頁

          window.document.body.innerHTML=odd;

          document.getElementById('bu').setAttribute('style', 'display: none');

          document.getElementById('image').src="";

          window.location.reload();

          }

          方法中有業(yè)務(wù)處理,,忽略即可。大體思路如上,歡迎討論

          、測試代碼,保存為【test.html】

          <!DOCTYPE html>
          <html lang="en">
          
          <head>
              <meta charset="UTF-8">
              <meta name="viewport" content="width=device-width, initial-scale=1.0">
              <title>Document</title>
              <script src="write.js"></script>
          </head>
          
          <body>
              <div id="ID1"></div>
          
              <script>
                  writeformat(()=>{
                      writeln(1, 2, 3, 4);
                      writeln(1, [2, 3], 4);
                      writeln({a:1,b:2});
                      writeln(1, [2, 3], [4, { a:1, b: { c:1, d:2 }},{a:1,b:2} ]);
                      writeln();
                  });
          
                  writebr(1, [2, 3], [4, { a:1, b: { c:1, d:2 }},{a:1,b:2} ]);
          
                  document.getElementById("ID1").innerHTML = getWriteHtml(1, [2, 3], [4, { a:1, b: { c:1, d:2 }},{a:1,b:2} ]);
          
                  writeformat(()=>{
                      write(getWriteHtmlPretty(1, [2, 3], [4, { a:1, b: { c:1, d:2 }},{a:1,b:2},5 ],6));
                  });
              </script>
          </body>
          
          </html>

          效果如下:


          2、源碼(保存為 write.js)


          主站蜘蛛池模板: 欧亚精品一区三区免费| 精品无码AV一区二区三区不卡| 国产成人无码一区二区三区在线| 久久综合九九亚洲一区| 一区二区三区免费精品视频| 成人免费一区二区无码视频| 亚洲日韩精品无码一区二区三区| 无码少妇一区二区浪潮av| 九九无码人妻一区二区三区| 精品无码一区二区三区在线| 国99精品无码一区二区三区| 国产日韩高清一区二区三区 | 韩国资源视频一区二区三区| 亚洲AV无码一区二区二三区入口 | 一区视频免费观看| 无码精品人妻一区二区三区免费| 国产成人一区二区三区电影网站| 少妇无码一区二区二三区| 无码人妻品一区二区三区精99| 日韩精品无码一区二区三区四区| 精品国产一区二区三区2021| 香蕉视频一区二区三区| 中文字幕一区在线播放| 亚洲熟女少妇一区二区| 日韩精品无码一区二区三区不卡 | 久久婷婷色一区二区三区| 久久一区二区明星换脸| 亚洲国产av一区二区三区丶| 国产精品久久一区二区三区| 精品一区二区视频在线观看| 日本一区二三区好的精华液| 日韩一区二区免费视频| 精品少妇一区二区三区在线| 国产午夜精品一区二区三区| 久久国产午夜一区二区福利| 欧美日韩精品一区二区在线观看| 国产在线观看91精品一区| 国产亚洲欧洲Aⅴ综合一区| 亚洲一区二区在线视频| 精品一区狼人国产在线| 精品人体无码一区二区三区 |