,大家好,我是雷工。
今天学习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小时内与您取得联系。