Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.28;
Скачать: CL | DM;

Вниз

печать на сетевой принтер   Найти похожие ветки 

 
Velzevul ©   (2004-10-08 23:41) [0]

Нашёл в форуме такой код для отправки на принтер управляющих кодов принтера:

Var FileOut : TextFile;
   filename : String [128];
   str1 : string;
begin
 filename:="PRN";
 AssignFile(Fileout,Filename);
 Rewrite(fileout);
 Write(FileOut,Chr(27)+"@");
 Str1:=AnToAs(chr(27)+"код"+"параметр");
 Writeln(FileOut,Str1);
 CloseFile(fileout);
end;

{преобразование Ansi to Ascii}

function AnToAs(s: String) : String;
Var i,kod : Integer;
begin
Result:=s;
for i:=1 to length(s) do
begin
 kod:=Ord(s[i]);
 if  kod < 13 then Result[i]:=" ";
 if ( kod>=192) and ( kod<=239) then
    Result[i]:=Chr(kod-64);
 if ( kod>=240) and ( kod<=255) then
    Result[i]:=Chr(kod-16);
 if kod=168 then  Result[i]:=Chr(240);
 if kod=184 then  Result[i]:=Chr(241);
end;
end;


все работает. А как можно отправить управляющие коды на сетевой принтер? Если в данном коде заменить PRN на "\\194.45.85.115\hp",
где hp это расшаренный принтер на компе 194.45.85.115, то эта конструкция срабатывает. Но на тот-же принтер HP, если он работает через свой принт-сервер конструкция не работает. В настройках принтера видно, что он использует Standart TCP/IP port с номером порта 9100. Да и вообще как можно отправить управляющие коды на сетевой принтер средствами Delphi? у меня есть утилиты для этого, но все весьма корявые и хотелось бы самому решить эту проблему - своими силами. Заранее благодарен.


 
Velzevul ©   (2004-10-09 20:57) [1]

Ну мож всетаки кто подскажет, как средствами Delphi передать текст на сетевой принтер?


 
Velzevul ©   (2004-10-09 20:57) [2]

Ну мож всетаки кто подскажет, как средствами Delphi передать текст на сетевой принтер?


 
tesseract   (2004-10-11 09:37) [3]

Никак. На Какой х они тебе вообще нужны?

Текст ты отправишь не в принтер, а в принт сервер. И он уже будет решать, как там чего тебе позволить/ не позволить.

Можешь попробовать писать напрямую в драйвер ус-ва.
Тогда пройдёт язык поддерживаемый принтером (для HP-
PCL для других другое). Он сам за тебя всё куда надо пошлёт.


 
KSergey ©   (2004-10-11 09:57) [4]

> [3] tesseract   (11.10.04 09:37)
> Никак. На Какой х они тебе вообще нужны?

Э, зачэм такой гавариш, а?

> Velzevul ©   (08.10.04 23:41)

Плюнь на эти AssignFile
Используй StartDocPrinter и т.п.

Сейчас примерчик выложу, если интересно


 
KSergey ©   (2004-10-11 09:59) [5]

К стати, а еще есть PReport, в нем есть визуальный редактор и печать на DOS-принтеры (ну в смысле в режиме использования принтеревского знакогенератора и т.п.). Может есть смысл воспользоваться?


 
KSergey ©   (2004-10-11 10:16) [6]

Идея построения кода потырина из PReport

PrName - имя принтера в системе

procedure ....PrintDOS();

var     DocInfo : DOC_INFO_1;
   h : Cardinal;
   PrinterOpened,DocStarted,PageStarted : boolean;

   // вывести строку
   procedure OutStr (AStr: String);
   var
     BytesWritten : cardinal;
   begin
     AStr := AStr + #13#10;
     WritePrinter (h, PChar(AStr), Length(AStr), BytesWritten);
   end;

   // выкинуть страницу
   procedure EjectPage;
   const
     EJECT_PAGE_CODE: String = #12;
   var
     BytesWritten : cardinal;
   begin
     WritePrinter (h, PChar(EJECT_PAGE_CODE), Length(EJECT_PAGE_CODE), BytesWritten);
   end;

   procedure InitPrinter;
   begin
     // подготовка
     PrinterOpened:=false;
     DocStarted   :=false;
     PageStarted  :=false;

     if not OpenPrinter(PChar(PrName),h,nil) then
       raise Exception.Create (SysErrorMessage(GetLastError ));
     PrinterOpened := TRUE;
     DocInfo.pDocName   := PChar(Application.MainForm.Caption);
     DocInfo.pOutputFile:=nil;
     DocInfo.pDatatype  :="RAW";
     if StartDocPrinter(h,1,@DocInfo)=0 then
       raise Exception.Create (SysErrorMessage(GetLastError ));
     DocStarted := TRUE;
     PageStarted := StartPagePrinter(h);
     if not PageStarted then
       raise Exception.Create (SysErrorMessage(GetLastError ));
   end;

begin
 // пример печати
 try
   InitPrinter;
   OutStr("Строка1 в OEM-кодировке");
   OutStr("Строка2 в OEM-кодировке");
   EjectPage;  // если надо выкинуть страницу из принтера
 finally
   // завершающие действия
   if PageStarted then EndPagePrinter(h);
   if DocStarted then EndDocPrinter(h);
   if PrinterOpened then ClosePrinter(h);
 end;
end;


 
Velzevul ©   (2004-10-11 21:53) [7]

Спасибо KSergey. Пример возьму на заметку - думаю пригодится :). Я ещё нашёл один пример, на котором сделал уже задел, но не проверил - ещё на работе не был ;) Если заработает - сообщу код. Мож кому пригодится.


 
Velzevul ©   (2004-10-14 23:45) [8]

Вот он:

unit Passthru;

interface

uses printers, WinProcs, WinTypes, SysUtils;

procedure PrintPC;

implementation

type
 TPassThroughData = record
   nLen: Integer;
   Data: array[0..255] of byte;
 end;

procedure DirectPrint(s: string);
var
 PTBlock: TPassThroughData;
begin
 PTBlock.nLen := Length(s);
 StrPCopy(@PTBlock.Data, s);
 Escape(printer.handle, PASSTHROUGH, 0, @PTBlock, nil);
end;

procedure PrintPC;
begin
 Printer.BeginDoc;
 DirectPrint("...........................");
 Printer.EndDoc;
end;

end.


 
Velzevul ©   (2004-10-14 23:45) [9]

Вот он:

unit Passthru;

interface

uses printers, WinProcs, WinTypes, SysUtils;

procedure PrintPC;

implementation

type
 TPassThroughData = record
   nLen: Integer;
   Data: array[0..255] of byte;
 end;

procedure DirectPrint(s: string);
var
 PTBlock: TPassThroughData;
begin
 PTBlock.nLen := Length(s);
 StrPCopy(@PTBlock.Data, s);
 Escape(printer.handle, PASSTHROUGH, 0, @PTBlock, nil);
end;

procedure PrintPC;
begin
 Printer.BeginDoc;
 DirectPrint("...........................");
 Printer.EndDoc;
end;

end.


 
Slym   (2004-10-15 05:30) [10]

Загрузка русских шрифтов на сетевой принтер с собственным принт сервером:

Ресурс "files.res":
FNT FONTS "CRR00CPO.SFS"
CP FONTS "DEFAULT.PJL"

program RuFonts;

{$R "files.res" "files.rc"}

uses
 Classes,
 Sockets;

var
 s:TResourceStream;
 TCP:TTcpClient;
begin
 TCP:=TTcpClient.Create(nil);
 try
   TCP.RemoteHost:="192.168.1.10";
   TCP.RemotePort:="9100";
   s:=TResourceStream.Create(0,"FNT","FONTS");
   try
     TCP.Connect;
     TCP.SendStream(s);
     TCP.Disconnect;
   finally
     s.Free;
   end;
   s:=TResourceStream.Create(0,"CP","FONTS");
   try
     TCP.Connect;
     TCP.SendStream(s);
     TCP.Disconnect;
   finally
     s.Free;
   end;
 finally
   TCP.Free;
 end;
end.



Страницы: 1 вся ветка

Текущий архив: 2004.11.28;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.028 c
8-1093720769
clampo
2004-08-28 23:19
2004.11.28
Смена картинок по таймеру


4-1098077456
Submarine
2004-10-18 09:30
2004.11.28
Вопрос о программирование Com- портов


14-1099862469
Soft
2004-11-08 00:21
2004.11.28
Копирайт на сотовые технологии.


1-1100591290
cvg
2004-11-16 10:48
2004.11.28
Как положить TLabel поверх TChart???


14-1100455385
ИМХО
2004-11-14 21:03
2004.11.28
Татьяна Пельтцер