,大家好,我是雷工。
今天學習JavaScript基礎語法,輸入輸出語法,以下為學習筆記。
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 表格數據搜索
*請認真填寫需求信息,我們會在24小時內與您取得聯系。