我最近将自动打印的打印代码更改为基于TPrinter的解决方案。 (旧的解决方案,直接将文本写入打印机网络设备多年来都没有错误地工作。)
该应用程序使用Delphi 2009 Enterprise编写,并在用户会话(不作为服务)中持续运行。应用程序会定期扫描数据库中的新文档,创建要打印的文本,然后将其发送到打印机。
在打印之前,代码设置打印机索引:
PrinterToUse := Printer.Printers.IndexOf(MyPrinterName);
if PrinterToUse > -1 then
begin
Printer.PrinterIndex := PrinterToUse;
end
else
begin
Assert(False, Format('Printer %s not found', [MyPrinterName]));
end;
MyPrinterName可以是例如\\PRINTSERVER\PR001
。对于我的测试阶段,我使用一个本地安装的打印机和新的打印方法,因此打印机名称始终相同。
在随机间隔中,打印失败,出现EPrinter异常“打印机选择无效”。
如果发生此异常,则打印文档失败 - 我添加了一种解决方法,在发生这种情况时使用“遗留”打印方法。
我怀疑VCL打印机单元中可能存在错误。在Quality Central中,我发现只有一个相关条目 - http://qc.embarcadero.com/wc/qcmain.aspx?d=127390。我可以尝试更新的Delphi版本,如果问题仍然存在,则可能是打印机驱动程序问题。更新打印机驱动程序也是一个选项,我必须尝试。
我还将改进错误处理,并在发生错误时重新尝试打印一次或两次。
此随机错误是否有其他经验并且有解决方案吗?