8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

背景需求基于 web 现代浏览器实现批量打印电子面单(规格固定),各种带条码的单据(规格范围不固定);如下所示

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 应用的整体 html 风格,且这样的控件通常都比较大,一般都超过 1m,下载很慢。

applet 方式

采用 applet 方式,分页或精确打印,都可以做到完美,但缺点也很明显,表现在:

安装 applet 成本巨大。需要下载十几 m 的文件。

applet 本身可能并不大,但运行 applet 所需的 jre 一般>10m。用户需要极大的耐心,来进行打印。

打印报表时,需要重新向服务器检索数据,效率低。

因为 applet 方案,一般采用 html 方式呈现数据,打印时 applet 必须向服务器检索同一张票据的数据,看上去,是打印了当前页的票据,实际上,applet 根本不会用当前 html 页的数据来打印,而是向服务器下载数据到 applet 中来打印。也就是说,打印的话,必须两次请求,一次 html 呈现,一次用来打印。

市场上 java 类的报表工具,一般推荐 applet 方式来实现打印。

轻量级的 activex 插件+ dhtml + javascript +后台代码(动态获取数据)

轻量级 activex 插件:设置打印参数,比如预定义纸型,设置打印方向,打印边距,指定打印机,不弹出打印对话框直接打印等等。

dhtml + javascript 编辑打印数据的格式展现,实现格式的自定义。

后台代码,可以是 java,dotnet 等等的,实现动态获取打印数据。

这种方案是比较理想的,只需要客户端下载一个很小的打印插件,客户端无需安装任何 c/s 的格式设计以上来源:

主要有如下主流控件:ScriptX

PAZU

jatoolsPrinter

lodop

国内主要是 jatoolsPrinter 和 lodop,对比后 lodop 最合适——技术支持,免费的开放功能丰富

lodop 实现打印

打印工具说明

Web 打印控件Lodop

以插件形式扩展 JavaScript 打印编程接口,使得 web 可以操作控制打印,支持超文本打印或自定义指令打印

打印设计流程页面检测打印控件安装状态并提示

用户设置打印机、打印格式、字体等

勾选表格数据并点击打印弹框预览

打印状态返回并修改单据打印状态

项目实现

基本流程打印控件引入及引导安装控件 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('打印失败')

}

})

电子面单打印——菜鸟打印组件

打印工具说明菜鸟打印组件——模板设计器、打印客户端以及相应的接口和协议(菜鸟物流接入的电子面单都可以打除了顺丰)

模板设计可自定义设置电子面单模板并生成相关代码

打印机客户端用于 web 交互通讯打印相关电子面单

相关接口协议用于前端 web 调用并控制打印设置

打印流程

菜鸟打印 demo 文档

大致流程如下,相关代码均可写在一个 cainiaoChat.js 文件中并像 lodop 打印那样子模块化并做相关回调处理,打印的实现效果也和上文一致。相关的接口文档比较完善这里就大致讲解一下。

连接打印机

打印组件客户机soket接口为13528(https的话,端口是13529)

新建websoket连接打印组件并设置相关websoket监听事件

配置打印机,可配置项如下:

打印机名称

模板上下联logo

水平和垂直偏移量

页面有无空边

打印机纸张宽高

获取电子面单数据并构建打印请求

异步请求获取到要打印的电子面单数据=>按照格式要求构造request对象=>把request用websoket发送至菜鸟组件生成电子面单=>打印或预览设置

html打印成功回调,web前端打印实现相关推荐

  1. web前端打印页面,并在图片上加水印

    在不影响页面显示的情况下,单一的前端打印页面,使用下面的方法,交互是比较顺畅的,代码撸给大家做参考.解决的问题点如下: 1.纯前端打印页面,并且保证打印的页面数据显示不会被篡改. 2.不影响页面显示, ...

  2. html打印表格自动分页,Web分页打印 细线表格+分页打印之终极攻略

    Web分页打印 细线表格+分页打印之终极攻略 发布时间:2009-03-01 23:46:40   作者:佚名   我要评论 最近给客户做打印的时候,客户提出打印时不要打印该页面的头,只是打印表格里面 ...

  3. WEB前端打印使用记录

    一.window.print(); 1.使用记录 printTable(){//获取body页面内容const bdhtml = window.document.body.innerHTML;//根据 ...

  4. Lopod 前端打印插件基础用法

    Lopod 前端打印插件 一款前端打印插件,可实现各个前端打印功能,并且跨浏览器.官网:[http://www.lodop.net/index.html] (http://www.lodop.net/ ...

  5. Web 前端通过调用ActiveX实现LPT1端口小票机打印功能。

    最近项目中发现Web前端通过javascript是无法实现调用LPT1端口进行特定格式的打印的.而直接采用浏览器的打印会导致打印的全部为乱码. 后经查阅各方资料可以采用调用ActiveX方法实现小票机 ...

  6. html文本打印lt;igt;字段,Web前端学习第九课,使用文本格式化标签

    1.如何给元素添加样式? 通过前面的学习大家知道,在web前端中,元素所显示出来样子称为表现,专业处理元素长什么样子的技术主要是CSS(层叠样式表). 不过在HTML语言中,你可以用以下两种方式先进行 ...

  7. 写一个php web符号打印成沙漏的形状,打印

    测试类中很常见,出现这个异常不要惊慌- - 原因:就是单纯的测试结束了 解决:自己在控制台上翻,可看见打印的测试结果,无打印的也完成了测试,强迫症患者可以在测试方法后加个while(true){} 没 ...

  8. 前端为什么有的接口明明是成功回调却执行了.catch失败回调_Web前端:ES6是干什么的?(下)...

    大家好,我来了!本期为大家带来的Web前端学习知识是"Web前端:ES6是干什么的?(下)",喜欢Web前端的小伙伴,一起看看吧! 主要内容 Promise Generator A ...

  9. VUE使用lodop实现前端打印页面指定内容

    最近做项目,遇到一个需要页面无需下载在线打印Word的功能,最初尝试直接打印页面,会导致将整个页面都打印出来,不符合要求.后期客户要求要使用lodop,这样打印与页面展示Word两个方面都是未知的东西 ...

  10. 发现了一个好用的WEB项目打印控件--四方打印

    PAZU 与WEB打印  PAZU 组件应用于基于WEB的开发  PAZU 提供以下三大类功能:             1.控制IE窗口的外观和行为 1.1 通过 JavaScript 隐藏IE的地 ...

最新文章

  1. LeetCode:Merge Intervals
  2. legend3---Homestead中Laravel项目502 Bad Gateway
  3. 034_webpack中的加载器
  4. mysql 缓存监控_MySQL监控性能的一些方法总结
  5. Nslookup-查dns
  6. 对你的的应用程序进行Debug
  7. C++ —— C++运算符与表达式
  8. Html中解决点击 a 标签刷新的问题,实现点击时不刷新
  9. 如何远程调试zookeeper集群
  10. 第二章节 ASP.NET 验证控件(二)
  11. C#获取IP和整数IP方法
  12. 「leetcode」98. 验证二叉搜索树:中序遍历【递归】【迭代】详解
  13. Android签名机制学习笔记
  14. 这场直播,我们把 Apache 顶级项目盛会搬来了!
  15. ffmpeg把YUV转换为H264
  16. 【读书笔记】《向上管理:如何正确汇报工作》
  17. 第四届CCF计算机职业资格认证考试题解(C++)
  18. 燃烧的远征恢复英文语音的方法
  19. flex effect
  20. 这样的男人有几个;1.会为你哭的男人2.喜欢欺负你的男人3.会主动亲你的男人4.喜欢叫你傻瓜

热门文章

  1. 穿越沙漠问题c语言算法,穿越沙漠问题---递推法
  2. matlab 怎么保存,matlab怎么保存程序
  3. 网络工具之GNS3安装及使用
  4. 七种滤波方法测试matlab
  5. MATLAB的7种滤波方法(重制版)
  6. 超好用的文件转换神器!拿走不谢~
  7. JAVA核心技术36讲教程
  8. 修改sql数据库服务器名称,如何更改sql数据库服务器名称
  9. unity 编辑器存档_Unity编辑器扩展之存储数据
  10. Java爬虫需要的包_java爬虫需要的jar包