Announcement

Collapse
No announcement yet.

Drucker im Netzwerk druckt nicht

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

  • Drucker im Netzwerk druckt nicht

    Hallo,

    ich habe eine Delphi-Anwendung (D7) und drucke mit den üblichen Anweisungen von Printer.BeginDoc bis Printer.EndDoc. Nun klagt ein Anwender, dass sich seine sämtlichen Netzwerkdrucker nicht einsetzen lassen. Es stellte sich heraus, dass bei allen Druckern, die über einen Virtual Port (TCP/IP) angesprochen werden, der Druckauftrag zwar zum Drucker gesendet wird, aber unmittelbar wieder gelöscht. Keiner konnte sich das so richtig erklären. Vollends bizarr wurde es, als im Wiederholungstest von 29 Druckaufträgen einer gedruckt wurde (und zwar weder der erste noch der letzte) und alle anderen nicht.

    Kann es sein, dass Delphi ein Problem mit Virtual Ports hat? Bei lokalen Druckern funktioniert's. Außerdem sind nur Duplexdrucker betroffen, ich weiß aber nicht, ob das ursächlich was mit dem Problem zu tun hat. Oder hat jemand eine andere Idee, was dahinterstecken könnte?

    Gruß,

    Stefan

  • #2
    Hallo Stefan,
    .
    was setzt ihr ein? Quickreport? Dann würde mich das nicht wundern.
    .
    mfg
    Michae

    Comment


    • #3
      Nein, ich drucke noch selbst :-) Ich starte ein Dokument mit Printer.BeginDoc und "male" dann meine Daten auf Printer.Canvas, starte ggf. eine neue Seite (Printer.NewPage), und irgendwann bin ich halt fertig (Printer.EndDoc). Keine Report Tools, keine Fremdkomponenten, keine Tricks.

      Stefa

      Comment


      • #4
        Falls StrechDraw verwendet wird, die Zeilen testhalber mal auskommentieren

        Comment


        • #5
          Nein, das ist nicht der Fall

          Comment


          • #6
            Falls das Problem noch aktuell ist:

            1. Kommt die Testseite (Start / Einstellungen / Drucker / Eigenschaften) richtig an ?

            2. Probleme mit Netzwerkdruckern hatte ich bisher z.B. mit dem "HP Standard TCP/IP Port". Hier gab es auch recht dubiose Ergebnisse (geht, geht nicht ...). Seitdem setze ich ausschließlich den MS Standard TCP/IP Port ein, seitdem gibt es keine Probleme mehr

            Comment


            • #7
              Welchen Drucker der Kunde?

              Wir haben ein Konika-Minolta-Kombigeräte welche auch bei sehr kurzen Druckaufträgen (auch aus Word) diese einfach wegwirft.

              Also würde ich eher mal auf eine der vielen Druckerfehler tippen die vermutlich nur bei deiner Art der Ansteuerung auftreten. Aber das wird deinem Kunden leider nicht helfen..

              Comment


              • #8
                Hallo Siegfried,

                1. laut Kunde kommt - außer meiner Anwendung - alles korrekt an.

                2. Das ist ein Tipp. Und damit kann man auch HP-Drucker ganz normal ansteuern?

                Hallo Bernhard,

                laut Kunde tritt das Problem mit mehreren Fabrikaten auf, miterlebt habe ich es bei HP. Allerdings sind meine Druckaufträge nicht sonderlich kurz.

                Stefa

                Comment


                • #9
                  Hi,

                  besser spät als nie....

                  Beispiel wie man druckt:
                  Code:
                  unit uFunctions;
                  
                  interface
                  
                  uses
                    printers,
                  
                  procedure PrintSomething(const aPrinterName:string);
                  
                  implementation
                  
                  procedure PrintSomething(const aPrinterName:string);
                  var
                    idx: integer;
                  begin
                    idx := Printers.Printer.Printers.IndexOf(aPrinterName);
                    if (idx = -1) then
                    begin
                      // Der Printername existiert nicht!
                      MessageBox(0, PChar(
                         'Printername ' + aPrinterName + ' exisitiert nicht!'#13#10 +
                         'Diese Printernamen sind möglich:'#13#10 +
                         Printers.Printer.Printers.Text), 'Fehler!', 0);
                      exit;
                    end;
                    Printers.Printer.PrinterIndex := idx;
                    // Printer session öffnen
                    Printers.Printer.BeginDoc();
                    // Seite 1
                    Printers.Printer.Canvas.TextOut(50, 50, 'Seite1');
                    // Seite 2
                    Printers.Printer.NewPage();
                    Printers.Printer.Canvas.TextOut(50, 50, 'Seite2');
                    // Seite 3
                    Printers.Printer.NewPage();
                    Printers.Printer.Canvas.TextOut(50, 50, 'Seite3');
                    // Printer session schliessen
                    Printers.Printer.EndDoc();
                  end;
                  
                  end.
                  Das geht auch problemlos mit Netzwerkdrukkern die einen eigenen Printserver integeriert haben.

                  Wichtig ist hierbei Printers.Printer.PrinterIndex := idx;, da die Printers unit einen Fehler enthält und mit *.EndDoc() den DC des Druckers nicht freigiebt. Das führt mit Netzwerkdruckern regelmässig zu Problemen (speziell HP).
                  Wird jedoch Printers.Printer.PrinterIndex := idx; oder auch einfach Printers.Printer.PrinterIndex := Printers.Printer.PrinterIndex; vor *.BeginDoc(); ausgeführt ist das DC Handle freigegeben und alles geht ohne Probleme.

                  Hoffe das hilft euch weiter.

                  Gruss

                  O.

                  Comment

                  Working...
                  X