背景
期望通过api统一生成图片对内对外,但是java生成图片在热敏打印机中 打印出来文字不清晰
应用方案
采取node+koa2+puppeteer生成图片返回给java
koa2
Koa.js 是一个极其精简的 Web 服务框架,主要提供以下功能:
-
HTTP服务:主要处理request和response -
中间件数据处理机制(洋葱模型) 洋葱模型其实就是中间件处理的流程,中间件生命周期大致有:
-
前期处理
-
交给并等待其它中间件处理
-
后期处理
多个中间件处理,就形成了所谓的洋葱模型,它是 AOP 面向切面编程的一种应用。
一张经典的洋葱切面图如下:
koa2环境搭建
-
全局安装脚手架
npm install -g koa-generator -
创建项目
koa2 【项目名】 -
启动项目
npm run dev -
访问
localhost:3000
koa路由使用方式
- 创建路由
const router = require('koa-router')()
router.get('/htmlToImg', async (ctx, next) => { })
- main.js 引入并注册路由
const index = require('./routes/index')
routes app.use(index.routes(), index.allowedMethods())
puppeteer
Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome,利用Puppeteer可以获取页面DOM节点、网络请求和响应、程序化操作页面行为、进行页面的性能监控和优化、获取页面截图和PDF等,利用该神器就可以操作Chrome浏览器玩出各种花样。
截图处理过程
1. 创建一个 Browser 对象
const browser = await puppeteer.launch()
2. 打开新页面
const page = await browser.newPage()
3. 导航地址url
await page.goto(url,options)
导航到的地址. 地址应该带有http协议, 比如 https://.
options:{timeout,waitUntil}
timeout 跳转等待时间,单位是毫秒, 默认是30秒, 传 0 表示无限等待.
可以通过page.setDefaultNavigationTimeout(timeout)方法修改默认值
waitUntil <string|Array> 满足什么条件认为页面跳转完成,默认是 load 事件触发时。
指定事件数组,那么所有事件触发后才认为是跳转完成。事件包括:
load - 页面的load事件触发时
domcontentloaded - 页面的 DOMContentLoaded 事件触发时
networkidle0 - 不再有网络连接时触发(至少500毫秒后)
networkidle2 - 只有2个网络连接时触发(至少500毫秒后)
4. 页面指定区域进行截图
const imgdata = await page.screenshot({
path: 'example.png',
clip: {
x: 0,
y: 0,
width: 740,
height: 856,
},
encoding: 'base64'
});
imgdata返回给接口
5. 关闭 Chromium 及其所有页面(如果页面被打开的话)
await page.close();
await browser.close()