云桌面环境安全打印系统的设计与实现
2020-09-06陈建辉
摘要:随着软硬件国产化的推进,办公场景中Linux替代Windows在国内已逐渐形成趋势,在这个过程中,由于旧设备的淘汰是一个循序渐进的过程,存在各类设备的利旧,除了电脑利旧,还包括各种外设利旧,其中打印机的问题最突出。本方法通过云打印方式,解决国产化桌面的打印兼容问题,并避免直接使用Linux安装物理打印机驱动带来的管理和维护工作量。
关键词:云打印;国产化;虚拟打印机;安全打印;利旧
打印机通常采用USB连接或者网络共享的方式添加到国产化终端本地桌面,个别针式打印机通过串口或者并口连接到终端本地,从而实现打印功能。该方式存在以下弊端,首先是不同的打印机驱动不一样,每台机器都需要安装有各式各样的打印机驱动,不仅容易出现软件冲突,同时也让系统变得臃肿;其次办公环境下,一个办公室甚至一个楼层只有少数几台打印机,但是每台机器都需要安装打印机驱动才能打印,日常管理和维护工作量大;第三通过网络共享的方式添加到本地,往往打印机离工位都比较远,打印输出的文档不在可视范围,容易出现误拿、错拿、漏拿等,从而导致不必要的信息泄露;第四点到点的打印方式无法对打印的内容进行日常审计和事后追查;最后多数旧有的打印机缺少Linux系统适配的打印机驱动,无法对现有的打印机进行充分利用。
针对上述提出的问题,本文提出一种云打印方法,并完成设计与实现,进而解决这些问题。
Linux打印主要是基于Adobe公司开发的PostScript页面描述语言,这是一种与设备无关的语言,无需考虑打印机的自身特性,比如打印机的纸张、分辨率等,同时对于文本输出和图像输出都是同样的处理流程,这为系统统一处理打印提供了便利性。
打印系统的基础是一个假脱机程序,在操作系统中以Spooler服务的方式存在,负责管理打印队列,并将每个打印队列与具体的打印机进行关联。打印队列在被送往真实的物理打印过程中,需要经过一个或者多个打印过滤器进行过滤,通过过滤器将PostScript转换成物理打印机可识别的页面语言,确保打印动作可以被物理打印机真实执行。
打印的完整流程如下,用户通过应用程序打开打印机执行打印动作,假脱机程序Spooler将打印数据存放在打印队列中,并通过任务调度方式将数据发送给过滤器,过滤器检测打印机的打印能力,比如支持的页面描述语言如PostScript还是PCL或者直接的图像画图仪,然后调用GhostScript,对打印队列中PostScript描述的打印数据进行翻译,输出打印可识别的数据后发送给打印机进行打印,打印结束后Spooler将此前存放在打印队列中的数据删除,并删除对应的打印任务。
云打印系统主要包含五个模块,云打印客户端、云打印控制器、云打印移动端、云打印服务器、云打印管理系统,各模块的具体职责如下:
a) 云打印客户端,包含统一通用打印驱动和用户操作界面,并负责与管理服务端进行通信,获取安全策略、上传转成PDF后的待打印文档、获取打印机列表等。用户桌面只需安装有客户端,无需安装物理打印机驱动;
b) 云打印控制器,负责用户身份识别,并与管理服务器通信,下载待打印文档,并执行打印动作,同时通过长连接与服务器进行通信,用于接收各种信令等;
c) 移动端扫描打印机二维码(非必须组件),获取打印机信息,并通知服务器用户在哪台打印机上进行操作等;
d) 云打印管理系统用于打印机管理、用户管理、用户安全策略配置、打印机使用权限分配、打印记录、打印统计等;
e) 云打印服务器提供通信接口,供客户端和控制器获取打印策略、文档上传和下载等。
下文将针对与打印直接相关的云打印客户端和云打印控制器进行详细说明。
云打印客户端主要分成两个部分,统一通用打印驱动和桌面操作客户端。用户通过安装云打印客户端,避免安装真实的物理打印驱动。
通用驱动用于接收脱机程序发送过来的PostScript数据,并调用GhostScript进行转换,生成与设备无关的PDF文档,同时获取用户配置打印的纸张规格、是否双面打印和打印份数等各项配置,并通过命名管道方式,将打印参数和PDF文档路径信息发送给Agent。
Agent接收到数据后,根据管理员给用户配置的安全策略如水印策略,对PDF添加水印操作,并将处理好的PDF文档,连同打印参数送报服务端。添加水印可通过PoDoFo进行处理。针对原始文档为PDF文档并且带有密码时,需要对生成后的PostScript文件过滤以"mark currentfile eexec"开头的连续11行数据,便于通过GhostScript转成PDF。Agent将打印参数和PDF文件一并提交到云打印服务端。
部分PDF文档的坐标系与默认的坐标存在不一致的现象,如果机械的使用默认坐标系,存在水印添加后文本方向颠倒的问题。PDF每页都有标记当前页面的坐标系参数,通过对水印文本坐标进行变换,可得到最终的水印坐标,具体如下:
假设PDF页面坐标为m:
水印文本的坐标为M:
则水印的最终坐标为M:在新坐标系中,绘制完水印后,经过坐标系旋转变换映射到原坐标系,就可以正常显示指定倾斜角度的水印文本。
为了提升打印驱动的兼容性,云打印控制器安装在经过安全加固过后的Windows系统,访问界面通过深度定制,限制仅允许访问云打印控制器和打印机管理,网络层通过NDIS驱动,限制该主机仅能与云打印服务端进行通信。针对仅连接单台打印机的场景,可增加射频卡读卡器模块,用户通过刷工牌方式,对用户的身份进行识别,针对连接多台打印机的场景,采用移动端扫描方式,对打印机和用户身份进行识别。云打印服务端通过长连接方式下发待打印文档的队列ID信息,云打印控制器通过ID向服务端请求下载指定的待打印文档,并获取相应的打印参数,在本地执行最终的打印动作并输出。
采用云打印方式解决国产化环境中的打印问题,可以有效的进行打印机利旧,通过对最终打印输出的机器进行安全加固,可以有效的降低系统的安全风险,在提升打印体验的同时避免信息的泄露,所有的打印内容均在云打印服务端有备份,便于做后续的打印审核和打印审计。
参考文献:
[1]张婷,吴远征.基于“云计算”的云打印服务模式构建[J].江苏商论,2013,(04):31-34.
[2]王娜,卢智勇.一种基于专用网络的云打印应用实例[J].中国新通信,2012,(21):63-64
陈建辉(1985-),男,漢族,福建泉州人,主要研究方向为云应用的相关技术及其应用。