整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          JavaScript基礎語法04-輸入輸出語法

          ,大家好,我是雷工。

          今天學習JavaScript基礎語法,輸入輸出語法,以下為學習筆記。

          1、輸出語法:

          1.1、alert()

          作用:界面彈出警告對話框。

          示例:

          <script>
          	alert(‘要輸出的內容’)
          </script>

          注意:

          JavaScript輸出消息時,為了保證程序能夠正常執行,推薦將所有的信息都加引號,單引號雙引號均可以。

          1.2、document.write()

          作用:向網頁的body標簽內輸出內容。

          示例:

          <script>
          	document.write(‘要輸出的內容’)
          </script>

          注意:假如輸出的內容寫的是標簽,也會被解析成網頁元素。

          1.3、console.log()

          作用:控制臺輸出語法,程序猿調試的時候使用。

          示例:

          <script>
          	console.log(‘要輸出的內容’)
          </script>

          2、輸入語法:

          2.1、promt()

          語法:promt(‘請輸入您的性別:’)

          作用:顯示一個對話框,對話框中包含一條提示信息,用來提示用戶輸入信息

          展示


          2.2、confirm()

          作用:選擇輸入。

          示例:

          <script>
          	 confirm(“確定要關注雷工筆記嗎?”)
           </script>


          效果展示:

          3、JavaScript代碼執行順序

          3.1、按HTML文檔的前后順序執行JavaScript代碼。

          3.2、alert()和prompt()執行時會跳過界面渲染先被執行。

          4、JavaScript語法注意事項

          4.1、JavaScript中是嚴格區分字母大小寫的。

          4.2、如果想要在網頁中輸出一個HTML標簽,可以通過document.write()

          5、后記

          以上為JavaScript基礎語法,輸入輸出語法的學習筆記,有錯誤之處歡迎指正。

          俗話說:生命在于折騰,生命不息,折騰不止。當然也不要瞎折騰,要為了生活和世界能變得更美好而折騰。

          持原創,共同進步!請關注我,后續分享更精彩!

          概述

          項目中經常有生成圖表報告的需求。實現的方式有很多,下面幾種方案,各有優缺點。

          純java后端實現:后端JFreeChart等繪制庫畫好圖表,再通過itext庫導出為pdf。該方案能實現簡單的圖表功能,樣式、格式調整等可能會花大量時間。適合中小型報表開發項目。

          前端繪制圖表,后端運行時命令調用wkhtmltopdf生成pdf:后端通過運行時命令調用node js,js使用wkhtmltopdf庫動態訪問報表url地址,HTML內容渲染完成后生成pdf文件。該方案,使用純前端js繪制圖表,能實現復雜需求。但wkhtmltopdf庫對不同瀏覽器的js存在兼容性問題,導出成pdf文件時存在各種坑,在單頁面技術支持還不太成熟。適合豐富報表的pdf導出,但兼容性問題維護成本太高。

          前端繪制圖表,后端運行時命令調用puppeteer生成pdf:后端通過運行時命令調用node js,js使用puppeteer庫動態訪問報表url地址,HTML內容渲染完成后生成pdf文件。該方案和wkhtmltopdf方案類似,但兼容性更好。puppeteer是 Chrome 開發團隊在 2017 年發布的一個 Node.js 包,用來模擬 Chrome 瀏覽器的運行。可以在無界面的環境中運行Chrome或通過命令行、程序語言操作 Chrome。理論上Chrome中顯示的圖表,就能通過該庫生成一致的pdf文件內容,不用浪費很多時間在頁面樣式和兼容性問題上。

          本文選擇puppeteer方案介紹如何生成一個pdf報表。細心的小伙伴可能注意到了,既然puppeteer是js庫,為什么不直接前端導出pdf,干嘛這么麻煩還通過后端繞一圈來實現?

          這主要出于需求和用戶體驗的考慮,有些業務場景需要通過api接口動態生成pdf報表,不需要用戶訪問界面。如果生成的pdf的報表很大,直接在用戶端生成,可能占用大量客戶端資源,導致頁面崩潰或假死,從而影響使用體驗。

          實現

          1.先安裝NodeJs,網上教程很多,本文不再贅述。

          2.安裝puppeteer依賴,如果npm下載不成功就使用cnpm命令(cnpm需要先安裝)

          npm install puppeteer --save

          3.在安裝puppeteer依賴的目錄下創建page2pdf.js

          const puppeteer = require('puppeteer');
          const options = process.argv;
          var siteUrl;
          //執行 node page2pdf.js https://www.baidu.com
          
          (async() => {
          if(options.length>=3){
              siteUrl=options[2];
              //types=options[3];
          	//console.log(siteUrl);
          }
          
          const browser = await puppeteer.launch();
          const page = await browser.newPage();
          
          //console.log(options.length);
          //console.log(options[0]);
          //console.log(options[1]);
          //console.log(options[2]);
          //console.log(options[3]);
          
          const userAgent = "Mozilla/5.0 (Linux; Android 8.1.0; MI 8 Build/OPM1.171019.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/62.0.3202.84 Mobile Safari/537.36";
          page.setUserAgent(userAgent);
          
          await page.setViewport({ width: 1000, height: 1080 });
          
          //await page.setViewport({ width: 480, height: 800,isMobile: true}); 
          
          //通過css樣式可見,動態設置站點加載完成標識。
          //page.waitForSelector('img').then(() => console.log('siteUrl with page load success: ' + siteUrl));
          
          await page.goto(siteUrl, {timeout: 10*60000, waitUntil: 'networkidle2'});
          
          /**await page.goto(siteUrl, {timeout: 10*60000, waitUntil: 'networkidle2'})
          			.catch(e => {
          			  console.log(siteUrl+" is error:"+e);
          			  browser.close()
          			});*/
          
          const pdf = await page.pdf({
          		path: 'page.pdf', //便于測試驗證,實際使用時可屏蔽
          		format: 'A4'
          	});
          	
          await browser.close();
          process.stdout.write(pdf);
          })();

          page2pdf.js文件引入puppeteer依賴庫,通過傳入siteUrl參數訪問HTML page頁面,page.pdf生成文件,再通過process.stdout.write(pdf)返回java后臺。

          4.創建java PuppeteerHtmlToPdf.java文件

          /**
           * 用谷歌提供的node實現的Puppeteer,實現網頁生成pdf文件
           */
          public class PuppeteerHtmlToPdf {
              /**
               * html轉pdf,直接通過流輸出到瀏覽器
               * @param response 瀏覽器響應
               * @param fileName 文件名稱
               * @param puppeteerjs 要采用哪個js文件執行
               * @param webSiteUrl 要生成pdf的網頁
               */
              public static void parseHtml2Pdf(HttpServletResponse response, String fileName, String puppeteerjs, String webSiteUrl) {
                  try {
                      Runtime rt = Runtime.getRuntime();
                      Process p = rt.exec("node "+puppeteerjs+" "+webSiteUrl);
                      InputStream is = p.getInputStream();
                      BufferedInputStream bf=new BufferedInputStream(is);
                      byte[] data = IOUtils.toByteArray(bf);
                      fileName = URLEncoder.encode(fileName, "UTF-8");
                      response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
                      response.addHeader("Content-Length", "" + data.length);
                      response.setContentType("application/octet-stream;charset=UTF-8");
                      OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
                      outputStream.write(data);
                      outputStream.flush();
                      outputStream.close();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
          
              }
          }

          5.報表生成

          page2pdf.js頁面目錄打開命令行,執行指令。


          運行指令,生成pdf

          node page2pdf.js https://www.baidu.com


          查看對應目錄,已動態生成了一個page.pdf文件


          打開pdf文件,對應HTML內容已生成。

          小結

          本文介紹了報表導出pdf的3種方式,通過優缺點分析,詳細闡述了puppeteer的實現方式。并通過百度頁面的pdf導出做了演示。

          希望本文對有類似報表pdf導出需求的小伙伴有所參考和幫助。若存在不足或更好方案,請留言討論。

          礎 JavaScript 實例

          • 用JavaScript輸出文本

          • 用JavaScript改變HTML元素

          • 一個外部JavaScript

          • 實例解析

          JavaScript 語句、注釋和代碼塊

          • JavaScript 語句

          • JavaScript 代碼塊

          • JavaScript 單行注釋

          • JavaScript 多行注釋

          • 使用單行注釋來防止執行

          • 使用多行注釋來防止執行

          • 實例解析

          JavaScript 變量

          • 聲明一個變量,為它賦值,然后顯示出來

          • 實例解析

          JavaScript 條件語句 If ... Else

          • If 語句

          • If...else 語句

          • 隨機鏈接

          • Switch 語句

          • 實例解析

          JavaScript 消息框

          • Alert(警告)框

          • 帶有換行的警告框

          • 確認框

          • 提示框

          • 實例解析

          JavaScript 函數

          • 函數

          • 帶有參數的函數

          • 帶有參數的函數 2

          • 返回值的函數

          • 帶有參數并返回值的函數

          • 實例解析

          JavaScript 循環

          • For 循環

          • 循環輸出 HTML 標題

          • While 循環

          • Do while 循環

          • break 語句

          • continue 語句

          • 使用 For...In 聲明來遍歷數組內的元素

          • 實例解析

          JavaScript 事件

          • onclick事件

          • onmouseover 事件

          • 實例解析

          JavaScript 錯誤處理

          • try...catch 語句

          • 帶有確認框的 try...catch 語句

          • onerror 事件

          • 實例解析


          高級 JavaScript 實例

          • 創建一個歡迎 cookie

          • 簡單的計時

          • 另一個簡單的計時

          • 在一個無窮循環中的計時事件

          • 帶有停止按鈕的無窮循環中的計時事件

          • 使用計時事件制作的鐘表

          • 創建對象的實例

          • 創建用于對象的模板


          JavaScript 應用實例

          • javascript 幻燈片代碼(含自動播放)

          • CSS 日歷樣式

          • JavaScript 彈窗

          • JavaScript 圖片彈窗

          • JavaScript Lightbox

          • javascript 搜索框自動提示

          • JavaScript 表格數據搜索


          主站蜘蛛池模板: 日本在线电影一区二区三区| 中文字幕一区二区三| 中文字幕亚洲一区二区va在线| 亚洲国产国产综合一区首页| 韩国福利影视一区二区三区| 琪琪see色原网一区二区| 久久无码人妻一区二区三区午夜| 国产在线精品一区在线观看| 麻豆一区二区在我观看| 伊人色综合一区二区三区| 最新中文字幕一区二区乱码 | 久久高清一区二区三区| 免费在线视频一区| 日本精品无码一区二区三区久久久| 中文字幕在线播放一区| 美女视频一区二区| 国模精品一区二区三区视频| 精品国产福利一区二区| 久久久无码精品国产一区 | 精品视频在线观看一区二区| 久久精品日韩一区国产二区 | 日韩电影一区二区三区| 国产福利一区二区在线视频 | 波多野结衣一区二区| 亚洲国产精品一区| 国产精品特级毛片一区二区三区| 国产成人一区在线不卡| 一区二区三区在线播放| 色系一区二区三区四区五区| 国产精品无码一区二区三区在 | 蜜臀AV无码一区二区三区| 国产午夜精品片一区二区三区| 亚洲色欲一区二区三区在线观看| 久久99久久无码毛片一区二区| 一区二区免费国产在线观看| 精品视频一区二区观看| 一区二区三区高清在线| 亚洲性日韩精品国产一区二区| 日韩少妇无码一区二区三区| 亚洲日韩国产一区二区三区| 一区二区三区91|