批量打印无论是在 Web端还是桌面端系统都是非常常见的需求,桌面端可以直接访问打印机系统,可以设置免预览,在后台直接批量打印多个文档。
Web端本身因为安全性设置,无法直接访问本地资源,都需要浏览器的打印预览窗口才可以。
但是有很多客户,尤其是生产制造类或医疗行业,需要大量的报表打印工作。尤其是期望一键打印,如图,每一行数据都是对应的一个报表文件,希望点击一次按钮,就可以实现所有的报表文件打印。
ARJS 提供了无预览打印,但是一次只能打印一个报表,如果要同时打印多个报表,就必须考虑拼接成一个文件了。
实现方法:
使用子报表控件,将多个报表文件拼接成一个主报表, ARJS 提供的子报表,可以在一个报表嵌入其他报表,且可同时使用多个子报表文件。
代码:
- <script>
- function load()
- {
- var subreports = ['/reports/SubReport1.rdlx-json', '/reports/SubReport2.rdlx-json', '/reports/SubReport3.rdlx-json'];
- var reportItems = [];
- var subreportTemplate = {
- "ZIndex": 1,
- "Type": "subreport",
- "Top": "",
- "Width": "6.5in",
- "Height": "2in",
- "ReportName": "",
- "Name": "Subreport"
- };
- //default top position of subreport. Can be any position by default. Also heigh/width can be modified too if necessary
- var topPosition = 0;
- var defaultHeight = 2;
- subreports.forEach((subreport, index) => {
- var subreportItem = {...subreportTemplate};
- subreportItem.ReportName = subreport;
- subreportItem.Name = "Subreport" + index;
- subreportItem.Top = topPosition + "in";
- reportItems.push(subreportItem);
- topPosition = topPosition + defaultHeight;
- });
-
- //fetch doesn't work in IE
- fetch('/reports/MainReport.rdlx-json').then(response => response.json()).then(reportDefinition => {
- //in case if report is empty at all
- if(!reportDefinition.Body.ReportItems) reportDefinition.Body.ReportItems = [];
- reportDefinition.Body.ReportItems.push(...reportItems);
- const viewer = new ActiveReports.Viewer('#ARJSviewerDiv');
- viewer.open(reportDefinition);
- console.log(reportDefinition);
- });
- }
-
- </script>
复制代码 项目代码如附件
|