8种机械键盘轴体的比较
本人,买写代码的键盘,红轴和茶轴怎么选?
背景需求为基于web现代浏览器的电子表单的统一印刷(规格固定)、带各种条形码的文件)规格范围不固定); 如下所示
网络印刷技术研究
浏览器的菜单打印功能
这是最简单的,只需单击页面上的打印菜单,但问题最多,基本上不能满足用户的需要。 例如,不能正确分页,有打半行字的风险; 换纸打印的格式和页面显示的格式相差太大; 页眉页脚也必须从菜单中设置。 这个方案最大的优点是不需要编写代码,点击打印就可以了。
window.print (
这实际上是浏览器打印功能菜单的程序调用。 不能像单击打印功能菜单一样准确地分开页面或设置纸张。 套装问题更是不成问题。 但是,用户不需要单击菜单,就可以从网页的按钮和链接中调用。
并且,该方法提供印刷前和印刷后的事件onbeforeprint、onafterprint。 您可以在打印前重新编辑某些格式,将其发送为仅打印,然后在打印后处理并返回。 1
2
3
4
5
6
7
8function .onbeforeprint (
{
}
function .onafterprint (
{
//释放隐藏的要素
}
事实上,很多用户都在用这种方法打印,但这种方法最致命的缺点是无法设置打印参数,如纸张类型、边距和打印机选择。
打印excel导出pdf文件
通过将需要打印的数据导出到excel文件或导出到pdf文件,打开并重新打印excel或pdf文件,可以实现准确的打印。 虽然可以夹克,但excel和adobe软件需要在客户端安装,操作也很麻烦。 此外,可以重新修改和编辑导出的excel文件。 普通用户还必须能够向系统提供此导出方法并直接打印
纯activex控件
此方案实际上是创建c/s打印控件,将其嵌入到页面中,然后将打印的数据加载到控件中进行打印。 该方案的优点是打印精度高,可以实现分页、打印参数的设定等。 但是缺点也很明显,嵌入activex控件破坏了web APP应用的整体html样式,而且这种控件通常很大,一般超过1m,下载速度很慢。
小程序方式
采用applet方式进行分页和准确打印是完美的,但缺点也很明显,如下所示
安装小程序需要巨大的成本。 需要下载十几米的文件。
小程序本身可能不大,但运行小程序所需的jre通常为10m。 用户为了进行打印需要非常大的耐心。
打印报告时,需要从服务器重新获取数据,效率很低。
applet方式一般以html方式提示数据,因此打印时applet必须从服务器中检索同一表单的数据,看起来像是打印了当前页的表单。 实际上,applet不是使用当前html页面的数据打印,而是将数据下载到服务器并打印到applet上。 这意味着要打印,它必须用于两次请求、一次html渲染和一次打印。
市面上的java类报告工具一般建议用小程序方式实现打印。
轻型activex插件dhtml javascript后台代码(
轻量activex插件设置打印参数,例如预定义的纸张类型、打印方向设置、打印边距设置、打印机指定和直接打印而不弹出打印对话框。
在dhtml javascript中编辑打印数据的格式表示,以实现格式定制。
后台代码可以动态获取打印数据,如java、dotnet等。
这种方案很理想,客户端只需要下载较小的打印插件,客户端不需要安装大于或等于c/s格式设计的源:
主要有一个叫ScriptX的主要控件
帕祖
jatoolsPrinter
lodop
国内主要是jatoolsPrinter和lodop,比较lodop最适合——技术支持,具有丰富的免费开放功能
使用lodop打印
打印工具的说明
Web打印控件Lodop
将JavaScript打印编程接口扩展为插件,以便web可以使用它来控制打印,支持超文本打印和自定义命令打印
打印设计过程页面检测打印控件的安装状态并提示
用户设定打印机、打印格式、字体等
检查表单数据,然后单击打印框进行预览
返回打印状态并更改文档的打印状态
p>项目实现
基本流程打印控件引入及引导安装控件 JS 文件——LodopFuncs.js
对该文件的主函数 getLodop 模块化导出,修改相关文件里安装、调用和升级的程序代码为项目的弹框提示,去除升级检测。1export function getLodop(oOBJECT, oEMBED){}
控件在页面内以 object 元素形式被引用。设置元素的 width 和 height 等于 0 来隐藏控件。
采用 js 动态拼接字符串生成 html+css 的超文本并发送到打印插件进行打印1LODOP.ADD_PRINT_HTM('0mm', '0mm', '100%', '100%', strFormHtml)
设置定时器监听回调捕获打印状态1
2
3
4LODOP.On_Return_Remain = true
LODOP.On_Return = function(TaskID, Value){
// 根据TaskID和Value判断打印状态
}
模块化封装并设置打印回调模块化各个打印单据类型
项目里面有多个单据,打印的排版,指定打印机,内容等都有所不同,通过定义一个打印主函数,模块化封装各个单据及对应对应参数。我们只需在页面中调用函数并传入单据类型、打印数据及相关参数就可以实现具体单据的打印。1
2
3
4
5
6
7
8
9
10
11
12
13
14export printDemo1 = function(data){
printStyle = `样式控制`
printHtml = `填入数据的html模板`
const params = {
type: `Demo1`,
printStyle: printStyle,
printHtml: printHtml,
size: {
width: 800,
height: 600
}
}
return params
}
主函数流程控制
根据传入不同单据类型做处理并执行打印指令1
2
3
4
5
6
7
8
9
10
11import printDemo1 from './printModule/demo1'
export function print(type, data){
switch (type) {
case 'Demo1':
{
let params = printDemo1(data)
return doPrint(params)
}
case 'Demo2': ...
}
}
doPrint 函数执行打印返回一个 promise 对象,打印取消、成功或失败后的回调1
2
3
4
5
6
7
8
9
10function doPrint(params){
return new Promise(function (resolve, reject){
// 打印取消
reject('cancel')
// 打印成功
resolve('success')
// 打印失败
reject('error')
}
}
实际调用1
2
3
4
5
6
7
8
9
10
11print(data)
.then(res => {
console.info('打印成功')
})
.catch(err => {
if (err === 'cancel') {
console.warning('打印取消')
} else {
console.error('打印失败')
}
})
电子面单打印——gxdxj打印组件
打印工具说明gxdxj打印组件——模板设计器、打印客户端以及相应的接口和协议(gxdxj物流接入的电子面单都可以打除了顺丰)
模板设计可自定义设置电子面单模板并生成相关代码
打印机客户端用于 web 交互通讯打印相关电子面单
相关接口协议用于前端 web 调用并控制打印设置
打印流程
gxdxj打印 demo 文档
大致流程如下,相关代码均可写在一个 cainiaoChat.js 文件中并像 lodop 打印那样子模块化并做相关回调处理,打印的实现效果也和上文一致。相关的接口文档比较完善这里就大致讲解一下。
连接打印机
打印组件客户机soket接口为13528(https的话,端口是13529)
新建websoket连接打印组件并设置相关websoket监听事件
配置打印机,可配置项如下:
打印机名称
模板上下联logo
水平和垂直偏移量
页面有无空边
打印机纸张宽高
获取电子面单数据并构建打印请求
异步请求获取到要打印的电子面单数据=>按照格式要求构造request对象=>把request用websoket发送至gxdxj组件生成电子面单=>打印或预览设置