web打印的最佳解决方案

web打印的痛点

winform打印的方案比较多,实现也比较容易,而且效果也非常炫;但现在越来越多的系统是web系统,甚至是移动端。网上也有非常的web打印方案,但各式各样的问题非常多,比如js兼容性,稳定性等一直缠绕着众多的程序员,或者就是web 打印需要浏览器安装 ActiveX 组件,ActiveX安装不容易成功等等问题。Lodop等插件还是收费的。

新的解决方案 HttpPrinter

对各种方案分析之后,对web在重业务场景的打印需求(比如直接打印,无预览直接打印,特定格式打印)梳理之后,确定了一个生产环节最佳的WEB打印方案,纯JS通过post提交数据到打印伺服器的方案。

js可以脱离语言环境更通用,不管你是java,还是php,甚至只是个前端都毫无障碍;
使用http协议 post模式更简单,门槛更低,几行代码搞定;其实使用webSocket协议也可以,但是在不需要长连接的情况下没有必要。

web页面实现源代码 HttpPrinter web端

{
"ReportType": "gridreport", /报表类型 支持 gridreport fastreport 为空 默认 gridreport/
"ReportName": "test.grf", /报表文件名 需要以英文字母开头/
"ReportVersion": 1, /可选。报表版本, 为空则默认1 如果本地报表的版本过低 将从 ReportUrl 地址进行下载更新/
"ReportUrl": "http://111.67.202.157:9099/report/test.grf", /可选。为空 将不更新本地报表 , 如果本地报表不存在可以从该地址自动下载/
"Copies": 1, /可选。打印份数,支持指定打印份数。默认1份,如果为零,不打印,只返回报表生成的pdf,jpg等文件/
"PrinterName": "", /可选。指定打印机,为空的话 使用默认打印机, 请在 控制面板 -> 设备和打印机 中查看您的打印机的名称 /
"PrintOffsetX": 0, /可选。打印右偏移,单位厘米。报表的水平方向上的偏移量,向右为正,向左为负。/
"PrintOffsetY": 0, /可选。打印下偏移,单位厘米。 报表的垂直方向上的偏移量,向下为正,向上为负。/
"Preview": 0, /可选。是否预览,和主界面设置的效果一样 为空默认不预览, 0:不预览,1:预览(弹出导出的pdf,jpg等文件)。/
"token": "aa", /可选。只要token值在列表中 方可打印
"taskId": "1234567", /
可选。多个打印任务同时打印时,根据该id确定返回的是哪个打印任务。 /
"exportfilename": "", /
可选。自定义 导出 文件名称 例如 test 会 导出 http://127.0.0.1:12345/gridreport/test.pdf 格式为 ip+port+报表类型+名称+文件类型 */

  "Control": ‘[‘  ///*部件框,可选值:AsStaticBox ,AsMemoBox,AsRichTextBox,AsPictureBox (base64格式),AsBarcode*/
    +‘{"type": "AsStaticBox", "name": "姓名","value": "高文杰","required": false},‘
    +‘{"type": "AsStaticBox", "name": "性别","value": "男","required": false},‘
    +‘{"type": "AsStaticBox", "name": "电话","value": "13165191728","required": false},‘
    +‘{"type": "AsBarcode", "name": "二维码","value": "5520002701774727","required": false},‘
    +‘{"type": "AsPictureBox", "name": "图片","value": "/9j/4AAQSkZJA/9k=","required": false},‘  //base64格式
    +‘]‘),

  "Parameter": ‘[‘  ///*参数,type 默认为空即可,已经在报表端设置了 备用字段
    +‘{"type": "", "name": "单号","value": "5520002701774727","required": false},‘
    +‘{"type": "", "name": "日期","value": "2019-09-09 12:21:12","required": false},‘
    +‘{"type": "", "name": "year","value": "2018","required": false},‘
    +‘]‘),

  "Field": ‘[‘  ///*字段, type ftBlob (base64格式) ,ftString ftInteger ftBoolean, ftFloat, ftCurrency,ftDateTime,  size (ftString 设置为实际长度,其他的设置为0,例如 ftInteger ftBlob 等设置为0 )
    +‘{"type": "ftString", "name": "快递单号","size": 255,"required": true},‘
    +‘{"type": "ftString", "name": "发件人","size": 255,"required": false},‘
    +‘{"type": "ftString", "name": "发件人电话","size": 255,"required": false},‘
    +‘{"type": "ftBlob", "name": "图像","size": 0,"required": false},‘
    +‘]‘),

  "Data": ‘[‘  ///*数据行
    +‘{"快递单号": "1234567890", "发件人": "易桥智能","发件人电话": "13165191728","图像": "/9j/4AAx="},‘
    +‘{"快递单号": "1234567890", "发件人": "易桥智能","发件人电话": "13165191728","图像": "/9j/4AAx="},‘
    +‘{"快递单号": "1234567890", "发件人": "易桥智能","发件人电话": "13165191728","图像": "/9j/4AAx="},‘
    +‘{"快递单号": "1234567890", "发件人": "易桥智能","发件人电话": "13165191728","图像": "/9j/4AAx="},‘
    +‘{"快递单号": "1234567890", "发件人": "易桥智能","发件人电话": "13165191728","图像": "/9j/4AAx="},‘
    +‘{"快递单号": "1234567890", "发件人": "易桥智能","发件人电话": "13165191728","图像": "/9j/4AAx="},‘
    +‘{"快递单号": "1234567890", "发件人": "易桥智能","发件人电话": "13165191728","图像": "/9j/4AAx="},‘
    +‘{"快递单号": "1234567890", "发件人": "易桥智能","发件人电话": "13165191728","图像": "/9j/4AAx="},‘
    +‘]‘),

}

打印效果

原文地址:https://blog.51cto.com/7166940/2458643

时间: 2024-11-01 15:40:48

web打印的最佳解决方案的相关文章

Maven WEB 项目使用ProGuard进行混淆,最佳解决方案

Maven WEB 项目使用ProGuard进行混淆,最佳解决方案 近期公司的Android项目做了混淆,虽说对于保护代码并不是100%的,但混淆后的代码可以使那些不法份子难以阅读,这样也能对代码的保护做出贡献. 于是,公司写的一大堆WEB项目也想做保护.但几大问题随之而来: 公司的所有项目全部是Maven项目,网上的混淆方案不是陈旧就是无效 网上的大部分解决方案感觉像是对简单DEMO进行混淆,根本不能用于复杂的WEB项目中 网上的大部分解决方案是针对Android项目的,针对WEB的少之又少

Web前端优化最佳实践及工具集锦

前端的性能对于一个Web应用来说非常重要,如果一个Web应用的页面加载速度非常快.对于用户的操作可以及时响应,那么产品的用户体验将会极大地提升.下图显示了页面加载速度对于用户体验的影响. 你的Web页面的速度是否已经足够快了?其实可能还有很多可以提升的地方.Google和雅虎也提出了一些Web应用的前端优化建议,并发布了一些工具,你可以逐一检验你的Web应用,以便达到更高的性能. 这些优化不仅仅可以给用户提供更好的体验,从开发者角度来说,进行优化还可以减少页面的请求数.降低请求所占的带宽.减少资

Web打印组件jatoolsPrinter(转载)

应用web化,不论对开发商,还是对用户来说,实在是一种很经济的选择,因为基于web的应用,客户端的规则很简单,容易学习,容易维护,容易发布.但对程序员来说,因为浏览器的局限性,却要面对很多挑战.怎么样来进行基于web的套打,就是这么一个令多数程序员头痛不已的问题. 基于web的套打,难度在于要将浏览器中呈现的html,精确地打印到票据中,而且能够实现对分页位置的控制.下面就ie浏览器所能采用的套打解决方案,来个汇总分析,希望对大家有所帮助. jatoolsPrinter 是一款实现网页套打的免费

WEB打印功能相关

最近项目要实现WEB打印功能,各种调试. 首先要实现WEB打印,这块用的window下的print方法,下面的代码实现了WEB打印和去页眉页脚的功能,打印分页需要在想要分页的元素上设置style="page-break-after:always",我这里是在table元素上加的分页,其他元素没测 1 //打印代码 2 function Print() 3 { 4 var printStr = "<html> 5 <head> 6 <meta ht

web 打印那些事

++++原生的windows.print++++ 一开始我是使用基于jQuery的jqprint类库进行打印的,由于后来需求的变更,这款插件已经不能够满足了,与其类似的还有printArea,printPage等,值得一说的是他们使用的都是原生的windows.print,只是通过jquery等进行封装了.其类库大家网上随意搜,大把大把的-- 那么基于此种原生的web打印怎么去除页眉页脚呢?那么大家也知道基于此种方式打印达成这种要求是比较难的,或者说基于代码的去除是没有解决方案的(至少我现在是这

Web打印控件

Lodop是什么? 有人说她是Web打印控件,因为她能打印.在浏览器中以插件的形式出现,用简单一行语句就把整个网页打印出来: 有人说她是打印编程接口,因为她介于浏览器和打印设备之间,是个通道和桥梁,几乎能想到的打印控制事项都能做到: 有人说她是JavaScript的扩展,因为她所有功能就那么几个语句,和JS语法一样,一看就明白个究竟: 有人说她是报表打印工具,因为那个add_print_table语句把报表统计的那点事弄了个明明白白: 有人说她是条码打印工具,因为用了她再也不用后台生成条码图片了

WEB打印的几种方案

WEB打印的几种方案 博客分类: 数据报表技术 WebIE编程CSS浏览器 -------------------------------------------一  基于Web的打印方案比较分析-------------------------------- 基于web的套打,难度在于要将浏览器中呈现的html,精确地打印到票据中,而且能够实现对分页位置的控制.下面就ie浏览器所能采用的套打解决方案,来个汇总分析,希望对大家有所帮助. 一.浏览器的打印功能菜单 这种方案的优势是不需要对浏览器作

web打印的几种实现方法(转载)

web打印的几种实现方法(转载) web打印,web打印控件的三种实现方法 做管理系统的时候,打印一直是个棘手的问题,做B/S的系统这个问题就更加突出了!下面举出三种常用的web打印处理方式 1.利用word或者excel来实现web打印(如果不修改ie设置,可以在web服务器端生成xls文件,然后通过xlBook = xls.Workbooks.Open(remotePath) 获取对象打印)   实现过程:先将需要打印的数据导入到word或者excel中,再利用word或者excel的打印功

.atitit.web 推送实现解决方案集合(3)----dwr3 Reverse Ajax

.atitit.web 推送实现解决方案集合(3)----dwr3 Reverse Ajax 1. 原理实现 1 2. Page  增加配置,增加回调函数dwr.engine.setActiveReverseAjax(true); 1 3. Web.xml增加配置 1 4. Java代码(page法,简单) 2 5. 推荐实现方式 attribute法.. 2 6. 参考::: 2 1. 原理实现 ScriptSession ::简单的一个page url管理一个scriptsession,这个