ActiveReportsJs 账票印刷

参考资料

  1. 官方文档

一. HTML部分

  • 在页面上添加了Loading效果,账票印刷开始时显示Loading效果,印刷结束后隐藏Loading效果。
  • ar-js-core.js是核心文件
  • ar-js-pdf.js用来印刷PDF
  • ar-js-xlsx.js用来印刷EXCEL
  • ar-js-locales.js用来设置语言
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><style>@keyframes donut-spin {0% {transform: rotate(0deg);}100% {transform: rotate(360deg);}}.donut-container {display: flex;justify-content: center;align-items: center;margin-top: 20%;}.donut {display: inline-block;border: 4px solid rgba(0, 0, 0, 0.1);border-left-color: #7983ff;border-radius: 50%;width: 30px;height: 30px;animation: donut-spin 1.2s linear infinite;}.hidden {display: none;}</style><title>Document</title>
</head>
<body><!-- 账票打印区域 --><div id="container"><button id="pdf">打印PDF</button><hr><button id="excel">打印Excel</button></div><!-- loading效果 --><div class="donut-container hidden" id="loading"><div class="donut"></div></div></body>
<!-- 核心文件 -->
<script src="https://cdn.grapecity.com/activereportsjs/4.0.0/dist/ar-js-core.js"></script>
<!-- 打印PDF -->
<script src="https://cdn.grapecity.com/activereportsjs/4.0.0/dist/ar-js-pdf.js"></script>
<!-- 打印Excel -->
<script src="https://cdn.grapecity.com/activereportsjs/4.0.0/dist/ar-js-xlsx.js"></script>
<!-- 语言 -->
<script src="https://cdn.grapecity.com/activereportsjs/4.0.0/dist/locales/ar-js-locales.js"></script>
</html>

二. 账票定义体

⏹账票定义体本质上就是通过ActiveReportsJS Designer制作的特殊json文件,该json文件用来描述账票的样式,和后台提供的json数据进行绑定。只要后台提供的json数据的格式和账票定义体绑定的json数据格式保持一致,后台的数据便可显示在账票上。

在这里插入图片描述


三. JS部分

  • GC.ActiveReports对象中解构出账票印刷所需的各类对象
  • 账票定义体是后缀为.rdlx-json的文件,本质上是一个json文件。
  • 从后台请求账票印刷所需的json数据,然后通过账票定义体的DataSources[0].ConnectionProperties.ConnectString连接字符串将其放入账票定义体。
  • 可以定义一个配置对象,用来配置印刷账票的相关设置
  • 使用new Intl.DateTimeFormat来获取时间对象
window.addEventListener('load', () => {init();
});function init() {document.querySelector("#container").addEventListener("click", async function({target: {id}}) {if (!id) {return;}// 显示loading效果document.querySelector("#loading").classList.remove("hidden");// 从GC(GrapeCity的缩写)对象中,解构出账票打印的对象const {Core: ARJS,PdfExport,XlsxExport} = GC.ActiveReports;// 模拟从后台获取的json数据const dataResponse = await fetch('./01-reports/sales_data_sample_2.json');const reportJsonData = await dataResponse.json();/*获取账票的定义体对象,该定义体对象一般保存在前台的静态资源文件处*/ const reportResponse = await fetch('./01-reports/SalesDataByProductLineAndDate.rdlx-json');const report = await reportResponse.json();// 将后台得到的json数据放到账票定义体中report.DataSources[0].ConnectionProperties.ConnectString = "jsondata=" + JSON.stringify(reportJsonData);// 根据账票类型进行配置const exportCategoryMap = new Map([["pdf", {info: {title: 'Invoice List',subject: 'This is the Invoice List',author: 'John K',keywords: 'PDF; import; export'}}],["excel", {info: {creator: '贾飞天'},// 设置sheet页名称sheetName: 'Sheet_Details',// 印刷纸张设置pageSettings: {size:'A4',orientation: 'landscape'},// Excel文件设置的密码(该密码可以由后台返回给前台)password: 'password'}],]);const exportSetting = exportCategoryMap.get(id);// 账票类型的Map映射const exportObj = new Map([["pdf", PdfExport],["excel", XlsxExport]]).get(id);// 注册字体ARJS.FontStore.registerFonts('./02-fonts/fontsConfig.json');// 加载账票定义体对象const pageReport = new ARJS.PageReport({ language: "ja" });
await pageReport.load(report);// 获取账票导出对象const pageDocument = await pageReport.run();
const result = await exportObj.exportDocument(pageDocument, exportSetting);// 账票下载result.download(`账票名_${yyyyMMddHHmmssTime()}`);// 隐藏loading效果document.querySelector("#loading").classList.add("hidden");});
}// 构造yyyyMMddHHmmss时间
function yyyyMMddHHmmssTime() {return new Intl.DateTimeFormat('jp', {year: 'numeric', month: '2-digit', day: '2-digit',   hour: 'numeric',hour12: false,  minute: 'numeric', second: 'numeric',fractionalSecondDigits: 3,}).format(new Date()).replaceAll("/", "").replaceAll(":", "").replaceAll(" ", "").replaceAll(".", "");}

四. 效果

⏹PDF效果
在这里插入图片描述

⏹Excel效果

在这里插入图片描述


五. Vue用法

⏹package.json

"dependencies": {"@grapecity/activereports": "^4.0.2","@grapecity/activereports-localization": "^4.0.2",// ...省略...
},

⏹Vue部分

import { Core, PdfExport, XlsxExport } from "@grapecity/activereports";
import '@grapecity/activereports-localization';
import '@grapecity/activereports/xlsxexport';
import '@grapecity/activereports/pdfexport';
import '@grapecity/activereports';// 账票印刷部分代码和纯JS代码相同...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/123115.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

9.3.3网络原理(网络层IP)

一.报文: 1.4位版本号:IPv4和IPv6(其它可能是实验室版本). 2.4位首部长度:和TCP一样,可变长,带选项,单位是4字节. 3.8位服务类型 4.16位总长度:IP报头 IP载荷 传输层是不知道载荷长度的,需要网络层来计算. IP报文 - IP报头 IP载荷 TCP报文 TCP载荷 IP载荷(TCP报文) …

MySQL——数据类型以及对表结构的修改

MySQL的数据类型 刚才我们在创建表的时候&#xff0c;说到了一个字段类型&#xff0c;所谓的字段类型就是这个字段能存放的数据的数据类型&#xff0c;在MySQL中有以下几种数据类型&#xff1a; 数据类型 大小&#xff08;字节&#xff09; 用途 格式 INT 4 整数 FLOAT…

QT的介绍和优点,以及使用QT初步完成一个登录界面

QT介绍 QT主要用于图形化界面的开发&#xff0c;QT是基于C编写的一套界面相关的类库&#xff0c;进程线程库&#xff0c;网络编程的库&#xff0c;数据库操作的库&#xff0c;文件操作的库…QT是一个跨平台的GUI图形化界面开发工具 QT的优点 跨平台&#xff0c;具有较为完备…

http实现文件分片下载

文章目录 检测是否支持HTTP Range 语法Range请求cURL示例单一范围多重范围条件式分片请求 Range分片请求的响应文件整体下载文件分片下载文本下载图片下载封装下载方法 HTTP分片异步下载是一种下载文件的技术&#xff0c;它允许将一个大文件分成多个小块&#xff08;分片&#…

c++异步框架workflow分析

简述 workflow项目地址 &#xff1a; https://github.com/sogou/workflow workflow是搜狗开源的一个开发框架。可以满足绝大多数日常服务器开发&#xff0c;性能优异&#xff0c;给上层业务提供了易于开发的接口&#xff0c;却只用了少量的代码&#xff0c;举重若轻&#xff…

java+ssm+mysql电梯管理系统

项目介绍&#xff1a; 使用javassmmysql开发的电梯管理系统&#xff0c;系统包含管理员&#xff0c;监管员、安全员、维保员角色&#xff0c;功能如下&#xff1a; 管理员&#xff1a;系统用户管理&#xff08;监管员、安全员、维保员&#xff09;&#xff1b;系统公告&#…

【算法训练-链表 四】【删除】:删除链表的倒数第N个节点、删除有序链表中的重复元素、删除有序链表中的重复元素II

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【删除有序链表中的重复元素】&#xff0c;使用【链表】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c…

分布式实时仿真系统-反射内存的应用

为了使分布式实时仿真系统(一个典型代表就行飞行模拟器)达到逼真的仿真效果&#xff0c;在系统内部&#xff0c;往往不仅需要对各种数据模型进行实时解算&#xff0c;而且需要一个延迟时间极低的确定性网络在系统之间传递数据&#xff0c;这样才能让各个子系统之间协调一致地工…

【Cisco Packet Tracer】交换机划分Vlan实验

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

优雅编码!Java与MongoDB的创新数据库架构

随着现代应用程序对数据存储和处理需求的不断增加&#xff0c;开发人员需要寻找更具创新性和灵活性的数据库架构来满足这些需求。在这样的背景下&#xff0c;Java与MongoDB的结合为开发人员提供了一种创新的数据库架构&#xff0c;为应用程序带来了无限可能。下面将探讨Java与M…

string容器的常用操作

string容器的常用操作 一、C语言中的字符串二、string容器1、概念2、特点 三、string类对象的常见构造1、构造2、实际构造函数3、测试代码4、运行结果 四、赋值运算符1、类型2、作用3、测试代码4、运行结果 五、string类对象的容量操作1、成员函数2、测试代码3、说明4、运行结果…

Qt应用开发(基础篇)——复选按钮 QCheckBox 单选按钮 QRadioButton

一、前言 QCheckBox类与QRadioButton类继承于QAbstractButton&#xff0c;QCheckBox是一个带有文本标签的复选框&#xff0c;QRadioButton是一个带有文本标签的单选按钮。 按钮基类 QAbstractButton QCheckBox QCheckBox复选框是一个很常用的控件&#xff0c;拥有开关(选中和未…

WPF Flyout风格动画消息弹出消息提示框

WPF Flyout风格动画消息弹出消息提示框 效果如图&#xff1a; XAML: <Window x:Class"你的名称控件.FlyoutNotication"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xam…

短信软件平台搭建最新客户端|移讯云短信系统

根据客户 和市场需要 增加了新的客户端 新的客户端客户登录后发送短信时可自行选择用哪个通道来进行发送短信。每个通道的充值数量不一样。 通过后台给客户分配可使用的通道&#xff0c;只有在后台给客户分配可使用的通道后客户在登录客户端发送短信时才可进行选择。 关于客…

整理mongodb文档:事务(一)

个人博客 整理mongodb文档:事务(一) 原文链接&#xff0c;个人博客 求关注&#xff0c;本文主要讲下怎么在mongose下使用事务&#xff0c;建议电脑端看 文章概叙 本文的开发环境为Nodejs&#xff0c;在‘单机模式’讲解最基本的事务概念。并没有涉及分片以及集群&#xff0…

垃圾回收 - 标记压缩算法

压缩算法是将标记清除算法与复制算法相结合的产物。 1、什么是标记压缩算法 标记压缩算法是由标记阶段和压缩阶段构成。 首先&#xff0c;这里的标记阶段和标记清除算法时提到的标记阶段完全一样。 接下来我们要搜索数次堆来进行压缩。压缩阶段通过数次搜索堆来重新填充活动对…

C#,《小白学程序》第十五课:随机数(Random)第二,统计学初步,数据统计的计算方法与代码

1 文本格式 /// <summary> /// 《小白学程序》第十五课&#xff1a;随机数&#xff08;Random&#xff09;第二&#xff0c;统计学初步&#xff0c;数据统计的计算方法与代码 /// 用随机数做简单的统计并用图形显示统计结果。 /// </summary> /// <param name&q…

vue中v-for循环数组使用方法中splice删除数组元素(每次都删掉点击的下面的一项)

总结&#xff1a;平常使用v-for的key都是使用index&#xff0c;这里vue官方文档也不推荐&#xff0c;这个时候就出问题了&#xff0c;我们需要key为唯一标识&#xff0c;这里我使用了时间戳&#xff08;new Date().getTime()&#xff09;处理比较复杂的情况&#xff0c; 本文章…

2020年12月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程&#xff08;1~8级&#xff09;全部真题・点这里 第1题&#xff1a;字符三角形 描述 给定一个字符&#xff0c;用它构造一个底边长5个字符&#xff0c;高3个字符的等腰字符三角形。 输入 输入只有一行&#xff0c; 包含一个字符。 输出 该字符构成的等腰三角形&#xff…

C++ - 多态的实现原理

前言 本博客主要介绍C 当中 多态语法的实现原理&#xff0c;如果有对 多态语法 有疑问的&#xff0c;请看下面这篇博客&#xff1a; C - 多态语法 - 虚函数使用介绍-CSDN博客 探究&#xff0c;为什么多态的条件是那样的&#xff08;虚函数表&#xff09; 首先&#xff0c;调用…