Печатаю через спулер на матричный принтер текст таким образом :
var
pcbNeeded: DWORD;
FDevice: PChar;
FPort: PChar;
FDriver: PChar;
FPrinterHandle: THandle;
FDeviceMode: THandle;
FJob: PADDJOBINFO1;
Stream: TFileStream;
begin
GetMem(FDevice, 128);
GetMem(FDriver, 128);
GetMem(FPort, 128);
Printer.GetPrinter(FDevice, FDriver, FPort, FDeviceMode);
if FDeviceMode = 0 then
Printer.GetPrinter(FDevice, FDriver, FPort, FDeviceMode);
if OpenPrinter(FDevice, FPrinterHandle, nil) thenbegin
GetMem(FJob, 1024);
//Добавляем задание, получаем имя файла в директории windows\spoool\
AddJob(FPrinterHandle, 1, FJob, 1024, pcbNeeded);
Stream := TFileStream.Create(FJob.Path, fmCreate);
// Дальше пишем текст (+ESC команды!!!!) прямо в Stream// и не забываем переводить в DOS - кодировку
.........
Stream.Free;
//Постановка задания в очередь - только теперь принтер начинает печатать
ScheduleJob(FPrinterHandle, FJob.JobID);
FreeMem(FJob);
ClosePrinter(FPrinterHandle);
end;
FreeMem(FDevice, 128);
FreeMem(FDriver, 128);
FreeMem(FPort, 128);
end;
Программный код, предоставленный вами, написан на языке Паскаль и используется для печати текста с помощью спooler на матричном принтере. Спooler - это компонент операционной системы, который управляет процессом печати, храня временно принт-джобы перед отправкой их в принтер.
Вот разбивка того, что код делает:
Он инициализирует несколько переменных:
FDevice: указатель на строку символов, которая будет содержать имя устройства (принтера).
FPort: указатель на строку символов, которая будет содержать порт, к которому подключен принтер.
FDriver: указатель на строку символов, которая будет содержать имя драйвера принтера.
FPrinterHandle: целочисленное значение, представляющее handle для принтера.
FDeviceMode: целочисленное значение, представляющее устройство режим (0 = неизвестно).
FJob: указатель на структуру PADDJOBINFO1, которая содержит информацию о принт-джобе.
Stream: объект TFileStream, используемый для хранения данных печати.
Он использует функцию GetPrinter из Windows API, чтобы получить имя устройства, драйвера, порта и устройство режим принтера.
Если устройство режим неизвестен (0), он вызывает GetPrinter снова, чтобы получить правильный устройство режим.
Он открывает принтер с помощью функции OpenPrinter и получает handle для него.
Он создает принт-джоб с помощью функции AddJob и хранит информацию о нем в структуре FJob.
Он создает потоковый файл (Stream) из пути принт-джоба и пишет текст в него, включая ESC команды (используемые некоторыми принтерами для управления печаткой).
Он планирует принт-джоб с помощью функции ScheduleJob, которая отправляет его на принтер.
Наконец, он освобождает память, выделенную для переменных с помощью функции FreeMem.
Код является старомодным, и в современных компиляторах Паскаль вы бы использовали более современные функции и классы для достижения этой задачи.
В статье описывается способ печати текста на матричный принтер через спулер в программном коде Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.