Open xinglie opened 3 years ago
3已实现
针对不同的打印机,各种使用场景等,该项将会是一个长期的迭代和改进过程。
目前RDS
提供的服务里,已完成生成图片、pdf等。同时类似lodop
一样,由设计器打印页面发出打印指令,RDS
接收到后直接把内容发送给打印机,实现无对话框打印。
因github
仅支持静态内容,所以如果要尝试RDS
则在拿到代码后,自己部署一下相应的服务器。
因打印机相关的设置项也较多,这将是一个持久战
如果需要打印设计,需要把打印设计器的尺寸从默认的px
(像素)单位转换成mm
(毫米)单位,这是因为不同系统单位尺寸内所容纳的像素数是不一样的,如果使用px
有可能造成打印尺寸不正确的问题
在设计器中设计好的元素,在打印时会自动计算出每一页的位置和数据,所以务必把打印机默认的页边距等之类的设置为0
打印时,会自动把设计器中的元素按设置好的页面大小进行分页,因此您应该直接把页面尺寸设置为目标纸张的尺寸,如A4
或A3
,这样在打印分页时就不会被浏览器自动把元素放到错误的分页上
分页打印时,请使用chrome浏览器,其它浏览器可能会有问题
浏览器并不能准确的把设计器设计出来的内容打印出来,即使使用chrome,在对内容溢出隐藏的情况下打印,效果并不像网页中见到的那样。 要想获得更精确的打印,需要先对内容做转换,转换成图片或pdf。其实有了图片,转pdf是非常容易的,所以要优先生成图片。 目前在打印页面的内容转换存在诸多问题,后续提升可考虑以下3种方案。
方案1
最终渲染时,抛弃传统的
dom
方式,把所有可设计元素画在canvas
上。这样后续在转换图片或pdf时,均不会产生错位、边线粗细不一等问题。因目前所有数据均为
json
描述,因此通过该方式仅仅是开发工作量的问题,技术上并没有难度,只是工作量较大且周期长,需要有人协助。方案2
服务端渲染转成图片。全在网页客户端里处理,开发工作量大,那就通过接口借助服务端的能力。
可向服务端提交
json
数据或完整的html
,由服务端生成相应的图片,具体生成方案服务端决定。这样的工作量全在服务端,需要综合评估客户端与服务端的工作量,看采用哪种方式更省时间。
方案3
通过开发客户端或命令行的形式,如使用
nodejs
,一方面提供http
或websocket
用于与设计器通讯,一方面使用如puppeteer
的插件,在收到任务后,把网页内容转换成图片并回传给设计器。目前感觉可使用方案3,在
nodejs
下快速开发测试一下。