Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Druckerbefehle direkt zum Drucker senden (Generic Text only) (https://www.delphipraxis.net/100838-druckerbefehle-direkt-zum-drucker-senden-generic-text-only.html)

Andidreas 4. Okt 2007 14:51


Druckerbefehle direkt zum Drucker senden (Generic Text only)
 
aloha...

im moment versuch ich ein etikett (label) auf einem cab etiketten drucker auszudrucken...

bis jetzt hab ich das über folgenden befehl gemacht
Code:
print D:\Label.txt /d:lpt1
inzwischen habe aber einen etiketten drucker bekommen der nur noch einen netzwerk anschluss hat (und keinen com anchsluss oder ähnliches hat)...

wie kann ich jetzt mein etikett (die druck befehle für denn etiketten drucker befinden sich in einem txt file) direkt zum drucker schicken???
folgendes hab ich schon probiert (hat aber leider nicht funktioniert!):
Code:
lpr -S 10.32.82.120 -d U:\Programmierung\Labels\Output\SAP_TO_Label.txt
teilweise hab ich im internet schon von einem "generic - text only" treiber gehört... aber wie ich denn anwenden soll, bzw. wie ich mir diesen einrichten kann (auch wo ihn herbekommen --> download) ist mir nicht ganz klar! hier wäre ich für etwas hilfestellung dankbar!!!

Gollum 4. Okt 2007 15:29

Re: Druckerbefehle direkt zum Drucker senden (Generic Text o
 
Hallo,

der "generic - text only" treiber gehört zur Standardausstattung von Windows und ist im Druckerinstallations-Assistent in der Liste der Hersteller unter Standard zu finden.

zum Drucken:
Delphi-Quellcode:
uses
  WinSpool;


resourcestring
  rsNoPrinter='Ducker >%s< nicht gefunden!';


function DoDruckeScript(aScript:TStringList; const aDruckername:String):Bool;
var hPrinter:THandle;
    DocInfo :TDocInfo1;
    i      :Integer;
    bWritten:DWord;
    s      :String;
begin
  Result:=False;
  if not WinSpool.OpenPrinter(PChar(aDruckername), hPrinter, nil) then
    raise Exception.CreateFmt(rsNoPrinter, [aDruckername]);
  try
    with DocInfo do
    begin
      pDocName:='Dokument zum Drucken'; // <-- 
      pOutputFile:=nil;
      pDatatype:='RAW';
    end; // with DocInfo
    if (StartDocPrinter(hPrinter, 1, @DocInfo)=0) then Abort;
    try
      for i:=0 to aScript.Count-1 do
      begin
        s:=aScript.Strings[i];
        Result:=WritePrinter(hPrinter, PChar(s), Length(s), bWritten);
        if not Result then Abort;
      end; // for i
      Result:=True;
    finally
      EndPagePrinter(hPrinter);
    end; // try
  finally
    EndDocPrinter(hPrinter);
    WinSpool.ClosePrinter(hPrinter);
  end; // try
end; // DoDruckeScript
Das obige Beispiel funktioniert mit einem Zebra-Etikettendruckr ohne Probleme.

Jürgen Thomas 4. Okt 2007 15:31

Re: Druckerbefehle direkt zum Drucker senden (Generic Text o
 
Zitat:

Zitat von Andidreas
teilweise hab ich im internet schon von einem "generic - text only" treiber gehört... aber wie ich denn anwenden soll, bzw. wie ich mir diesen einrichten kann (auch wo ihn herbekommen --> download) ist mir nicht ganz klar! hier wäre ich für etwas hilfestellung dankbar!!!

Dieser Druckertreiber ist in Windows standardmäßig integriert, also kein Download erforderlich.

Du bzw. der Netzwerk-Administrator muss an dem betreffenden Arbeitsplatz einen neuen Drucker einrichten (ganz normal mit dem Druckerinstallations-Assistenten) und diesem den Druckertreiber "generic - text only" zuordnen; je nach Win-Version heißt der vielleicht etwas anders, aber das erkennst Du schon.

Anschließend muss dieser Drucker freigegeben werden; danach kann er wie jeder lokale Drucker über die Printer-Klasse angesprochen werden.

Ich hoffe, ich konnte etwas helfen. Jürgen

PS. Nicht schnell genug...

hathor 4. Okt 2007 15:34

Re: Druckerbefehle direkt zum Drucker senden (Generic Text o
 
Statt LPT1: schreibst Du die Netzwerkbezeichnung des Druckers - z.B. Ne00:

Delphi-Quellcode:
Function Get_Printerport(Printername: string): string;
var
  Reg: TRegistry;
  p: Integer;
begin
  Reg := TRegistry.Create;
  with Reg do
  begin
    RootKey := HKEY_CURRENT_USER;
    if OpenKey('\Software\Microsoft\Windows NT\CurrentVersion\Devices\', True) then
    begin
      if ValueExists(Printername) then
      begin // The reg Key value may look like "winspool,LPT1:"
        Result := ReadString(Printername);
        p     := Pos(',', Result);
        Result := Copy(Result, p + 1,Length(Result) - p);
      end;
    end;
    CloseKey;
  end;
end;

procedure TForm1.FormShow(Sender: TObject);
var i:integer;
begin
Memo1.Clear;
ListBox1.Items := Printer.Printers;

for i := 0 to ListBox1.Count - 1 do
begin
   Memo1.Lines.Add(ListBox1.Items.Strings[i]+' : '+ Get_Printerport(ListBox1.Items.Strings[i]));
end;
Memo1.Lines.Add('Active printer is : '+ Printer.Printers[Printer.PrinterIndex]);
Memo1.Lines.Add('Port : '+ Get_Printerport(Printer.Printers[Printer.PrinterIndex]));
Label1.Caption := '';
end;

kalmi01 4. Okt 2007 15:41

Re: Druckerbefehle direkt zum Drucker senden (Generic Text o
 
Oder sprichst den Drucker per FTP an.
Dann kannste, wie bei der LPT1-Lösung die Datei rüber kopieren.

Andidreas 4. Okt 2007 15:53

Re: Druckerbefehle direkt zum Drucker senden (Generic Text o
 
danke schon mal für die antworten...

also ich habe jetzt denn "generic text only" eingerichtet...
soweit so gut...


aber jetzt habe ich 2 verständnisfragen...

wie kann ich jetzt eine komplette txt datei (mit drucker befehlen) an meinen etikettendrucker schicken???

und

woher weiß windows das es jetzt auf dem drucker "xyz" etwas ausdrucken muss???

Progman 4. Okt 2007 16:45

Re: Druckerbefehle direkt zum Drucker senden (Generic Text o
 
in deiner Komponentenpalette unter Dialoge findest du einen TPrintDialog. Den mit aufs Form packen.
Vor dem Druckstart:
Delphi-Quellcode:
if PrintDialog1.execute then begin
  ... //alles drucken
end;
Das hat den Vorteil, man kann auch noch abbrechen. ;)
Aber in dem Dialog kannst du den Drucker einstellen, auf dem gedruckt werden soll.

Andidreas 4. Okt 2007 16:56

Re: Druckerbefehle direkt zum Drucker senden (Generic Text o
 
im moment habe ich aber noch kein programm was die befehle an denn drucker sendet!
ich habe lediglich ein txt file das ich über einen drucker dialog oder über einen befehl (in der befehlseingabe) an denn drucker senden möchte!

aber inzwischen habe ich es herausgefunden wie ich denn "generic text only" drucker einrichten muss das er meinen cab ansteuert...
nämlich über Drucker --> Eigenschaften --> Anschlüsse --> "gewünschter drucker auswählen"

für meine nächste frage werd ich glaub ein neuen thread aufmachen ;-)

Remko 4. Okt 2007 18:23

Re: Druckerbefehle direkt zum Drucker senden (Generic Text o
 
Via the net use command you can redirect an lpt port to a network printer, like this:
Code:
net use lpt2: \\server\printer
. Then you can send your text to lpt2:

Andidreas 5. Okt 2007 07:07

Re: Druckerbefehle direkt zum Drucker senden (Generic Text o
 
@remko... thx for your advice! yesterday recommends an associate of mine the same command, and it works ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz