# share-print **Repository Path**: lliaoliao/share-print ## Basic Information - **Project Name**: share-print - **Description**: 软件名称:共享打印机SERVER 软件说明:共享本地打印机为一个webserver 可供可访问本地计算机的浏览器客户端访问打印,当本程序运行在某一台设备上时自动搜索出当前设备上所链接的打印机下拉列表,并在本程序的页面上操作上可选定某一个打印机然后点击开始按钮,开启web服务,其他同局域网内的的可以访问此机器提供的web服务并可进行文件的打印操作。 - **Primary Language**: Go - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 1 - **Created**: 2026-01-14 - **Last Updated**: 2026-02-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 共享打印机服务器 (Share Print Server) 一个基于Go语言和Fyne框架开发的跨平台共享打印机服务器程序。允许局域网内的其他设备通过Web浏览器访问并打印文件。 ## 📋 目录 - [功能特性](#功能特性) - [系统要求](#系统要求) - [安装步骤](#安装步骤) - [操作手册](#操作手册) - [跨平台支持](#跨平台支持) - [技术栈](#技术栈) - [文件结构](#文件结构) - [开发者信息](#开发者信息) - [常见问题](#常见问题) - [许可证](#许可证) ## ✨ 功能特性 ### 核心功能 - ✅ **自动搜索打印机** - 启动时自动检测并列出系统中所有可用的打印机 - ✅ **图形化界面** - 简洁美观的中文界面,使用自定义字体(仿宋) - ✅ **打印机选择** - 从下拉菜单中轻松选择要使用的打印机 - ✅ **端口自定义** - 支持自定义Web服务端口(1-65535),默认8080 - ✅ **Web打印服务** - 启动HTTP服务器,提供Web打印接口 - ✅ **多格式支持** - 支持打印PDF、图片(JPG/PNG)、文本(TXT)、Word文档(DOC/DOCX)等格式 - ✅ **实时状态显示** - 显示服务运行状态和访问地址 ### 界面功能 - ✅ **系统托盘** - 支持最小化到系统托盘,后台运行 - ✅ **托盘菜单** - 托盘图标右键菜单:显示窗口、关于、退出 - ✅ **菜单栏** - 顶部菜单栏提供帮助和关于功能 - ✅ **关于对话框** - 显示软件信息、开发者联系方式 ### 跨平台特性 - ✅ **Windows支持** - 使用PowerShell和COM对象进行打印 - ✅ **Linux支持** - 使用lpstat和lp命令进行打印 - ✅ **macOS支持** - 使用lpstat和lp命令进行打印 - ✅ **UTF-8编码** - 全平台UTF-8支持,正确处理中文文件名和内容 ## 💻 系统要求 ### 必需环境 - **Go语言**: 1.21 或更高版本 - **操作系统**: Windows 7+ / Linux / macOS 10.12+ - **打印机**: 已安装并配置好的打印机(系统可见) ### 推荐配置 - 内存: 512MB 以上 - 磁盘空间: 50MB 以上 - 网络: 局域网连接 ## 📦 安装步骤 ### 1. 安装Go语言环境 访问 [Go官网](https://golang.org/dl/) 下载并安装Go语言。 验证安装: ```bash go version ``` ### 2. 配置Go代理(可选,推荐国内用户) **Windows PowerShell:** ```powershell $env:GOPROXY="https://goproxy.cn,direct" ``` **Linux/macOS:** ```bash export GOPROXY=https://goproxy.cn,direct ``` 更多代理配置方法请参考 `setup.md` 文件。 ### 3. 下载项目 ```bash git clone cd share-print ``` 或直接下载源代码压缩包并解压。 ### 4. 安装依赖 ```bash go mod tidy go mod download ``` ### 5. 编译程序 **Windows:** ```bash go build -o share-print.exe ``` **Linux:** ```bash go build -o share-print ``` **macOS:** ```bash go build -o share-print ``` ### 6. 运行程序 **Windows:** ```bash .\share-print.exe ``` **Linux/macOS:** ```bash ./share-print ``` 或直接运行源代码: ```bash go run main.go ``` ## 📖 操作手册 ### 一、首次启动 1. **启动程序** - 双击运行可执行文件,或使用命令行运行 - 程序会自动搜索系统中的打印机 2. **查看打印机列表** - 如果找到打印机,会在"选择打印机"下拉菜单中显示 - 如果未找到打印机,会显示"未找到打印机" 3. **选择打印机** - 点击"选择打印机"下拉菜单 - 选择要使用的打印机 - 程序会自动保存选择 ### 二、配置服务 1. **设置端口** - 在"端口设置"输入框中输入端口号(默认8080) - 端口范围:1-65535 - 只能输入数字,其他字符会被自动过滤 - 如果端口无效,会显示错误提示 2. **启动服务** - 确保已选择打印机 - 点击"启动服务"按钮 - 服务启动后,按钮文字变为"停止服务" - 端口输入框会被禁用(防止修改) 3. **查看服务状态** - "服务状态"区域会显示: - 状态:服务运行中... / 服务已停止 - 访问地址:http://192.168.x.x:8080(服务运行时显示) ### 三、使用Web打印服务 1. **获取访问地址** - 服务启动后,在"服务状态"区域查看访问地址 - 格式:`http://[IP地址]:[端口]` - 例如:`http://192.168.1.100:8080` 2. **访问Web界面** - 在同一局域网内的其他设备上打开浏览器 - 输入访问地址 - 会看到美观的打印界面 3. **上传文件打印** - 点击"选择要打印的文件"按钮或拖拽文件到上传区域 - 支持的文件格式: - PDF文件(.pdf) - 图片文件(.jpg, .jpeg, .png) - 文本文件(.txt, .log) - Word文档(.doc, .docx) - 选择文件后可以预览(图片、PDF、文本) - 配置打印选项(可选): - 打印份数(1-99) - 纸张大小(A4、Letter、Legal、A3、A5) - 打印方向(纵向、横向) - 打印颜色(彩色、黑白) - 双面打印 - 点击"开始打印"按钮 - 等待打印完成提示 4. **停止服务** - 点击"停止服务"按钮 - 服务停止后,端口输入框恢复可用 - 访问地址会消失 ### 四、系统托盘功能 1. **最小化到托盘** - 点击窗口关闭按钮(×) - 窗口会隐藏到系统托盘 - 托盘图标会显示在系统托盘区域 2. **托盘菜单操作** - 右键点击托盘图标 - 菜单选项: - **显示窗口** - 恢复主窗口显示 - **关于** - 打开关于对话框 - **退出** - 退出程序 3. **恢复窗口** - 方法1:右键托盘图标 → 选择"显示窗口" - 方法2:双击托盘图标(部分系统支持) ### 五、菜单栏功能 1. **帮助菜单** - 点击窗口顶部的"帮助"菜单 - 选择"关于"打开关于对话框 2. **关于对话框** - 显示软件图标 - 显示软件名称:共享打印机服务器 - 显示开发者信息:lliaoliao@126.com - 显示版本信息:版本 1.0 - 点击"确定"关闭对话框 ### 六、常见操作场景 #### 场景1:首次使用 1. 启动程序 2. 选择打印机 3. 使用默认端口8080(或自定义) 4. 点击"启动服务" 5. 记录显示的访问地址 6. 在其他设备浏览器中访问该地址 #### 场景2:更换打印机 1. 如果服务正在运行,先点击"停止服务" 2. 在"选择打印机"下拉菜单中选择新打印机 3. 点击"启动服务" #### 场景3:更换端口 1. 如果服务正在运行,先点击"停止服务" 2. 在"端口设置"中输入新端口号 3. 点击"启动服务" #### 场景4:后台运行 1. 启动服务后,点击窗口关闭按钮 2. 程序会最小化到系统托盘 3. 需要时右键托盘图标恢复窗口 ## 🌐 跨平台支持 ### Windows平台 - **打印机检测**: 使用PowerShell `Get-Printer` 命令 - **打印功能**: - PDF/图片:使用 `Start-Process -Verb PrintTo` - 文本:使用 `Out-Printer` - Word文档:使用Word COM对象 - **IP获取**: 使用 `ipconfig` 命令 - **托盘图标**: 支持系统托盘 ### Linux平台 - **打印机检测**: 使用 `lpstat -p` 命令 - **打印功能**: 使用 `lp -d [打印机名] [文件路径]` - **IP获取**: 使用 `hostname -I` 命令 - **托盘图标**: 支持系统托盘(需要桌面环境) ### macOS平台 - **打印机检测**: 使用 `lpstat -p` 命令 - **打印功能**: 使用 `lp -d [打印机名] [文件路径]` - **IP获取**: 使用 `ifconfig` 命令解析 - **托盘图标**: 支持系统托盘(菜单栏) ### 编码支持 - 所有平台统一使用UTF-8编码 - 正确处理中文文件名和内容 - 环境变量:`LANG=en_US.UTF-8`, `LC_ALL=en_US.UTF-8` ## 🛠 技术栈 - **开发语言**: Go 1.21+ - **GUI框架**: Fyne v2.4.3 - **Web服务器**: Go标准库 net/http - **系统托盘**: fyne.io/systray v1.12.0 - **字体**: 自定义仿宋字体(simfang.ttf) ## 📁 文件结构 ``` share-print/ ├── main.go # 主程序文件 ├── icon_data.go # 图标和字体嵌入文件 ├── go.mod # Go模块依赖文件 ├── go.sum # 依赖校验文件 ├── icon.png # 程序图标文件 ├── simfang.ttf # 仿宋字体文件 ├── README.md # 本说明文档 ├── setup.md # 安装配置说明 ├── requier.md # 需求说明文档 ├── internal/ │ ├── printer/ │ │ └── printer.go # 打印机操作模块 │ ├── server/ │ │ ├── server.go # Web服务器模块 │ │ └── template.go # Web页面模板 │ └── utils/ │ └── network.go # 网络工具模块 └── share-print.exe # 编译后的可执行文件(Windows) ``` ## 👨‍💻 开发者信息 - **开发者**: lliaoliao - **邮箱**: lliaoliao@126.com - **版本**: 1.0 ## ❓ 常见问题 ### Q1: 找不到打印机? **A:** - 确保打印机已正确安装并在系统中可见 - Windows: 检查"设备和打印机"中是否有打印机 - Linux: 运行 `lpstat -p` 命令检查 - macOS: 检查"系统偏好设置" → "打印机与扫描仪" ### Q2: 无法访问Web服务? **A:** - 检查防火墙设置,确保端口已开放 - Windows: 在防火墙中允许程序通过 - Linux: 使用 `sudo ufw allow 8080` 开放端口 - macOS: 在"系统偏好设置" → "安全性与隐私"中允许 - 确保所有设备在同一局域网内 - 检查IP地址是否正确 ### Q3: 打印失败? **A:** - 检查打印机是否在线 - 检查打印机是否有纸张和墨水/碳粉 - 检查文件格式是否支持 - 检查是否有打印权限 - 查看程序日志输出获取详细错误信息 ### Q4: 托盘图标不显示? **A:** - Windows: 确保 `icon.png` 文件存在或使用嵌入图标 - Linux: 确保运行在桌面环境中(如GNOME、KDE) - macOS: 图标会显示在菜单栏右侧 ### Q5: 中文显示乱码? **A:** - 程序已内置UTF-8编码支持 - 如果仍有问题,检查系统区域设置 - 确保字体文件 `simfang.ttf` 存在 ### Q6: 端口被占用? **A:** - 更换其他端口号(如8081、8082等) - 检查是否有其他程序占用该端口 - Windows: 使用 `netstat -ano | findstr :8080` 查看 - Linux/macOS: 使用 `lsof -i :8080` 查看 ### Q7: 如何卸载? **A:** - 直接删除程序文件和文件夹即可 - 无需额外的卸载步骤 - 不会在系统中留下注册表或配置文件 ## 📄 许可证 本项目为个人学习项目,可自由使用和修改。 --- **最后更新**: 2024年 **软件版本**: 1.0