Announcement

Collapse
No announcement yet.

Drucken von PRN Dateien

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Drucken von PRN Dateien

    Hallo, <p>

    Problem: PRN-Datei drucken. Gibt es unter Win32 mit Delphi eine Möglichkeit, wie in der alten DOS Zeit direkt auf einen (virtuellen Netzwerk-) Druckerport zu schreiben? Oder TPrinter mit einer binären PRN-Datei zu füttern? <p>Gebraucht würde das als Ersatz für den DOS Befehl <b>copy /B output.prn lpt2 </b>. Ist sowas machbar? AssignPrn funktioniert nur bei mit Text-Dateien, nicht jedoch mit binären PRN Dateien.

    Schon mal vielen Dank

    Timo Göbel

  • #2
    Hallo,<br>
    derzeit stehe ich vor dem gleiche Problem.<br>
    Mir wurde gesagt, daß bei den 32-Bit Druckertreibern dir Nummer nicht übertragen werden kann!? <br>
    Derzeit teste ich Async Professional von Turbopower. Dies funktioniert. Man muß sich nur um alles selber kümmern.<br>

    Horst-Peter Esse

    Comment


    • #3
      Schreib den Befehl "copy /B output.prn lpt2" in eine Batchdatei, und ruf diese via ShellExecute oder WinExec auf, oder schreib "copy /B %1 %2", dann kannst Du Datei und Drucker zur Laufzeit angeben
      Günther

      Comment


      • #4
        Hallo, Versuche es mit folgender Function.

        Procedure grzgSpoolFileEx(Filename:String);
        Var TP,TH:THandle;
        Buffer:Array[0..512] Of Char;
        TA:TAddJobInfo1A absolute Buffer;
        LWORD;
        dev,
        Driv,
        Port:Array[0..127] Of Char;

        Begin
        L:=0;
        Ta.Path:=#0;
        Ta.JobId:=0;
        tp:=0;
        Dev:=#0;
        Driv:=#0;
        Port:=#0;
        If OpenPrinter(Dev,tp,NIL) Then
        Begin
        Getprinter(tp,2,@Pi1,l1,@L);
        If AddJob(tp,1,@Ta,512,L) Then
        Begin
        ScheduleJob(tp,Ta.JobId);
        end;
        ClosePrinter(tp);
        end;
        end;
        end;

        Dabei ist Filename die Datei mit den entsprechenden
        Drucksteuerzeichen, also eine Binäre.

        Dirk Graf [email protected]

        Comment


        • #5
          Nur so als Kommentar zu dieser Lösung, falls das ein anderer liest. Diese Lösung funktioniert nur bei einem lokal installiertem Drucker! Wenn man einen Netzwerkdrucker ansteuern will funktioniert diese Lösung leider nicht.

          Ich kann aber keinen Ausweg vorschlagen, da ich selber auf der Suche einer Lösung fürs Netz bin :-(

          Comment


          • #6
            Hi,

            copy kann mehr "copy /b abcd.prn \\server\druckername".
            Man muss von dem gewünschten Drucker den Pfad auslesen und dann copy
            laufen lassen.

            Damit müsste es gehen.

            cu
            Helmu

            Comment


            • #7
              hallo,

              ich habe das gleiche problem, aber ersteinmal eins vorweg: unter http://www.hemasoft.de/dev/idlpr/ gibt es eine lpr komponente mit der man direkt auf den drucker bzw. printserver drucken kann (tcp/ip). das mit der ausgabe auf lpt1 habe ich mir so gedacht:

              <pre>
              procedure TForm1.Button1Click(Sender: TObject);
              const length= 128;
              var port,prnfile : File;
              buffer: array [1..128] of Char;
              read: Integer;
              begin
              assignfile(prnfile,'c:\autoexec.bat');
              reset(prnfile);
              assignfile(port,'LPT1');
              rewrite(port);
              while not read &lt;&gt; length do begin
              BlockRead(prnfile,buffer,length,read);
              BlockWrite(port,buffer,read);
              end;
              CloseFile(prnfile);
              CloseFile(port);
              end;
              </pre>
              <br>
              leider bekomme ich einen E/A 87 fehler... irgendwelche ideen

              Comment


              • #8
                lösung gefunden:

                <pre>
                procedure TForm1.Button1Click(Sender: TObject);
                var port,prnfile : File;
                buffer: array [1..128] of Char;
                read: Integer;
                begin
                assignfile(prnfile,'c:\9120.pcl');
                reset(prnfile,1);
                assignfile(port,'LPT1');
                rewrite(port,1);
                repeat
                BlockRead(prnfile,buffer,sizeof(buffer),read);
                BlockWrite(port,buffer,read);
                application.processmessages;
                until eof(prnfile) or (read &lt;&gt; sizeof(buffer));
                CloseFile(prnfile);
                CloseFile(port);
                end;
                </pre&gt

                Comment

                Working...
                X