# Ipp Printer Demo **Repository Path**: elihe999/ipp-printer-demo ## Basic Information - **Project Name**: Ipp Printer Demo - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-02 - **Last Updated**: 2026-07-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: tools ## README # PrinterSim - IPP 虚拟打印机模拟器 一个基于 Node.js 的虚拟打印机模拟器,通过 IPP 协议和 SNMP 协议模拟真实打印机行为,接收打印作业后可自动添加封面/尾页/水印并转发到真实打印机。 ## 功能特性 - **IPP 打印服务** — 在端口 9100 提供 IPP 协议虚拟打印机,支持 Bonjour/mDNS 自动发现 - **SNMP 状态监控** — 在端口 10161 提供 SNMP Agent,模拟打印机状态(墨水、纸张、打印中/空闲等) - **Web 管理界面** — 在端口 5000 提供可视化控制面板 - **打印作业转发** — 接收的作业可自动转发到本地真实打印机(如 Microsoft Print to PDF) - **封页/扉页/尾页** — 支持空白页、自定义 PDF 上传,自动插入到打印作业中 - **水印系统** — 支持平行/交叉两种水印方向,可调节密度、角度,支持文字和图片水印 - **模块开关** — IPP 和 SNMP 模块可独立启用/禁用 - **配置持久化** — 所有设置保存到 `config.txt`,重启后自动加载 ## 快速开始 ### 环境要求 - Node.js >= 12 - Windows(转发功能使用 PowerShell `Out-Printer` 命令) ### 安装与运行 ```bash npm install npm start ``` 启动后访问 [http://localhost:5000](http://localhost:5000) 打开管理界面。 ### 默认端口 | 服务 | 端口 | |------|------| | IPP 打印服务 | 9100 | | SNMP Agent | 10161 | | Web 管理界面 | 5000 | ## 使用方法 1. **添加虚拟打印机** — 启动服务后,在 Windows "添加打印机" 中搜索网络打印机,选择 `PrinterSim` 2. **打印测试** — 从任意应用向 PrinterSim 发送打印任务 3. **查看作业** — 在 Web 界面查看接收到的打印任务列表 4. **配置转发** — 在 Web 界面选择目标真实打印机,后续作业将自动转发 5. **设置封面/水印** — 在 Web 界面配置封页、尾页和水印选项 ## API 接口 | 方法 | 路径 | 说明 | |------|------|------| | GET | `/printer` | 获取打印机状态和任务列表 | | POST | `/printer` | 更新墨水/纸张状态 | | GET/POST/DELETE | `/printer/target` | 获取/设置/清除目标打印机 | | GET/POST | `/printer/cover` | 获取/更新封页尾页配置 | | POST | `/printer/cover/upload` | 上传自定义封面/尾页 PDF | | GET/POST | `/printer/watermark` | 获取/更新水印配置 | | POST | `/printer/watermark/upload` | 上传水印图片 | | DELETE | `/printer/watermark/image` | 清除水印图片 | | GET | `/printer/available` | 获取系统可用打印机列表 | | DELETE | `/printer/jobs` | 清除任务列表 | | GET | `/printer/modules` | 获取模块状态 | | POST | `/printer/modules/ipp` | 切换 IPP 模块 | | POST | `/printer/modules/snmp` | 切换 SNMP 模块 | | POST | `/printer/restart` | 重启服务 | ## 配置文件 运行时配置保存在 `config.txt`,格式为 `key = value`: ```ini target_printer = Microsoft Print to PDF has_ink = true has_paper = true cover_mode = none flyleaf_enabled = false end_page_enabled = false ipp_enabled = true snmp_enabled = true watermark_enabled = false watermark_text = CONFIDENTIAL watermark_density = medium watermark_direction = parallel watermark_angle = 45 ``` ## 项目结构 ``` ipp-printer-demo/ ├── index.js # 主服务(IPP + SNMP + Express) ├── package.json ├── config.txt # 运行时配置(自动生成,已 gitignore) ├── patches/ # 依赖补丁 └── public/ ├── index.html # Web 管理界面 ├── printjobs/ # 接收的打印作业(已 gitignore) ├── covers/ # 上传的封面/尾页 PDF └── watermarks/ # 上传的水印图片 ``` ## 技术栈 - [ipp-printer](https://github.com/watson/ipp-printer) — IPP 协议虚拟打印机 - [snmpjs](https://github.com/markabrahams/node-snmpjs) — SNMP Agent - [Express](https://expressjs.com/) — Web 服务与 API - [PDFKit](https://pdfkit.org/) — PDF 封面/水印生成 - [Multer](https://github.com/expressjs/multer) — 文件上传处理 ## License MIT