You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# System.Printing打印任务状态原因排查、Deleted状态分析及打印机耗材检测咨询

C# System.Printing打印任务状态原因排查、Deleted状态分析及打印机耗材检测咨询

你好!针对你遇到的打印任务总是显示PrintJobStatus.Deleted的问题,以及想检测打印机纸张和墨水的需求,我来帮你逐一分析:

一、PrintJobStatus.Deleted 状态的原因分析及排查建议

1. 代码中PDF文件处理方式错误(最可能的原因)

我注意到你的代码里直接用File.ReadAllText(filePath)读取PDF文件内容,然后转成Unicode字节流写入打印任务流——但PDF是二进制格式,不是纯文本文件!这种方式会把PDF的二进制数据当成乱码文本读取,写入打印流后,打印机无法识别无效的打印数据,会直接丢弃这个任务,所以状态会变成Deleted。

正确的做法应该是读取PDF的二进制字节,而不是文本:

// 替换原有的文本读取和写入逻辑
byte[] pdfBytes = File.ReadAllBytes(filePath);
Stream myStream = myPrintJob.JobStream;
myStream.Write(pdfBytes, 0, pdfBytes.Length);
myStream.Close();

2. 打印任务被快速清理的其他可能原因

  • 打印机驱动兼容性问题:如果打印机驱动不支持你提交的打印格式,可能会自动删除无效任务。可以尝试更新打印机驱动,或者换用系统自带的通用驱动测试。
  • 打印队列自动清理设置:部分打印机或系统会自动删除已完成/无效的任务,你可以打开系统的「打印队列」,查看任务是否真的被提交后立即被清理。
  • 代码中状态检查时机过早:你在写入流后立即调用CheckPrintJobStatus,此时打印任务可能还没来得及被打印机处理,状态还没更新。可以尝试添加短暂延迟后再刷新状态:
// 写入流后延迟1-2秒再检查
System.Threading.Thread.Sleep(1000);
printJob.Refresh();
CheckPrintJobStatus(myPrintJob);

二、如何检测打印机的纸张与耗材状态

使用System.Printing命名空间的API,可以通过PrintQueue对象获取打印机的硬件状态,包括纸张、墨水/碳粉情况:

1. 检测纸张状态

可以通过PrintQueue的PrinterState属性判断是否缺纸,或者检查队列的状态标志:

// 获取默认打印队列
PrintQueue defaultPrintQueue = LocalPrintServer.GetDefaultPrintQueue();
defaultPrintQueue.Refresh();

// 检查是否缺纸
if ((defaultPrintQueue.PrinterState & PrinterState.PaperOut) != 0)
{
    Console.WriteLine("打印机缺纸!");
}
// 检查是否有纸张可用
if (!defaultPrintQueue.IsPaperAvailable)
{
    Console.WriteLine("打印机无可用纸张!");
}

2. 检测墨水/碳粉状态

对于支持耗材状态报告的打印机,可以通过PrintQueue的GetPrintSystemAttributes获取耗材信息,或者检查PrinterState中的低墨标志:

// 检查是否低墨/碳粉
if ((defaultPrintQueue.PrinterState & PrinterState.TonerLow) != 0)
{
    Console.WriteLine("打印机墨水/碳粉不足!");
}

// 更详细的耗材信息(部分打印机支持)
foreach (PrintSystemAttribute attr in defaultPrintQueue.GetPrintSystemAttributes())
{
    if (attr is TonerLevel tonerLevel)
    {
        Console.WriteLine($"碳粉剩余量:{tonerLevel.Value}%");
    }
    else if (attr is PaperLevel paperLevel)
    {
        Console.WriteLine($"纸张剩余量:{paperLevel.Value}张");
    }
}

注意:并非所有打印机都支持详细的耗材状态报告,这取决于打印机硬件和驱动是否提供该API支持。如果上述方法无法获取,可能需要使用打印机厂商提供的专用SDK来查询。

备注:内容来源于stack exchange,提问作者NIB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 02:55:28