Добрый день. Подскажите, столкнулся с такой проблемой, программно из выборки отправляю печать на 2 принтера. 1 - конверт с адресом, 2 - письмо.
Выборка выдает не менее 1000 лиц. Каждая запись (конверт + письмо) отправляю на печать отдельно через цикл. Печать идет через FastReport 5.1.5 + Delphi XE7.
В данный момент по руками 2 тестовых принтера CANON6020 и CANON6030. Какие будут в дальнейшем, не знаю.
Данные пробовал вывести таким образом:
function GetCurrentPrinterInformation: TPrinterInfo;
var
hPrinter : THandle;
pInfo: PPrinterInfo2;
bytesNeeded: DWORD;
begin
hprinter := GetCurrentPrinterHandle;
try
Winspool.GetPrinter( hPrinter, 2, Nil, 0, @bytesNeeded );
pInfo := AllocMem( bytesNeeded );
try
Winspool.GetPrinter( hPrinter, 2, pInfo, bytesNeeded, @bytesNeeded );
Result.SeverName := pInfo^.pServerName;
Result.PrinterName := pInfo^.pPrinterName;
Result.ShareName := pInfo^.pShareName;
Result.PortName := pInfo^.pPortName;
Result.DriverName := pInfo^.pDriverName;
Result.Comment := pInfo^.pComment;
Result.Location := pInfo^.pLocation;
Result.SepFile := pInfo^.pSepFile;
Result.PrintProcessor := pInfo^.pPrintProcessor;
Result.DataType := pInfo^.pDatatype;
Result.Parameters := pInfo^.pParameters;
Result.SecurityDescriptor := pInfo^.pSecurityDescriptor;
Result.Attributes := pInfo^.Attributes;
Result.DefaultPriority := pInfo^.DefaultPriority;
Result.StartTime := pInfo^.StartTime;
Result.UntilTime := pInfo^.UntilTime;
Result.Status := pInfo^.Status;
Result.Jobs := pInfo^.cJobs;
Result.AveragePPM := pInfo^.AveragePPM;
finally
FreeMem( pInfo );
end;
finally
ClosePrinter( hPrinter );
end;
end;
Экспериментируя с печатью пришел к выводу что STATUS = 0 всегда что не приятно. Но меняется JOBS.
Но затем вылезла вторая проблема, принтер 6020 печатает как положено из общей очереди на печать, и я могу увидеть есть накопление JOBS или нет. Но второй принтер 6030 из общей очереди забирает в свою и в случае отсутствия бумаги у меня всегда в основной очереди JOBS=0. Каким образом можно отловить ошибку принтера, что он не напечатал ?