Mehrere Dokumente hinereinander drucken

Von Ausgaben mit der Gra-Engine über Generatoren bis zum Export in diversen Formaten

Moderator: Moderatoren

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

aber über so kann man die Namen der installierten Drucker abfragen:

Code: Alles auswählen

function PrinterList()
    local oPRN := XbpPrinter():new()
return oPRN:list() 
Wichtig, kein Create() nötig !
Gruß
Hubert
notloesung
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 194
Registriert: Fr, 24. Feb 2006 8:09
Kontaktdaten:

Beitrag von notloesung »

Martin Altmann hat geschrieben:das geht wunderbar mit der PrinterAPI, die Du auf der Seite von Phil Ide findest.
Hallo Ihr,

dank eurer Hilfestellung bin ich einen großen Schritt weiter gekommen.
Das Setzen des Standarddruckers funktioniert.

Aber es währe zu schön wenn alles reibungslos verlaufen würde.
Nächstes Problem:
Vor dem Drucken ermittle ich den Standarddrucke und setze ihn ggf. so wie ich es brauche. Hatte der User vorher einen anderen Drucker als Standard definiert, so setze ich diesen nachdem ich meinen Druck abgeschickt habe.
Das ganze geht aber zu schnell. D.h. ich muss irgendwie rausbekommen ab der Drucker noch druckt. Erst danach wider den alten Standarddrucker setzen.
Ich versuche mit :printerStatus() den Status des Druckers zu bekommen. Leider ist der Rückgabewert immer derselbe 1 (XBPPRN_STATUS_READY), unabhängig davon ob der Drucker druckt oder nicht.
Wie kann ich den der Status ermitteln dass der Drucker "gerade Druckt"?

Einfach nur ein wenig warten, bevor ich den alten Standarddrucker setze ist nicht "drin". Schließlich kann ich nie wissen wie lange der Druck tatsächlich dauert.

Gruß und mit Dank im Voraus,
Notloesung
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Jarek,
der Drucker ist ready, da ja unter Windows der Spooler benutzt wird - und der ist (so gut wie) immer bereit.
Abgesehen davon ist es doch völlig egal! Sobald Du alle Druckauträge abgeschickt hast, liegen die doch vollständig im Spoolbereich des spezifischen Druckers. Wenn Du dann den Standarddrucker änderst, tut das doch niemandem weh!
Oder verstehe ich da was falsch?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Hi Martin,
das sehe ich auch so. Das Setzten eines anderen Standard-Druckers ist auch möglich, wenn der aktuelle Standard-Drucker einen Druckjob ausführt.

Gruß, Olaf
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

sein Problem dürfte sein, dass z.B. Acrobat Reader noch im Laden ist, während der Drucker schon wieder zurück auf den alten gesetzt wurde.

Dir hilft hier nur die runshell funktion, die kann man nämlich so aufrufen, dass das Xbase++ Programm wartet, bis das andere beendet wurde ... bleibt nur zu hoffen, dass der Aufruf mit /T ... von oben Acrobat danach auch wieder beendet, das weiß ich nämlich auch nicht.

Ansonsten musst du im Programm tatsächlich 5-6 Sekunden (?) warten, bis der Reader oben ist und den Druckauftrag gestartet hat. Sobald dies geschehen ist, kann man den Standard zurücksetzen wie schon berichtet wurde. Den Zeitwert muss man ausprobieren und am besten dann verdoppeln.
Gruß
Hubert
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Im Übrigen kann das auch auch leicht an einigen hier geposteten Beispielen von ActiveX in Zusammenhang mit Word nachvollzogen werden. Für den Ausdruck kann vorübergehend ein anderer Drucker gesetzt werden. Nachdem die Methode "Drucken" abgesetzt wird, läßt sich anschließend der orginäre Standard-Drucker wieder setzen. Und dies unabhängig davon, ob der Druck bereits läuft oder nicht.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

meine Erfahrungen mit dem Beispielprogramm von Alaska (ActiveX mit Acrobat) sind nicht berauschend. Die Ladezeiten beim ersten mal sind bescheiden. Danach nicht sicher. Wenn man gleichzeitig mehrere PDFs drucken möchte, kann es sich dennoch rentieren.

Aber ohne Active X mit runshell und /T Parameter braucht man den Standarddrucker doch gar nicht zu ändern, das ist die sicherste Methode.
Die kann man dann auch asyncron starten... eventuell ginge das auch mit Olavs code, wenn man statt PRINT PRINTTO wählen und die Drucker als parameter übergeben würde. Muss man halt probieren wie das geht.
Gruß
Hubert
Antworten