做pc端網(wǎng)站平臺(tái)今日頭條熱點(diǎn)新聞
項(xiàng)目后端使用的java,試驗(yàn)過(guò)積木報(bào)表(web界面類(lèi)型的)、JasperReport(.jasper報(bào)表文件)、stimulsoft web版本(.mrt報(bào)表文件)
我們的項(xiàng)目是前后端分離的,用積木報(bào)表(開(kāi)箱即用集成前后端的項(xiàng)目)的話 相當(dāng)于要另外搭建一個(gè)類(lèi)似 報(bào)表中心的站點(diǎn),報(bào)表稍微復(fù)雜一點(diǎn)的時(shí)候,感覺(jué)用起來(lái)就很麻煩。
JasperReport也是一個(gè)開(kāi)源的報(bào)表工具,功能是比較強(qiáng)大的,但是他上手不簡(jiǎn)單,而且個(gè)人覺(jué)得官方文檔看起來(lái)可費(fèi)勁了。最重要的是他支持導(dǎo)出的文件格式太少了,好像就支持2種導(dǎo)出格式。
stimulsoft report 是一個(gè)付費(fèi)的報(bào)表工具,功能強(qiáng)大,用起來(lái)也比較容易上手。以前java有個(gè)項(xiàng)目用過(guò),但是只要一加載報(bào)表,就很容易內(nèi)存溢出。
其實(shí)上面那3種 如果加載的報(bào)表文件比較大的話,都是很容易導(dǎo)致內(nèi)存溢出(因?yàn)閳?bào)表的渲染是在服務(wù)器完成的,比如1個(gè)人請(qǐng)求報(bào)表時(shí),數(shù)據(jù)量大小可能就10kb,但是因?yàn)槊恳豁?yè)都加載logo圖片,到報(bào)表出來(lái)可能就變成10M了,如果是1000個(gè)人同時(shí)請(qǐng)求,可想而知服務(wù)器的壓力)的。項(xiàng)目經(jīng)常會(huì)有加載大文件的報(bào)表,所以上面那3種暫時(shí)yi不考慮,最后選用了?stimulsoft 的js版本,報(bào)表渲染的壓力就交給客戶(hù)端而不是服務(wù)器了,服務(wù)器只需要把數(shù)據(jù)的json返回給前端就好了。
1.登錄到官方網(wǎng)站(https://www.stimulsoft.com/en/)下載依賴(lài)包和license.key文件
2.在index.html文件按需引入js文件
<!-- stimulsolt報(bào)表 -->
<script type="module" src="src/library/stimulsoft/scripts/stimulsoft.reports.js"></script>
<script type="module" src="src/library/stimulsoft/scripts/stimulsoft.viewer.js"></script>
<script type="module" src="src/library/stimulsoft/scripts/stimulsoft.designer.js"></script>
<script type="module" src="src/library/stimulsoft/scripts/stimulsoft.blockly.editor.js"></script>
3.vue文件編寫(xiě)
<template>
<!-- 報(bào)表 -->
<div id="viewerContent"></div>
<script>
里面用到的mrt文件是使用 stimulsoft designer 創(chuàng)建的文件
Stimulsoft.Base.StiLicense.loadFromFile('src/library/stimulsoft/reports/license.key') //加載秘鑰文件var mrtPath = '/src/reports/test.mrt' //mrt文件var report = Stimulsoft.Report.StiReport.createNewReport(); //創(chuàng)建報(bào)表report.loadFile(mrtPath); //加載報(bào)表文件var dataSet = new Stimulsoft.System.Data.DataSet("JSON"); //創(chuàng)建數(shù)據(jù)源對(duì)象const res = await Http.post('/api/report/getData') //向服務(wù)器請(qǐng)求json數(shù)據(jù)dataSet.readJson(res.data) //把json數(shù)據(jù)放到數(shù)據(jù)源中report.dictionary.databases.clear(); //清空之前的的數(shù)據(jù)源report.regData("JSON", "JSON", dataSet); //綁定數(shù)據(jù)源var options = new Stimulsoft.Viewer.StiViewerOptions(); //創(chuàng)建報(bào)表渲染配置對(duì)象// exports 是工具欄中導(dǎo)出按鈕的配置(默認(rèn)顯示11種導(dǎo)出方式),按需進(jìn)行配置顯示,false代表不顯示options.exports.showExportToHtml5 = false options.exports.showExportToOpenDocumentCalc = falseoptions.exports.showExportToXps = falseoptions.exports.showExportDataOnly = falseoptions.exports.showExportToCsv = falseoptions.exports.showExportToDocument = falseoptions.exports.showExportToExcel2007 = falseoptions.exports.showExportToImagePng = false //導(dǎo)出Png圖片options.exports.showExportToImageJpeg = falseoptions.exports.showExportToImageBmp = falseoptions.exports.showExportToPdf = false //導(dǎo)出pdfoptions.exports.showExportToPowerPoint = false //導(dǎo)出pptoptions.exports.showExportToWord2007 = false //導(dǎo)出wordoptions.exports.showExportToText = false //導(dǎo)出txt文件//options.exports.showExportDialog = false //點(diǎn)擊導(dǎo)出后是否顯示選項(xiàng)窗體//options.exports.showExportToHtml = false //導(dǎo)出html//options.exports.showExportToOpenDocumentWriter = false//options.exports.openAfterExport = false//options.exports.storeExportSettings = false//options.exports.showOpenAfterExport = falsevar viewer = new Stimulsoft.Viewer.StiViewer(options, "StiViewer", false); //報(bào)表渲染對(duì)象,并傳入渲染參數(shù)viewer.report = report;viewer.renderHtml("viewerContent"); //在id是viewerContent中渲染報(bào)表
4.關(guān)于報(bào)表多語(yǔ)言問(wèn)題
報(bào)表的多語(yǔ)言是通過(guò)Stimulsoft.Base.Localization實(shí)現(xiàn)的,可以通過(guò)修改這個(gè)對(duì)象的值修改多語(yǔ)言。 可參考StiLocalization | main
出來(lái)的結(jié)果:
參考文檔:
Stimulsoft Publish
Reports and Dashboards
Stimulsoft | main