头盔程序员 2024-02-28 16:25 采纳率: 41.2%
浏览 4
已结题

可以通过IP地址访问到共享打印机,如何通过c#代码搭建一个打印服务

可以通过IP地址访问到共享打印机,需求:如何通过c#代码搭建一个打印服务?其他计算机可以使用这个打印服务指定打印机进行远程打印

img

  • 写回答

3条回答 默认 最新

  • Kwan的解忧杂货铺 Java领域优质创作者 2024-02-28 16:30
    关注

    头盔程序员 下午好🌅🌅🌅
    本答案参考通义千问

    要在C#中搭建一个打印服务,允许其他计算机通过IP地址指定共享打印机进行远程打印,你需要实现一个网络打印服务。以下是一些关键步骤和代码示例:

    1. 添加所需NuGet包:

      • 首先,确保你的项目引用了System.PrintingSystem.Printing.PrintQueue库,这提供了与Windows打印系统的交互。如果尚未安装,可以在NuGet管理器中搜索并安装System.Printing
    2. 创建打印队列对象: 在C#中,你可以使用PrintQueue类来代表打印机。创建一个实例,指向你要共享的打印机:

    using System.Printing;
    
    string sharedPrinterName = "172.30.201.200\\打印机名称"; // 替换为实际打印机的共享名
    PrintQueue queue = new PrintQueue(sharedPrinterName);
    
    1. 设置打印服务: 创建一个PrintService类来处理打印请求:
    using System.IO.Ports;
    using System.Threading.Tasks;
    
    public class PrintService
    {
        private PrintQueue _queue;
    
        public PrintService(string printerName)
        {
            _queue = new PrintQueue(printerName);
        }
    
        public async Task PrintDocumentAsync(byte[] documentData, string documentName)
        {
            using (FileStream printStream = new FileStream(documentName, FileMode.Create))
            {
                await _queue.PrintDocumentAsync(new MemoryStream(documentData), documentName);
            }
        }
    }
    
    1. 接收并处理打印请求: 在服务器端,你可以创建一个HTTP服务(例如使用ASP.NET Core)来接收打印请求。这里是一个简单的HTTP控制器示例:
    using Microsoft.AspNetCore.Mvc;
    using System.IO;
    
    [ApiController]
    [Route("[controller]")]
    public class PrintController : ControllerBase
    {
        private PrintService _printService;
    
        public PrintController(PrintService printService)
        {
            _printService = printService;
        }
    
        [HttpPost("print")]
        public async Task<IActionResult> Print([FromBody] PrintRequest request)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
    
            try
            {
                await _printService.PrintDocumentAsync(request.DocumentData, request.DocumentName);
                return Ok();
            }
            catch (Exception ex)
            {
                return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
            }
        }
    }
    
    public class PrintRequest
    {
        public byte[] DocumentData { get; set; }
        public string DocumentName { get; set; }
    }
    
    1. 部署服务: 将上述代码部署到一台服务器上,并确保防火墙允许外部连接到该端口。配置Web服务器以监听特定端口,例如80或443。

    这样,你就可以通过C#代码搭建一个简单的打印服务,其他计算机可以通过HTTP POST请求指定IP地址和共享打印机名称进行远程打印。客户端需要发送包含要打印文档数据的PrintRequest对象。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月8日
  • 已采纳回答 2月29日
  • 创建了问题 2月28日

悬赏问题

  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?