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

Распечатать файл через порт принтера

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

Распечатать файл через порт принтера

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch


 procedure TForm1.Button1Click(Sender: TObject);
 var
   port, prnfile: file;
   buffer: array [1..128] of Char;
   Read: Integer;
 begin
   // Specify a file to print 
  AssignFile(prnfile, 'filetoprint');
   Reset(prnfile, 1);
   // specify printer port 
  AssignFile(port, 'LPT1');
   Rewrite(port, 1);
   repeat
     BlockRead(prnfile, buffer, SizeOf(buffer), Read);
     BlockWrite(port, buffer, Read);
     // Application.ProcessMessages; 
  until EOF(prnfile) or (Read <> SizeOf(buffer));
   CloseFile(prnfile);
   CloseFile(port);
 end;

Код, который вы предоставили, - это процедура Delphi, которая печатает содержимое файла на принтер, подключенный к порту LPT1. Вот разбивка того, что код делает:

Инициализация

  • Определен обработчик события кнопки Button1Click.
  • Декларированы два файловых переменных: port и prnfile.
  • Создан массив символов buffer размером в 128 элементов для хранения данных из файла.

Ассигнменты файлов

  • Файл prnfile ассигнирован для чтения из указанного файла 'filetoprint'. Это файл должен быть в том же каталоге, что и ваш исполняемый файл, или предоставить полный путь.
  • Файл port ассигнирован для записи на принтерный порт LPT1. Это предполагает, что у вас есть принтер, подключенный к LPT1.

Петля печати

  • Петля repeat читает данные из файла prnfile с помощью BlockRead, хранит их в buffer и записывает в файл port с помощью BlockWrite.
  • Вызывается функция ProcessMessages для позволения другим компонентам на форме обрабатывать свои сообщения. Это не необходимо в этом конкретном коде, но это хорошая практика включать.
  • Петля продолжается до конца файла (EOF( prnfile )) или когда количество байтов, прочитанных (Read), меньше размера buffer.

Закрытие файлов

  • Наконец, оба файла закрываются с помощью CloseFile, чтобы освободить системные ресурсы.

Этот код работает, но имеет некоторые ограничения:

  1. Порты LPT: Порты LPT - это старая технология и могут не поддерживаться на современных системах.
  2. Размер буфера: Размер буфера фиксирован в 128 символов. Это может привести к проблемам, если файл содержит длинные строки или специальные символы, требующие больше места.

Рекомендуется использовать современную библиотеку печати или API,such as TPrintDialog из стандартных компонентов Delphi, которая предоставляет более гибкость и совместимость с различными системами принтеров.

Вот альтернативное решение:

uses
  Windows, Printers;

procedure TForm1.Button1Click(Sender: TObject);
var
  prnfile: TextFile;
  Printer: TPrinter;
begin
   // Откройте файл для печати
  AssignFile(prnfile, 'filetoprint');
  Reset(prnfile);

   // Создайте объект принтера
  Printer := TPrinter.Create;

  try
     // Установите порт принтера
    Printer.Port := 'LPT1';

     // Печатайте файл
    while not Eof(prnfile) do
    begin
      Readln(prnfile, Buffer);
      Printer.PrintLn(Buffer);
    end;
  finally
     // Закройте файл и объект принтера
    CloseFile(prnfile);
    FreeAndNil(Printer);
  end;
end;

В этом альтернативном решении:

  1. Мы используем TextFile для чтения из файла.
  2. Мы создаем экземпляр TPrinter для обработки печати.
  3. Мы устанавливаем порт принтера с помощью свойства Port.
  4. Мы печатаем файл строка за строкой с помощью PrintLn.
  5. Мы закрываем файл и объект принтера в блоке finally.

Этот код более современный, гибкий и легко поддерживаемый, чем оригинальный код.

Программа на Delphi для печати файла через портал принтера LPT1.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 15:17:50/0.0034210681915283/0