печать в тесктовом режиме.
Модератор: Модераторы
- bloodlines
- постоялец
- Сообщения: 100
- Зарегистрирован: 05.11.2008 10:26:19
печать в тесктовом режиме.
Доброго времени суток. Собственно интересует вопрос. Как в лазарусе организовать печать в тестовом режиме? Просто на предприятии печатаются всякие документы и отчёты на матричном принтере, подключенном к компу через LPT. В принципе так же интересует вопрос - как распечатать txt файл не прибегая к помощи LazReport (и др. генераторов отчётов)? Можно ли средствами lazarus распечатать txt файл напрямую на матричный принтер?
Re: печать в тесктовом режиме.
Открываете LPT порт как обычный файл и пишете в него данные.
Re: печать в тесктовом режиме.
Mr.Smart писал(а):Открываете LPT порт как обычный файл и пишете в него данные.
можно небольшой крос-платформенный примерчик?
на delphi такое делал через winAPI...
Re: печать в тесктовом режиме.
то есть как winapi?
уже не катит?
В Linux будет что-то вроде
Смотря как принтер подмонтирован
Код: Выделить всё
var
mylpt:TextFile;
begin
AssignFile(mylpt,'LPT');
writeln(mylpt,'hello');
уже не катит?
В Linux будет что-то вроде
Код: Выделить всё
AssignFile(mylpt,'/prn');
Смотря как принтер подмонтирован
Re: печать в тесктовом режиме.
Timid писал(а):то есть как winapi?
это так
Код: Выделить всё
...
if
OpenPrinter
(
PWideChar(szPrinter),
ph,
Nil
)
then
begin
New(pdi);
with pdi^ do
begin
pDocName := PWideChar(ExtractFileName(FFilePatch));
pOutputFile := nil;
pDatatype := PWideChar('RAW');
end;
PrJob := StartDocPrinter(ph, 1, pdi);
StartPagePrinter(ph);
WritePrinter(ph, Pointer(szValue), Length(szValue), pcWritten);
EndPagePrinter(ph);
EndDocPrinter(ph);
ClosePrinter(ph);
FreeMem(pdi);
end;
и так далее...
Добавлено спустя 26 минут 18 секунд:
модуль Printers кросплатформенен?
Re: печать в тесктовом режиме.
alaken
А зачем так извращаться? Если просто нужно вывести текс на принтер?
А зачем так извращаться? Если просто нужно вывести текс на принтер?
Re: печать в тесктовом режиме.
Mr.Smart писал(а):alaken
А зачем так извращаться? Если просто нужно вывести текс на принтер?
Этот код из Delphi проекта в котором нужно печатать на сетевой матричный принтер, и чтобы задания становились в очередь.
а так в целом согласен, если просто вывести файл на принтер нужно использовать более простой код.
Re: печать в тесктовом режиме.
ага, что-то вродеalaken писал(а):если просто вывести файл на принтер нужно использовать более простой код
Код: Выделить всё
var FPRN:TextFile;
function OpenLPT(PortN: Integer): Boolean;
var
prn: String;
begin
if PortN=0 then
{$IFDEF WINDOWS}
prn := 'PRN'
else
prn := 'LPT'+IntToStr(PortN)+':';
{$ELSE}
{$IFDEF UNIX}
prn := '/dev/lp0'
else
prn := '/dev/lp'+IntToStr(PortN-1);
{$ELSE}
{$ERROR Unsupported OS}
{$ENDIF}
{$ENDIF}
AssignFile(FPRN,prn);
{$I-}
Rewrite(FPRN);
{$I+}
Result := (IOResult = 0);
end;
procedure Print(s: String);
begin
{ uses lconvencoding;}
Write(FPRN, UTF8ToCP866(s));
end;
procedure PrintLn(s: String);
begin
Print(s + #13#10);
end;
procedure CloseLPT;
begin
CloseFile(FPRN);
end;
begin
if OpenLPT(1) then
begin
PrintLn('Проверка печати');
PrintLn('---------------');
CloseLPT;
end;
end;Re: печать в тесктовом режиме.
v-t-l
Спасибо за пример.
А как быть с стетевым матричным принтером?
Спасибо за пример.
А как быть с стетевым матричным принтером?
Re: печать в тесктовом режиме.
Боюсь что если он сетевой, хоть и матричный, то для вывода нужны драйвера.
Кстати, он должен как-то определяться в сети - подключен к удаленному компьютеру, или есть свой IP - подключен прямо в сеть?
Кстати, он должен как-то определяться в сети - подключен к удаленному компьютеру, или есть свой IP - подключен прямо в сеть?
Re: печать в тесктовом режиме.
Принтер подключен к серверу (OS win2k), IP сервера известен, в клиентской системе (OS winXP) этот принтер установлен как сетевой, так как на сервере это разрешено.
На Delphi я просто открывал сетевой порт, и писал в него (пример я приводил в топике), все отлично работает. Хочу теперь перевести программу на Lazarus, пример от v-t-l приведенный выше не предназначен для данной задачи...
На Delphi я просто открывал сетевой порт, и писал в него (пример я приводил в топике), все отлично работает. Хочу теперь перевести программу на Lazarus, пример от v-t-l приведенный выше не предназначен для данной задачи...
Re: печать в тесктовом режиме.
alaken писал(а):пример от v-t-l приведенный выше не предназначен для данной задачи...
Ну почему же. Если выполнить на клиентской машине команду
Код: Выделить всё
net use LPT1: \\win2k\epsonRe: печать в тесктовом режиме.
хм, но почему то не работает
Код: Выделить всё
AssignFile(FPRN,prn);
Rewrite(FPRN);
Result := (IOResult = 0); всегда выдает false
Re: печать в тесктовом режиме.
alaken писал(а):хм, но почему то не работаетКод: Выделить всё
AssignFile(FPRN,prn);
Rewrite(FPRN);
Result := (IOResult = 0); всегда выдает false
Код: Выделить всё
{$I-} // а где это?
Rewrite(FPRN);
{$I+} // и это?Добавлено спустя 11 минут 34 секунды:
http://www.freepascal.org/docs-html/prog/progsu36.html
http://www.freepascal.org/docs-html/rtl/system/ioresult.html
Re: печать в тесктовом режиме.
в коде все есть я в посте убрал чтоб не громоздится
Добавлено спустя 28 минут 23 секунды:
забавно, IOResult равен 0 (по крайней мере так показывает ShowMessage(IntToStr(IOResult)))
но функция OpenLPT возвращает false
принудительная отправка на печать без проверки выдат File not open...
Добавлено спустя 28 минут 23 секунды:
забавно, IOResult равен 0 (по крайней мере так показывает ShowMessage(IntToStr(IOResult)))
но функция OpenLPT возвращает false
принудительная отправка на печать без проверки выдат File not open...
Код: Выделить всё
OpenLPT(1)
PrintLn('Проверка печати');
PrintLn('---------------');
CloseLPT; 