摘要:一背景需求因?yàn)閿?shù)據(jù)包含機(jī)密信息,所以得自己搭建圖表導(dǎo)出服務(wù)器在后臺(tái)生成對(duì)應(yīng)圖表以圖片的形式導(dǎo)出保存。圖表個(gè)性化程度較高,如一些圖列是沒(méi)有的,但在前端可以利用實(shí)現(xiàn)。每周定時(shí)執(zhí)行上述生成圖表的任務(wù),保存到指定位置。
一、背景需求
1、因?yàn)閿?shù)據(jù)包含機(jī)密信息,所以得自己搭建圖表導(dǎo)出服務(wù)器;在后臺(tái)生成對(duì)應(yīng)Highcharts圖表、以圖片的形式導(dǎo)出保存。
2、圖表個(gè)性化程度較高,如一些圖列是Highchart沒(méi)有的,但在前端可以利用css實(shí)現(xiàn)。
3、每周定時(shí)執(zhí)行上述生成圖表的任務(wù),保存到指定位置。
4、需求已經(jīng)上線(xiàn)一個(gè)月,生產(chǎn)上運(yùn)行良好,時(shí)間有限,只能在這簡(jiǎn)單記錄下,理一下思路也方便以后查閱。
1、經(jīng)過(guò)一番了解,發(fā)現(xiàn)Puppeteer,PhantomJs等可以實(shí)現(xiàn)上述Highchart圖表以圖片形式導(dǎo)出的功能,它們也常常用于:
爬蟲(chóng)
生成網(wǎng)頁(yè)截圖/PDF
測(cè)試等
2、這個(gè)需求選用了Puppeteer去完成,原因如下:
官方的文檔也較為詳細(xì),相關(guān)API,另外其他項(xiàng)目用它實(shí)現(xiàn)PDF生成的實(shí)踐,遷移到本項(xiàng)目爬的坑也會(huì)少點(diǎn)。
截出來(lái)的圖片質(zhì)量清晰,也滿(mǎn)足業(yè)務(wù)的要求。
3、定時(shí)任務(wù)的需求則用了Cron實(shí)現(xiàn);在設(shè)定的時(shí)間點(diǎn),在后臺(tái)用Puppeteer打開(kāi)我們網(wǎng)頁(yè),實(shí)現(xiàn)特定區(qū)域截圖。
三、Puppeteer使用1、 安裝,安裝puppeteer同時(shí),也會(huì)下載Chromium,安裝地址為外國(guó)網(wǎng)站,下載失敗的話(huà)多嘗試幾次、切換到cnpm或者手動(dòng)下載。如果是部署再Linux上的話(huà),還得安裝依賴(lài)包才能啟動(dòng)Chromium,具體操作可以查看下面。
# 安裝 npm i puppeteer --save
2、任意區(qū)域截圖
第一張圖為圖表的HTML頁(yè)面,第二張圖是指定區(qū)域的截圖,代碼如下:
const express = require("express"); const puppeteer = require("puppeteer"); const app = express(); app.use(express.static("public")); async function screenshot() { try { // 添加啟動(dòng)參數(shù)"--no-sandbox", "--disable-setuid-sandbox" // 解決Linux環(huán)境下"no use sandbox"報(bào)錯(cuò) const browser = await puppeteer.launch({ args: ["--no-sandbox", "--disable-setuid-sandbox"], headless: true }); const page = await browser.newPage(); ? ? await page.goto("http://localhost:3008/"); let clip = await page.evaluate(() => { // 獲取指定容器的坐標(biāo)信息 let { x, y, width, height } = document.getElementById("container").getBoundingClientRect(); return { x, y, width, height }; }); await page.screenshot({ path:"chart.png", clip:clip //設(shè)置clip 屬性 }); await page.close(); await browser.close(); } catch (error) { throw error; } } // 訪(fǎng)問(wèn)http://localhost:3008/screenshot進(jìn)行截圖 app.get("/screenshot", (req, res) => { screenshot() .then(data => res.json("clip successed")) .catch(err => res.json("clip failed")); }); app.listen(3008);四、定時(shí)任務(wù)
const CronJob = require("cron").CronJob; // 每天9點(diǎn)鐘執(zhí)行定時(shí)任務(wù),其他時(shí)間可查找corn表達(dá)是或者使用corn表達(dá)式生成工具 new CronJob({ cronTime: "0 0 9 * * *", onTick: function () { screenshot(); }, start: true });五、Linux上部署問(wèn)題
至此,我們實(shí)現(xiàn)了導(dǎo)出Highcharts圖表的功能,但是這只是在windows系統(tǒng)的開(kāi)發(fā)機(jī)上把這個(gè)流程跑通,部署到linux機(jī)器上是仍需解決以下幾點(diǎn)問(wèn)題
Chromium依賴(lài)包安裝:官網(wǎng)列出了Debian和Centos依賴(lài)包列表,點(diǎn)擊查看,按照上述列表按住即可
中文亂碼問(wèn)題:linux默認(rèn)沒(méi)有中文字體,所以我們頁(yè)面上的中文全是亂碼,以Debian系統(tǒng)為例安裝字體
# 安裝文泉驛字體 apt-get update apt-get install -y wqy*
其他字體安裝:由于項(xiàng)目對(duì)圖表文字顯示要求苛刻,要求中文以楷體顯示,英文以new times roman顯示,所以還得從windows上把字體拷貝過(guò)去,詳細(xì)Debian安裝windows字體戳這
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/104579.html
摘要:什么是是一個(gè)基于創(chuàng)建的簡(jiǎn)單高性能和跨平臺(tái)的股票數(shù)據(jù)可視化開(kāi)源項(xiàng)目。支持以及和等平臺(tái)。而針對(duì)股票等有價(jià)證劵特定的圖表庫(kù)有和等項(xiàng)目,這些圖表庫(kù)對(duì)股票繪圖已經(jīng)做了一些非常專(zhuān)業(yè)的處理及優(yōu)化了,但是他們均基于來(lái)繪圖。 什么是 ClChart? ClChart是一個(gè)基于canvas創(chuàng)建的簡(jiǎn)單、高性能和跨平臺(tái)的股票數(shù)據(jù)可視化開(kāi)源項(xiàng)目。支持PC、webApp以及React Native和Weex等平臺(tái)...
摘要:什么是是一個(gè)基于創(chuàng)建的簡(jiǎn)單高性能和跨平臺(tái)的股票數(shù)據(jù)可視化開(kāi)源項(xiàng)目。支持以及和等平臺(tái)。而針對(duì)股票等有價(jià)證劵特定的圖表庫(kù)有和等項(xiàng)目,這些圖表庫(kù)對(duì)股票繪圖已經(jīng)做了一些非常專(zhuān)業(yè)的處理及優(yōu)化了,但是他們均基于來(lái)繪圖。 什么是 ClChart? ClChart是一個(gè)基于canvas創(chuàng)建的簡(jiǎn)單、高性能和跨平臺(tái)的股票數(shù)據(jù)可視化開(kāi)源項(xiàng)目。支持PC、webApp以及React Native和Weex等平臺(tái)...
摘要:什么是是一個(gè)基于創(chuàng)建的簡(jiǎn)單高性能和跨平臺(tái)的股票數(shù)據(jù)可視化開(kāi)源項(xiàng)目。支持以及和等平臺(tái)。而針對(duì)股票等有價(jià)證劵特定的圖表庫(kù)有和等項(xiàng)目,這些圖表庫(kù)對(duì)股票繪圖已經(jīng)做了一些非常專(zhuān)業(yè)的處理及優(yōu)化了,但是他們均基于來(lái)繪圖。 什么是 ClChart? ClChart是一個(gè)基于canvas創(chuàng)建的簡(jiǎn)單、高性能和跨平臺(tái)的股票數(shù)據(jù)可視化開(kāi)源項(xiàng)目。支持PC、webApp以及React Native和Weex等平臺(tái)...
摘要:謹(jǐn)以此文我在北京一家公司打工兩個(gè)月,昨夜露宿街頭我是一名程序員,在北京打工兩個(gè)月,如今身上只剩吃碗面條的錢(qián)。昨夜在北京寒冷的公園和同事與流浪漢一起露宿一夜,因?yàn)槲覀儽焕习逋锨妨斯べY。我在兩個(gè)多月前,前往北京。 你可能不知道的 14 個(gè) JavaScript 調(diào)試技巧 了解你的工具可以在完成任務(wù)的過(guò)程中發(fā)揮重大作用。盡管傳言 JavaScript 難以調(diào)試,但是如果你掌握了一些調(diào)試技巧,...
閱讀 736·2025-02-07 13:40
閱讀 1046·2025-02-07 13:37
閱讀 1103·2024-11-06 13:38
閱讀 1192·2024-09-10 13:19
閱讀 1312·2024-08-22 19:45
閱讀 1490·2021-11-19 09:40
閱讀 2844·2021-11-18 13:14
閱讀 4422·2021-10-09 10:02