Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.037 c
1-1100276695
Stype
2004-11-12 19:24
2004.11.28
Копирование файла


1-1100517283
den_777
2004-11-15 14:14
2004.11.28
Ограничение RICHEDIT на длину текста


14-1100275754
ppt
2004-11-12 19:09
2004.11.28
EasyRecovery


3-1099197241
ali_t
2004-10-31 07:34
2004.11.28
размер колонок в TDBGrid


9-1090983230
SwitchBlade
2004-07-28 06:53
2004.11.28
Как сделать так, чтобы башня танка была направлена на курсор





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский