Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Печать через спулер на матричный принтер

Delphi , ОС и Железо , Принтеры и Печать

Печать через спулер на матричный принтер

Автор: Оргиш Александр

Печатаю через спулер на матричный принтер текст таким образом :


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) then
  begin
    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 - это компонент операционной системы, который управляет процессом печати, храня временно принт-джобы перед отправкой их в принтер.

Вот разбивка того, что код делает:

  1. Он инициализирует несколько переменных:
  2. FDevice: указатель на строку символов, которая будет содержать имя устройства (принтера).
  3. FPort: указатель на строку символов, которая будет содержать порт, к которому подключен принтер.
  4. FDriver: указатель на строку символов, которая будет содержать имя драйвера принтера.
  5. FPrinterHandle: целочисленное значение, представляющее handle для принтера.
  6. FDeviceMode: целочисленное значение, представляющее устройство режим (0 = неизвестно).
  7. FJob: указатель на структуру PADDJOBINFO1, которая содержит информацию о принт-джобе.
  8. Stream: объект TFileStream, используемый для хранения данных печати.

  9. Он использует функцию GetPrinter из Windows API, чтобы получить имя устройства, драйвера, порта и устройство режим принтера.

  10. Если устройство режим неизвестен (0), он вызывает GetPrinter снова, чтобы получить правильный устройство режим.

  11. Он открывает принтер с помощью функции OpenPrinter и получает handle для него.

  12. Он создает принт-джоб с помощью функции AddJob и хранит информацию о нем в структуре FJob.

  13. Он создает потоковый файл (Stream) из пути принт-джоба и пишет текст в него, включая ESC команды (используемые некоторыми принтерами для управления печаткой).

  14. Он планирует принт-джоб с помощью функции ScheduleJob, которая отправляет его на принтер.

  15. Наконец, он освобождает память, выделенную для переменных с помощью функции FreeMem.

Код является старомодным, и в современных компиляторах Паскаль вы бы использовали более современные функции и классы для достижения этой задачи.

В статье описывается способ печати текста на матричный принтер через спулер в программном коде Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Принтеры и Печать ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 02:48:40/0.0032320022583008/0