本帖最后由 诗仙·1957 于 2023-7-7 15:53 编辑
运行这个机器人写的exe
如图,每次运行都会读取exe当前目录的sql.ini配置文件,里面配置了数据库的链接信息,以及打印机表,打印任务表的名称
然后查询当前运行的系统已经添加的全部打印机包含smb共享的打印机,并编号为pr001-pr100的编码规则添加到数据库的打印机表。
然后每隔10秒查询打印任务表的行中 字段打印状态,如果是否就执行打印,打印后修改这个状态为是。
执行打印任务的方式为,该行字段有
然后活字格页面手机上点击 就直接对数据库操作就能实现打印了,活字格页面上执行导出pdf 把该文件存放到服务器的文件夹就可以了。
此方式可以保留页面的格式布局等好处,无需重新布局排版。简约风格。
用途,在制造业中,工人不可能每次需要打印页面的东西都需要到电脑上去点打印选择打印机这样的繁琐操作,有了这个功能之后,页面就可以直接手机打印,现场的打印机就自动打印出来了,无需给打印机配置电脑,打印机需要连接网络就行了。目前市场上的打印机很多插网线的都很便宜了。还有的支持WIFI
最近有项目在论坛大势的推销,收费的插件,让我等白嫖档......嗤之以鼻..
需要的留邮箱,我将免费分享c# 源代码。
2023-07-07更新:
由于之前的代码只是为了实现打印,并没有考虑各种异常情况,在这段时间,不停的根据自己的需求更新了代码, 实现了ping检测打印机的IP地址,读取配置文件也增加了打印机的IP地址配置
如下:
数据库的表也增加了一个运行日志表,用来观察这个exe运行的情况,又时候假死你都不知道,用nssm吧这个exe注册成windows服务后,就可以开机自动运行。
代码中:
static async Task Main(string[] args)
{
// 从配置文件读取数据库连接信息和表名称
LoadConfig();
// 清空打印机表并添加本地打印机到数据库
ClearAndAddPrintersToDatabase();
// 创建定时器,设置间隔为20秒
System.Timers.Timer timer = new System.Timers.Timer(600000);
timer.Elapsed += TimerElapsed;
timer.Start();
// 异步执行每10秒查询打印状态的方法
while (true)
{
Console.WriteLine("正在查询数据库中打印状态...");
CheckPrintStatus();
await Task.Delay(10000);
}
} 这里采用了异步2个定时器同时执行,上面的600000毫秒用来每10分钟写一次数据库,这样如果有记录表示程序还是正常的,活字格搞个定期清空数据表就行了。
2. 当时没有考虑打印机是否打印出文件,但是客户手机点击了打印,就在打印机面前一直等,有时候各种因素导致打印机打不出来,客户也不知道具体情况就很烦。
于是增加了判断机制,
分别检测你文件是否存在,打印机ping不ping得通,并更新状态为对应的值。
还额外添加了一个post请求到活字格的服务端命令,由于集成的是钉钉,所以这个服务端命令就根据Post请求传过来的ID查数据库通知到对应的人的钉钉消息。如下图
代码示例:
string query = $"UPDATE `{dayinrenwuTable}` SET 打印状态='{status}' WHERE ID={taskId}";
connection.Execute(query);
// 向指定API地址发送post请求
using (var client = new HttpClient())
{
var url = "https://192.168.10.xxx/ServerCommand/printreturn";
var parameters = new Dictionary<string, string>
{
{ "printTaskID", taskId.ToString() }
};
var content = new FormUrlEncodedContent(parameters);
content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
// 设置忽略证书验证
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;
var response = client.PostAsync(url, content).Result;
// 输出发送post请求的过程信息到控制台
Console.WriteLine("开始POST请求...");
// 检查响应状态码
if (response.IsSuccessStatusCode)
{
// 请求成功
Console.WriteLine("Post 请求成功.");
}
else
{
// 请求失败
Console.WriteLine($"请求失败. Status code: {response.StatusCode}");
}
}
特别注意:c#向https服务发送请求,需要忽略证书,反正我这是内网使用。
相当于处理一个任务,会修改数据库的打印状态值,然后POST给活字格告诉状态,然后回写日志。
日志记录大概如下:
这新版本,更新后就更好处理这些异常情况。各位可以根据自己的需求更改更适合自己。
需要新版本的老铁,向我的邮箱344043074@qq.com发送主题为打印服务,我将在空闲时候回复你邮件。包含源代码及配套文件
|