# ANL_printer **Repository Path**: RADIUMSCRIPTTANG/anl_printer ## Basic Information - **Project Name**: ANL_printer - **Description**: 远程访问ANL打印机及其打印队列 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: improve - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-09-30 - **Last Updated**: 2022-02-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ANL 打印机共享站点v1.1 ### 1.背景 ANL打印机不失为世界上最难用的打印机,为了避免每个人连接时造成的额外开销,我们献祭一台计算机(托管计算机)专门用来管理打印机,并为其他主机提供服务。 ### 2.组织架构 本项目主要包括两部分:内网穿透部分和打印管理部分。本项目仅完成打印管理,内网穿透由运维实现。 - 内网穿透: 由于托管计算机通过ANL内网连接打印机,且不与SJTU在同一网段,无法通过内网访问,因此需要进行内网穿透,为托管打印机提供SJTU内网地址或公网地址。 当然,由于托管计算机同样不能直接访问SJTU内网中的服务器,因此暂时考虑风险较高的公网服务器辅助内网穿透。 - 打印管理:本项目为打印管理部分,实现了后台直接控制打印机以及一个简单的前端。通过前端上传文件,交由打印机打印,同时前端可以查阅打印队列等一些简单信息。 ### 3.技术挑战 本项目主要存在以下技术挑战: - 支持基本格式PDF的打印 本项目以PDF文件格式为例,考虑到PDF为最常见的格式,应优先支持该类格式的打印。然而PDF格式并非直接由操作系统支持,而是由应用支持。换言之,直接调用 操作系统提供的打印api对一个PDF文档进行打印,无法得到预期的打印结果,而是打印出PDF二进制再经过某种解码后的字符串。因此需要从应用层解决这一问题。 - 展示打印队列及各个任务状态 当用户提交打印作业后,打印管理程序应向用户反馈当前的打印机使用情况,以获得更好的用户体验。 - 调试阶段需要避免真机实验,以防止资源浪费 本项目的构建包含许多繁琐的细节,对这些细节进行调试应当避免直接真机运行,以避免电力/油墨和纸张等资源浪费。 # 4.系统设计 为应对上述挑战,本系统设计了如下的解决方案,以实现高效的打印机管理程序。 ![架构图](https://gitee.com/RADIUMSCRIPTTANG/anl_printer/raw/master/%E7%BB%84%E7%BB%87%E6%9E%B6%E6%9E%84.png) - 使用gsprint与GHOSTSCRIPT进行静默打印