readme
Goto Top

Automatisches ausdrucken von PDF Dateien ohne Druckdialog - Script

Hallo!

Ich hoffe Ihr könnt mir helfen.

Habe folgendes Problem:

Ich habe ein Script, welches beim aktivieren eine PDF Datei ausdrucken soll ohne das der Druck-Dialog angezeigt wird.
Dieser Script sieht so aus:

Option Explicit

Dim objShellApp
Dim argument
Dim strFile
If WScript.Arguments.Count < 1 Then
WScript.Echo("Usage: printfile.vbs file.doc")
WScript.Quit
End If

strFile = Wscript.Arguments(0)

Set objShellApp = WScript.CreateObject("Shell.Application")
objShellApp.ShellExecute strFile, "", "", "print", 0

Wscript.Sleep(5000)

Set objShellApp = Nothing



Soweit so gut, nun muss aber über CMD der Befehl printfile.vbs c:\test.pdf eingeben werden damit das Script ausgeführt werden soll.
Jedoch brauche ich ein weiteres Script welches genau dieses Befehl ausführt. Dazu habe ich im Internet was gefunden:

set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "cmd"
WScript.Sleep 100
WshShell.SendKeys "printfile.vbs c:\Test.pdf"


Wenn ich das ausführe wird zwar in CMD der Befehl eingeben aber nicht ausgeführt. Was muss ich tun damit es den ausführt und die CMD Konsole wieder schliesst?

Das nächste wär, das ich gerne diesen Script in einer Website einbauen möchte so das ich mit einem Klick die vorgegebene Datei drucken kann.

Hoffe sehr das Ihr mir helfen könnt. Dies ist meine erste "große" Aufgabe (bin Azubi seit 01.09.06 als FI/SI ) :D.

Content-Key: 40617

Url: https://administrator.de/contentid/40617

Printed on: April 23, 2024 at 09:04 o'clock

Member: bastla
bastla Sep 21, 2006 at 13:54:02 (UTC)
Goto Top
Hallo Readme!

Wenn denn Dein Script tatsächlich über CMD ausgeführt werden muss:

'Script RunPrintFile.vbs  
strFile = WScript.Arguments(0)
'zum Testen gehe ich davon aus, dass die PDF-Datei als Argument übergeben wird  

strProg = """C:\Dokumente und Einstellungen\Tester\Desktop\PrintFile.vbs""" 'Pfad zum Script (bei mir)  
'Die ganzen Anführungszeichen, weil im Pfad eine Leerstelle enthalten ist  

set WshShell = WScript.CreateObject("WScript.Shell")  

WshShell.Run "cmd /c CScript.exe //nologo " & strProg & " " & Chr(34) & strFile & Chr(34), 1 ,1  
'Gleich nochmal die Sache mit den Anführungszeichen, diesmal als Chr(34) geschrieben - als Vorsorge,  
falls der Pfad des PDF-Files Leerstellen enthält

'Der Schalter /c sorgt für das Schließen des Konsolen-Fensters (/k würde es offen lassen)  

HTH
bastla
Member: Readme
Readme Sep 21, 2006 at 14:12:34 (UTC)
Goto Top
Vielen Dank für die Antwort.

Leider habe ich vergessen zu erwähnen, das ich nur allgemeine Grundkenntnisse in programmieren verfüge. Daher verstehe ich nicht ganz, wie ich den Script richtig ausführen soll.

Über CMD muss der Script nicht ausgeführt werden.
Es wäre natürlich viel besser und einfacher, wenn ich einfach ein Script hätte, welches eine vorgegebene Datei (PDF) ausdruckt ohne den Druck-Dialog anzuzeigen.
Für mich wäre es eine sehr große Hilfe, wenn Du oder jemand anders mir diesen Script programmieren könnte, vorzugsweise in VBS. Falls dies nicht gehen sollte oder es über eine andere Programmiersprache besser funktionieren würde, wäre es auch kein Problem.
Das was wichtig wäre, das ich den Script in einer HTML Website einfügen und über ein Link ausführen kann. Die Website wird nur auf einem PC laufen und nicht über das Internet verfügbar sein.
Member: bastla
bastla Sep 21, 2006 at 18:40:32 (UTC)
Goto Top
Hallo Readme!

Das Script zum Ausdruck hast Du ja eigentlich schon selbst gepostet (Stichwort ShellExecute).

Ich kann noch immer nicht genau nachvollziehen, wie (bzw auch warum) der Ausdruck über eine Webseite erfolgen soll. Ist gemeint, dass immer eine Datei mit gleichem Namen und Pfad (zB c:\Test.pdf) gedruckt werden soll oder muss die PDF-Datei variabel übergeben werden?

bastla
Member: Readme
Readme Sep 22, 2006 at 06:13:26 (UTC)
Goto Top
Es soll nur immer die selbe Datei im selben Pfad gedruckt werde.
Wir haben nähmlich Kundentage. Wenn die Kunden Interesse haben, sollen sie sich dann die Vorstellung ausdrucken können über einen PC. Dabei soll dies über eine simplen HTML Startseit, die im Browser läuft, über ein Link ausgedruckt werden können. Es wird nur die eine PDF Datei in C: zum ausdrucken geben. Dabei soll halt kein Druckdialog erscheinen.
Sonst hat der PC nichts zu tun ausser zu drucken. Wo bestimmt dann nur der Browser läuft.
Member: Readme
Readme Sep 22, 2006 at 09:40:03 (UTC)
Goto Top
So, ich habe es geschaft.

Dieser Script:

set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "cmd"
WScript.Sleep 100
WshShell.SendKeys "printfile.vbs c:\Test.pdf "
WScript.Sleep 100
WSHShell.SendKeys "{Enter}"
WScript.Sleep 100
WSHShell.SendKeys "Exit"
WScript.Sleep 100
WSHShell.SendKeys "{Enter}"


führt dieses Script aus:


Option Explicit

Dim objShellApp
Dim argument
Dim strFile
If WScript.Arguments.Count < 1 Then
WScript.Echo("Usage: printfile.vbs file.doc")
WScript.Quit
End If

strFile = Wscript.Arguments(0)

Set objShellApp = WScript.CreateObject("Shell.Application")
objShellApp.ShellExecute strFile, "", "", "print", 0

Wscript.Sleep(5000)

Set objShellApp = Nothing


So wird endlich die PDF Datei ausgedruckt und die CMD Konsole nach dem Voragang geschlossen.
Das letzte Problem wäre jedoch, das sich die Anwendung (Adobe Reader) sich am Ende schliessen soll.
Kann mir jemand sagen, welche änderung ich im Script vornehmen soll, damit sich Adobe Reader sich am Ende schliesst nachdem es gestartet wurde?
Member: bastla
bastla Sep 23, 2006 at 16:52:22 (UTC)
Goto Top
Hallo Readme!

Falls es noch nicht zu spät kommt:

http://66.249.93.104/search?q=cache:weKFPXS6S3cJ:forums.oracle.com/foru ...
Zum Download des erwähnten Tools: pdfp

Es scheint allerdings generell Probleme beim Schließen des Acrobat Readers zu geben, denn eigentlich müsste er sich über DDE steuern lassen (siehe Explorer / Extras / Ordneroptionen / Dateitypen / PDF / Bearbeiten oder Erweitert / print) - mögliche DDE-Befehle sollten sein (immer in eckigen Klammern verwenden) : CloseAllDocs, DocClose, DocGoTo, DocGoToNameDest, DocOpen, FileOpenEx, FilePrintEx, FilePrintSilentEx, FilePrintToEx, and AppExit

Eigentlich sollte die Kombination [FilePrintSilentEx("%1")][AppExit] drucken und den Reader schließen - tut sie aber bei mir nicht! Vielleicht hast Du mehr Glück.

Alles Gute
bastla
Member: Readme
Readme Sep 25, 2006 at 06:50:57 (UTC)
Goto Top
Die Obere Beschreibung werde ich mal versuchen auszuprobieren. Ich habe hier auch ein weiteren Script gefunden:

Dim WSHShell : Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.run """C:\Programme\Adobe\Acrobat 6.0\Reader\AcroRd32.exe"""
WScript.Sleep 1000*15
WSHShell.run """C:\Programme\Adobe\Acrobat 6.0\Reader\AcroRd32.exe"" /t
""F:\EigeneDateien\#PDF\http --192.168.1.1-doc-online.sht.pdf"" ""LJ4 an
LPT1""" , , True
WScript.Sleep 1000*7
WSHShell.run """C:\Programme\Adobe\Acrobat 6.0\Reader\AcroRd32.exe"" /t
""F:\EigeneDateien\#PDF\http --192.168.1.1-doc-online.sht.pdf"" ""LJ4 im
Netz""" , , True
WScript.Sleep 1000*7
WSHShell.SendKeys "%{F4}"
WScript.Sleep 1000*1
MsgBox "Das wars . . . "

Kann mir jemand sagen ob das funktionieren würde?Muss ich einfach da den Standard Druckernamen einsetzten?Oder den Freigabename des Druckers?
Member: Readme
Readme Sep 25, 2006 at 12:20:30 (UTC)
Goto Top
Hallo Readme!

Falls es noch nicht zu spät kommt:

http://66.249.93.104/search?q=cache:weKFPXS6S3cJ:forums.oracle.com/foru ...
Zum Download des erwähnten Tools:
pdfp

Es scheint allerdings generell Probleme beim
Schließen des Acrobat Readers zu geben,
denn eigentlich müsste er sich über
DDE steuern lassen (siehe Explorer / Extras /
Ordneroptionen / Dateitypen / PDF /
Bearbeiten oder Erweitert / print) -
mögliche DDE-Befehle sollten sein (immer
in eckigen Klammern verwenden) :
CloseAllDocs, DocClose, DocGoTo,
DocGoToNameDest, DocOpen, FileOpenEx,
FilePrintEx, FilePrintSilentEx,
FilePrintToEx, and AppExit

Eigentlich sollte die Kombination
[FilePrintSilentEx("%1")][AppExit]
drucken und den Reader schließen - tut
sie aber bei mir nicht! Vielleicht hast Du
mehr Glück.

Alles Gute
bastla

Leider klappt es nicht bei mir.
Member: chip62-m
chip62-m Jan 05, 2007 at 13:03:33 (UTC)
Goto Top
Ich benutze die Funktion ShellExecute schon lange und ausgiebig, weil es eine Eier legende Wollmilschsau ist. Mail versand, öffnen drucken auf dem Standard drucker. Unter VB wird diese importiert mit:
Declare Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" ( _
ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long


Der Aufruf für den Druck eines beliebigen Dokumentes (also auch PDF) lautet dann
ShellExecute ShellExecute (0,"print","<Name des dokumentes>","","",0)
oder
ShellExecute ShellExecute (0,"printto","<Name des dokumentes>","","",0)

nShowCmd=0 Server versteckt starten
nShowCmd=5 Server sichtbar starten
Member: chip62-m
chip62-m Jan 05, 2007 at 13:03:49 (UTC)
Goto Top
Ich benutze die Funktion ShellExecute schon lange und ausgiebig, weil es eine Eier legende Wollmilschsau ist. Mail versand, öffnen drucken auf dem Standard drucker. Unter VB wird diese importiert mit:
Declare Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" ( _
ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long


Der Aufruf für den Druck eines beliebigen Dokumentes (also auch PDF) lautet dann
ShellExecute ShellExecute (0,"print","<Name des dokumentes>","","",0)
oder
ShellExecute ShellExecute (0,"printto","<Name des dokumentes>","","",0)

nShowCmd=0 Server versteckt starten
nShowCmd=5 Server sichtbar starten
Member: chip62-m
chip62-m Jan 05, 2007 at 13:04:09 (UTC)
Goto Top
Ich benutze die Funktion ShellExecute schon lange und ausgiebig, weil es eine Eier legende Wollmilschsau ist. Mail versand, öffnen drucken auf dem Standard drucker. Unter VB wird diese importiert mit:
Declare Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" ( _
ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long


Der Aufruf für den Druck eines beliebigen Dokumentes (also auch PDF) lautet dann
ShellExecute ShellExecute (0,"print","<Name des dokumentes>","","",0)
oder
ShellExecute ShellExecute (0,"printto","<Name des dokumentes>","","",0)

nShowCmd=0 Server versteckt starten
nShowCmd=5 Server sichtbar starten