Python量化交易工程師養(yǎng)成實戰(zhàn)金融高薪領(lǐng)域-白日依山盡黃河入海流
前端報表如何完成無預(yù)覽打印處理計劃或靜默打印
Python量化交易工程師養(yǎng)成實戰(zhàn)金融高薪領(lǐng)域
Python量化交易工程師養(yǎng)成實戰(zhàn)金融高薪領(lǐng)域
download:https://www.zxit666.com/5814/
在前端開發(fā)中,除了將數(shù)據(jù)呈現(xiàn)后,我們常常需求為用戶提供,打印,導(dǎo)出等才能,導(dǎo)出是為了存檔或是二次剖析,而打印則由于很多單據(jù)需求打印出來作為主要的單據(jù)來停止下一環(huán)節(jié)的票據(jù)支撐, 而前端打印能夠說是十分令人頭疼的一件事。為什么令大家頭疼呢?由于前端打印,要強依賴與閱讀器的打印預(yù)覽頁面,會自然存在以下弊端:
- 每一次打印都要彈出來打印預(yù)覽對話框,假如前端需求批量打印,那么意味著客戶要點擊無數(shù)個關(guān)閉按鈕,才干完成批量打印,假如一次性打印幾百張上千張的報表,則會成為“NightMare”。
- 前端打印強依賴于閱讀器,主流的思緒是先將內(nèi)容轉(zhuǎn)換為 PDF 文件,再調(diào)用閱讀器的打印功用停止打印,而生成 PDF 文件是依賴于閱讀器關(guān)于字體,邊線等的處置,因而閱讀器的異同則直接招致打印出來的效果差距很大,有的邊線加粗,有的 1 頁數(shù)據(jù),打印出來呈現(xiàn) 2 頁,也是讓開發(fā)者非??鄲赖氖虑?,關(guān)于一些打印請求比擬高的行業(yè),這就是災(zāi)難。
因而如何在前端完成無預(yù)覽打印,也就是用戶點擊打印之后直接就運用默許打印機打印出來。針對這個需求,我們考證了一個處理該問題的計劃,本貼就來引見該計劃如何完成。
完成思緒如下:
后端完成一個接口,接納 Blob 類型 PDF 流,然后調(diào)用系統(tǒng)默許打印機,將PDF 停止靜默打印。前端應(yīng)用 ACTIVEREPORTSJS 自帶的導(dǎo)出 PDF,導(dǎo)出 Blob 類型,然后經(jīng)過POST 懇求調(diào)用后端接口將 Blob 傳播給后端停止打印。
詳細完成步驟:
前端完成辦法:
前端應(yīng)用 ActivereportsJS 的 PDF.exportDocument 無預(yù)覽導(dǎo)出 PDF,該接口返回的 result 包含 data 屬性和 download 辦法,然后調(diào)用后端接口,將result.data 傳送給后端。
1. function printPDF() { 2. var ACTIVEREPORTSJS = GC.ActiveReports.Core; 3. var PDF = GC.ActiveReports.PdfExport; 4. 5. var settings = { 6. info: { 7. title: "test", 8. author: "GrapeCity inc.", 9. }, 10. pdfVersion: "1.7", 11. }; 12. 13. var pageReport = new ACTIVEREPORTSJS.PageReport(); 14. pageReport 15. .load("1.rdlx-json") 16. .then(function () { 17. return pageReport.run(); 18. }) 19. .then(function (pageDocument) { 20. return PDF.exportDocument(pageDocument, settings); 21. }) 22. .then(function (result) { 23. let formData = new FormData(); 24. formData.append("file", result.data); 25. fetch("http://localhost:8088/print", { 26. method: 'POST', 27. mode: 'cors', 28. body: formData 29. }) 30. }); 31. }
后端完成方式:
我這邊是采用 python 完成了一個接口,接納前端傳送的 Blob 文件流,然后調(diào)用后端部署的效勞器默許打印機直接停止靜默打印。
后端程序能夠部署到效勞器上,假如是 windows 效勞器,能夠直接下載 exe,在效勞器上運轉(zhuǎn)。
下載下來是 2 個 exe 程序,需求放在同一個文件夾,然后運轉(zhuǎn) PrintAgent.exe,切記這兩個程序需求放在同一個文件夾。
留意:假如 exe 只給效勞器上部署,那么前端在打印時調(diào)用效勞器地址接口打印,最終都會從效勞器上銜接的打印機打出來。
假如 exe 給客戶端部署了,那么前端打印就能夠代碼調(diào)用 localhost 地址去打印,最終就會從客戶端所銜接的默許打印機打印出來;切換打印機的話,就調(diào)整 windows 的默許打印機就能夠。