C# 如何从.NET核心Web API服务器docker容器向网络CUPS/Raspberry Pi打印服务器发送标签打印作业?
我目前完成的工作:C# 如何从.NET核心Web API服务器docker容器向网络CUPS/Raspberry Pi打印服务器发送标签打印作业?,c#,docker,asp.net-core,printing,raspberry-pi,C#,Docker,Asp.net Core,Printing,Raspberry Pi,我目前完成的工作: 安装一个带罩杯的覆盆子Pi,插入Dymo Labelwriter 450 已跟踪此链接:。如果我通过家庭网络上的Windows安装网络打印机,这在我的本地计算机(Windows)上可以正常工作并打印 通过系统.Drawing.printing从.NET Core本地成功打印打印作业。这主要是为了测试。这是当USB标签打印机直接插入我的机器时 从docker容器运行.NETCore(3.1)WebAPI服务器。(安装在Ubuntu服务器上)。FWIW它是单独docker容器中
- 安装一个带罩杯的覆盆子Pi,插入Dymo Labelwriter 450
- 已跟踪此链接:。如果我通过家庭网络上的Windows安装网络打印机,这在我的本地计算机(Windows)上可以正常工作并打印
- 通过
从.NET Core本地成功打印打印作业。这主要是为了测试。这是当USB标签打印机直接插入我的机器时系统.Drawing.printing
- 从docker容器运行.NETCore(3.1)WebAPI服务器。(安装在Ubuntu服务器上)。FWIW它是单独docker容器中的VueJs前端
我也希望它是不可知的从打印机。因此,我需要担心的唯一配置或设置是在CUPS中安装打印机 我目前正在研究:
- 打印机语言,如ZPL、EPL。这似乎不允许打印机不可知论
- IPP(互联网打印协议)。这似乎是一个很大的学习曲线,我找不到任何使用.NET核心的东西。也不确定这是否实现了目标。(如有任何建议,不胜感激)
- 一些付费第三方解决方案:。但我不确定这是否能实现目标,因为它似乎利用了已安装打印机的列表
- 因为这将允许我通过配置或硬编码值从代码控制打印机
通过本地网络将打印作业发送到Raspberry Pi CUPS服务器的最佳方式是什么,而无需在您的机器(即docker容器)上安装打印机?。这是我目前的解决方案:
- 我首先尝试让docker容器使用USB端口。我将此标签打印机插入服务器,并能够与
命令上的docker run
标志共享USB端口。我努力将打印机“安装”到正在运行的docker容器上,而不切换其基本映像。所以我放弃了这个想法。我不喜欢这个主意,因为我被迫把打印机放在服务器机架旁边--priviledge
ipptool
- 我不得不在Dockerfile中添加一些安装步骤,以使我的映像能够使用IPP工具。我包括了一些额外/多余的库,因为有些库帮助我从容器中进行调试。我在
文件夹中做了所有额外的工作,以避免添加到我的主应用程序中/setup
//set whatever ip
var cmd = $"ipptool -vt -f {filepath} ipp://192.168.XXX.XXX:631/printers/DYMO_LabelWriter_450 printjob.ipp";
var result= cmd.Bash();
printjob.ipp的内容
{
OPERATION Print-Job
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
ATTR language attributes-natural-language en
ATTR uri printer-uri $uri
FILE $filename
}
我对这个解决方案不是非常满意。它打印标签的速度并不惊人,但确实有效。我希望将来能尝试在.NET中实现ipp解决方案,这样我就不必保存到文件并运行shell命令。适用于在此登陆的任何人。这是我目前的解决方案:
- 我首先尝试让docker容器使用USB端口。我将此标签打印机插入服务器,并能够与
命令上的docker run
标志共享USB端口。我努力将打印机“安装”到正在运行的docker容器上,而不切换其基本映像。所以我放弃了这个想法。我不喜欢这个主意,因为我被迫把打印机放在服务器机架旁边--priviledge
ipptool
- 我不得不在Dockerfile中添加一些安装步骤,以使我的映像能够使用IPP工具。我包括了一些额外/多余的库,因为有些库帮助我从容器中进行调试。我在
文件夹中做了所有额外的工作,以避免添加到我的主应用程序中/setup
//set whatever ip
var cmd = $"ipptool -vt -f {filepath} ipp://192.168.XXX.XXX:631/printers/DYMO_LabelWriter_450 printjob.ipp";
var result= cmd.Bash();
{
OPERATION Print-Job
GROUP operation-attributes-tag
ATTR charset attributes-charset utf-8
ATTR language attributes-natural-language en
ATTR uri printer-uri $uri
FILE $filename
}