Печать файлов с помощью TProcessUTF8

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
yuray
новенький
Сообщения: 95
Зарегистрирован: 22.05.2008 14:19:19
Откуда: Ровно, Украина

Печать файлов с помощью TProcessUTF8

Сообщение yuray »

Нужно печатать чеки из программы, которая работает на RedHat Linux. Принтер подключен к COM-порту. Драйверов под линукс нет. Принтер откликается на команду

Код: Выделить всё

cut -b0- check.txt > /dev/ttyS0

Использую TProcessUTF8

Код: Выделить всё

  TheProcess := TProcessUTF8.Create(nil);
  try
    TheProcess.Options := [poUsePipes, poNoConsole, poStdErrToOutput];
    TheProcess.ShowWindow := swoNone;
    TheProcess.CommandLine:='cut -b0- check.txt > /dev/ttyS0';
    try
      TheProcess.Execute;
      TheProcess.WaitOnExit;
      if TheProcess.ExitStatus <> 0 then
      begin
        MessageDlg('Error', 'Check print error', mtError,[mbCancel],0);
      end;
    finally
      TheProcess.Free;
    end;
  except
    on E: Exception do
    begin
        ShowMessage(e.Message);
    end;
  end;

Запускал прогу из-под root и простого пользователя - ошибка 'Check print error'. Простое копирование 'cp check.txt check2.txt' работает, а 'cat check.txt > check2.txt' нет. Подозреваю, что вся проблема с ">" и sudo.

Вопрос. Как мне напечатать файл? Возможно есть другие способы работы с таким принтером?
Спасибо.

lazarus 0.9.27 r17945 gtk2
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Открывай COM порт и пиши туда содержимое файла сам!
yuray
новенький
Сообщения: 95
Зарегистрирован: 22.05.2008 14:19:19
Откуда: Ровно, Украина

Сообщение yuray »

Mr.Smart писал(а):Открывай COM порт и пиши туда содержимое файла сам!


А по подробнее можно? Никогда не работал с СОМ.
Разве это не то?

Код: Выделить всё

cut -b0- check.txt > /dev/ttyS0
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

yuray писал(а):Разве это не то?

Код: Выделить всё

cut -b0- check.txt > /dev/ttyS0

Нет это не то. Это пересылка файла на устройство средствами терминала!
Посмотрите компоненты synaser, а вообще на форуме что-то было об этом.

можно так

Код: Выделить всё

var
 t: Text;
begin
  AssignFile(t,'/dev/ttyS0');
  Rewrite(t);
  Write(t,'Текст');
  CloseFile(t);
end;


Пред этем дайте права на запись в устройство /dev/ttyS0 для текущего пользователя. Либо запускайте программу от имени root
Аватара пользователя
grigoreo
постоялец
Сообщения: 195
Зарегистрирован: 10.03.2009 14:43:43
Откуда: С нашей Раши

Сообщение grigoreo »

yuray писал(а):
Mr.Smart писал(а):Открывай COM порт и пиши туда содержимое файла сам!


А по подробнее можно? Никогда не работал с СОМ.
Разве это не то?

Код: Выделить всё

cut -b0- check.txt > /dev/ttyS0


куда уж подробнее Smart итак полный пример тебе кинул (только обязательно права не зубудь юзверю дать на запись в этот файл)
C Любым устройством можно работать как аля с файлом через хендлы, по анологии как с файлами открываешь хендл пишешь туда закрываешь хендл то что ты показываешь сам то работа через компонент который эти 3 действия делает за тебя, там дето баг поэтому сделай всю работу сам и будет тебе счастье ))
yuray
новенький
Сообщения: 95
Зарегистрирован: 22.05.2008 14:19:19
Откуда: Ровно, Украина

Сообщение yuray »

grigoreo писал(а):куда уж подробнее Smart итак полный пример тебе кинул

Так кинул только после того как я попросил. :)

2 Mr.Smart & grigoreo
Спасибо. Теперь понятно.
Ответить