Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Massendruck von PDF's via Access

152 views
Skip to first unread message

Rutt

unread,
Aug 18, 2011, 3:14:58 AM8/18/11
to
Hallo NG'ler,

habe wiedermal ein seltsames "Problem".

Ich möchte mehrer PDF-Dokumente nacheinander via Access (VBA)
ausdrucken.
Dafür nutze ich einen Shell-Befehl. Nur wenn die Dokumente nachher aus
dem Drucker rauskommen stimmt die Reihenfolge nicht mehr. Hier ein
Beispiel:

...
ShellExecute(Application.hWndAccessApp, "Print", "PDF1.pdf", "", "C:
\", SW_SHOWNORMAL)
ShellExecute(Application.hWndAccessApp, "Print", "PDF2.pdf", "", "C:
\", SW_SHOWNORMAL)
ShellExecute(Application.hWndAccessApp, "Print", "PDF3.pdf", "", "C:
\", SW_SHOWNORMAL)
ShellExecute(Application.hWndAccessApp, "Print", "PDF4.pdf", "", "C:
\", SW_SHOWNORMAL)
ShellExecute(Application.hWndAccessApp, "Print", "PDF5.pdf", "", "C:
\", SW_SHOWNORMAL)
...

Wie zufällig könnte der Drucker die Dokumente in folgender Reihenfolge
ausdrucken:
PDF2.pdf, PDF5.pdf, PDF1.pdf, PDF2.pdf, PDF3.pdf

Eine Reihenfolgenlogik sehe ich nicht. Könnte es sein, dass das an der
Größe der Dateien liegt? Einige sind vielleicht schneller zum Druck
"aufbereitet" als andere.

Was kann ich tun, damit ich nicht am Drucker erst mal alles sortieren
muss :(

Viele Grüße

Holger

Stefan Wirrer

unread,
Aug 18, 2011, 4:40:08 AM8/18/11
to
Rutt schreibselte:

> Ich möchte mehrer PDF-Dokumente nacheinander via Access (VBA)
> ausdrucken.
> Dafür nutze ich einen Shell-Befehl. Nur wenn die Dokumente nachher aus
> dem Drucker rauskommen stimmt die Reihenfolge nicht mehr. Hier ein
> Beispiel:
> ...
> ShellExecute(Application.hWndAccessApp, "Print", "PDF1.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ShellExecute(Application.hWndAccessApp, "Print", "PDF2.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ShellExecute(Application.hWndAccessApp, "Print", "PDF3.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ShellExecute(Application.hWndAccessApp, "Print", "PDF4.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ShellExecute(Application.hWndAccessApp, "Print", "PDF5.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ...
>
> Wie zufällig könnte der Drucker die Dokumente in folgender Reihenfolge
> ausdrucken:
> PDF2.pdf, PDF5.pdf, PDF1.pdf, PDF2.pdf, PDF3.pdf
>
> Eine Reihenfolgenlogik sehe ich nicht. Könnte es sein, dass das an der
> Größe der Dateien liegt? Einige sind vielleicht schneller zum Druck
> "aufbereitet" als andere.
könnte sein. Du brauchst dir ja nur die Größe der Dateien anschauen.

> Was kann ich tun, damit ich nicht am Drucker erst mal alles sortieren
> muss :(

du kannst nach jedem ShellExecute eine Pause/Warteschleife einlegen.
Komfortabel wäre eine solche Pause in Abhängigkeit von der Dateigröße,
falls diese die Ursache der Reihenfolge ist.

--
Gruß
aus München

Stefan

Stefan...@volke-muc.de
---------------------------------------------------------------------
Access-FAQ: http://www.donkarl.com/AccessFAQ.htm
KnowHow-MDB: http://www.freeaccess.de/
Infos für Neulinge in den Access-Newsgroups:
http://www.doerbandt.de/access/Newbie.htm
Stammtisch: http://www.access-muenchen.de/


Rutt

unread,
Aug 18, 2011, 5:29:12 AM8/18/11
to
Hallo Stefan,

danke für Deine Antwort.

Mit der Warteschleife ist das so eine Sache. Wir haben
unterschiedliche Client-PC's (ältere, jüngere, schnelle und langsame,
etc.). Dafür, damit es für alle passt, müsste man wirklich
experimentieren.
Habe mir mal angeschaut, ob man die Druckerwarteschlange auslesen kann
- puh - sieht sehr kompliziert aus und ob das zuverlässig ist???
Sprich, erst dann einen Druckauftrag anzustossen, wenn der Spooler
leer ist bzw. als leer zurückgemeldet wird.

Viele Grüße aus Köln.

Holger

Stefan Wirrer

unread,
Aug 18, 2011, 6:04:03 AM8/18/11
to
Hallo Holger,

Rutt schreibselte:


> Mit der Warteschleife ist das so eine Sache. Wir haben
> unterschiedliche Client-PC's (ältere, jüngere, schnelle und langsame,
> etc.). Dafür, damit es für alle passt, müsste man wirklich
> experimentieren.

Für einen kurzen Test sollte ein langsamer und ein schneller Client
ausreichend
sein. Falls das überhaupt relevant ist. Evtl. liegt's ja am Druckerserver
oder
am Drucker selbst.

> Habe mir mal angeschaut, ob man die Druckerwarteschlange auslesen kann
> - puh - sieht sehr kompliziert aus und ob das zuverlässig ist???
> Sprich, erst dann einen Druckauftrag anzustossen, wenn der Spooler
> leer ist bzw. als leer zurückgemeldet wird.

Wenn da zufällig ein anderer auf diesen Drucker druckt, dann kannst du
evtl. lange warten.

Sonnige Grüße aus München
Stefan


Peter Doering

unread,
Aug 18, 2011, 7:00:44 AM8/18/11
to
Hallo,

Rutt wrote:

> ...
> ShellExecute(Application.hWndAccessApp, "Print", "PDF1.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ShellExecute(Application.hWndAccessApp, "Print", "PDF2.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ShellExecute(Application.hWndAccessApp, "Print", "PDF3.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ShellExecute(Application.hWndAccessApp, "Print", "PDF4.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ShellExecute(Application.hWndAccessApp, "Print", "PDF5.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ...

> Was kann ich tun, damit ich nicht am Drucker erst mal alles sortieren
> muss :(

ShellExecute schickt einen neuen Prozess auf die Reise und kuemmert sich
nicht darum, wie lange er braucht und ob/wann er endet. Wenn der 2. Prozess
vor dem ersten fertig ist, voila: Job 2 wird vor Job 1 gedruckt.

Verwende stattdessen ShellWait. Vorteil ist, dass ein Job erst vollstaendig
an den Drucker geschickt wird, bevor der naechste anlaeuft, Nachteil, dass
der Aufruf die komplette Druckausgabezeit dauert.

http://access.mvps.org/access/api/api0004.htm

Gruss - Peter

--
Mitglied im http://www.dbdev.org
FAQ: http://www.donkarl.com

Rutt

unread,
Aug 18, 2011, 8:06:20 AM8/18/11
to
Hallo Peter,

vielen Dank. Das hört sich gut an.

Habe mal den Code eingebunden.

Mein Aufruf

...
call ShellWait("V:\PDF1.pdf")
...

Aber irgendwie passiert nichts. Hätte gedacht dass gedruckt wird.
Verstehe ich da etwas falsch???
Man übergibt dort doch die zu druckende Datei? Oder?

Viele Grüße
Holger

Peter Doering

unread,
Aug 18, 2011, 8:59:11 AM8/18/11
to
Hallo,

Rutt wrote:

> vielen Dank. Das hört sich gut an.
>
> Habe mal den Code eingebunden.
>
> Mein Aufruf
>
> ...
> call ShellWait("V:\PDF1.pdf")
> ...
>
> Aber irgendwie passiert nichts. Hätte gedacht dass gedruckt wird.
> Verstehe ich da etwas falsch???

Naja, du hast ShellExecute durch ShellWait ersetzt, mehr nicht. Du musst
das Print-Kommando so angeben, als wuerdest du es im Dos-Fenster eingeben.
Falls du die genaue Syntax nicht kennst, solltest du dort testen (Start -
Ausfuehren - cmd).

Wenn folgender Befehl unter Dos funktioniert ...

Print V:\PDF1.pdf

... koennte der Aufruf so aussehen:

Call ShellWait(Environ$("COMSPEC") & " /C print V:\PDF1.pdf")

(alles Luftcode)

Rutt

unread,
Aug 18, 2011, 9:40:58 AM8/18/11
to
Hallo Peter,

verstehe.

Nur muss wahrscheinlich der Print-Befehl anders aussehen
(Gerätename???, Pfad, Datei).

Bzw. es handelt sich ja um pdf's. Ob die über die Kommandozeile
gedruckt werden können, hm.
Evtl. muss in der Zeile der ganze Acrobat Reader Pfad stehen, inkl.
Datei und Schalter zum Drucken.
Ich kann mich entsinnen, dass es dabei Probleme gab, weil sich der
Reader danach nicht mehr selber terminierte.

Wäre ja auch zu schön gewesen wenn Dein Luftcode direkt gefunzt hätte.
Werde mal was experimentieren.

Viele Grüße
Holger

Ahmed Martens

unread,
Aug 19, 2011, 9:22:23 AM8/19/11
to
Hallo Holger,

Am Thu, 18 Aug 2011 00:14:58 -0700 (PDT) schrieb Rutt:

> Hallo NG'ler,
>
> habe wiedermal ein seltsames "Problem".
>

> Ich m�chte mehrer PDF-Dokumente nacheinander via Access (VBA)
> ausdrucken.
> Daf�r nutze ich einen Shell-Befehl. Nur wenn die Dokumente nachher aus


> dem Drucker rauskommen stimmt die Reihenfolge nicht mehr. Hier ein
> Beispiel:
>
> ...
> ShellExecute(Application.hWndAccessApp, "Print", "PDF1.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ShellExecute(Application.hWndAccessApp, "Print", "PDF2.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ShellExecute(Application.hWndAccessApp, "Print", "PDF3.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ShellExecute(Application.hWndAccessApp, "Print", "PDF4.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ShellExecute(Application.hWndAccessApp, "Print", "PDF5.pdf", "", "C:
> \", SW_SHOWNORMAL)
> ...
>

> Wie zuf�llig k�nnte der Drucker die Dokumente in folgender Reihenfolge


> ausdrucken:
> PDF2.pdf, PDF5.pdf, PDF1.pdf, PDF2.pdf, PDF3.pdf
>

> Eine Reihenfolgenlogik sehe ich nicht. K�nnte es sein, dass das an der
> Gr��e der Dateien liegt? Einige sind vielleicht schneller zum Druck


> "aufbereitet" als andere.
>
> Was kann ich tun, damit ich nicht am Drucker erst mal alles sortieren
> muss :(
>

> Viele Gr��e
>
> Holger

f�r das Warten eines Ausdruckes habe ich mir eine DLL (Printjobs.dll)
erstellt. Mi dieser DLL kann man den Druckerspooler f�r einen Drucker o.
Dokument �berwachen und den Programmcode solange automatisch anhalten,
bis alle Drucker f�r den Drucker/Dokument abgearbeitet sind.

Die DLL kann �berall per Verweiseinbindung verwendet werden (Office-VBA,
VB6 etc.)

Die Einrichtung ist absolut simpel. Hier die Beschreibung und
Download-Link: http://www.alice-dsl.net/ahmed.martens/Tools.html

Solltest Du noch Fragen haben, dann melde dich hier oder in meinem Forum
(http://12249lukjl.forumprofi.de)

Gru� Ahmed

--
Antworten bitte nur in der Newsgroup

0 new messages