Probleme mit Ghostview drucken

  • Hi,

    ich lese hier schon eine ganze Weile mit. Ich bin neu und arbeite erst seit kurzem mit AutoIT.

    Ich habe dann eine ganz kleine Sache zusammengeschrieben doch so wirklich will es nicht:

    Spoiler anzeigen
    [autoit]

    ;#NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    ; Hier kann ein Hotkey zum Beenden des Programms festgelegt werden
    ; in Anführungszeichen vorm Komma, z. Z. ALT+SHIFT+Q
    HotKeySet("+!q", "Quit")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Ist der Ordner C:\Temp\Workflow vorhanden?
    If FileExists("C:\Temp\Workflow") Then

    [/autoit] [autoit][/autoit] [autoit]

    ; Alle Dateien/Ordner wo schon vorhanden sind werden vorher gelöscht
    FileDelete("C:\Temp\Workflow")
    DirRemove("C:\Temp\Workflow\gedruckt", 1)
    Else
    ; Erstellen des Workflows Ordners, nachdem festgestellt wurde, das der Ordner fehlt
    DirCreate("C:\Temp\Workflow")

    [/autoit] [autoit][/autoit] [autoit]

    ; !Testschreiben! Schreibe in die INI, das der Ordner erstellt wurde
    ;IniWrite("C:\Programme\FreePDF_XP\Workflow-Druck.ini", "Ordner erstellt", "Ordner", "1")

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Pfad zu Gsview
    $program = "c:\Programme\Ghostgum\gsview"

    [/autoit] [autoit][/autoit] [autoit]

    ; Pfad der auf neue Dateien überwacht werden soll
    $source = "C:\Temp\Workflow"

    [/autoit] [autoit][/autoit] [autoit]

    ; Pfad, in den die Dateien nach dem Drucken verschoben werden sollen
    ;$dest = "C:\Temp\Workflow\gedruckt"

    [/autoit] [autoit][/autoit] [autoit]

    ; Dauer des Prüfintervalls in Millisekungen (10 Sek = 10000)
    $interval = 10

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep($interval)
    $file = FileFindFirstFile ($source & "\*.pdf")
    If $file <> -1 then Print()
    FileClose($file)
    Wend

    [/autoit] [autoit][/autoit] [autoit]

    Func Quit()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Print()
    While 1
    $pdffile = FileFindNextFile($file)
    If @error then ExitLoop
    RunWait('"' & $program & '\gsprint.exe" "' & $source & '\' & $pdffile & '"')
    FileDelete("C:\Temp\Workflow\Druck.pdf")

    [/autoit] [autoit][/autoit] [autoit]

    WEnd
    EndFunc
    Exit

    [/autoit]

    Also um es kurz zu erklären:
    Es lief auf ein paar PCs hier einwandfrei. Da wurde damals aber noch kein Ordner überprüft und nicht angelegt, wenn er nicht da ist.
    Aber das hat ja nichts zur Sache zu tun, denn nun endet es immer in einer Endlosschleife...

    Warum? :weinen:

    Vielen Dank schon Mal für eure Hilfe...

    MfG
    Sascha

    P.S: Vielen Dank schon Mal.

    Edit GtaSpider: Bitte keine CODE Tags mehr verwenden Sondern bitte [ AUTOIT] und [ /AUTOIT] (beides ohne leerzeicehn) benutzen! Ausserdem hab ich mal SPOILER Tags eingefügt ;)
    Ich danke dir, werde mich daran halten....

    Einmal editiert, zuletzt von Sascha (21. September 2006 um 11:16)

  • Vielen Dank für die schnelle Antwort...

    Er bleibt immer beim drucken hängen, das heisst in der zweiten Schleife...
    Nur ich weiß nicht warum, das File wurde früher gelöscht und nun klappt das nicht mehr.

    Eigentlich sollte es so funktionieren:
    Er sucht nach dem .pdf File (Es wird immer eine Druck.pdf durch FreePDFXP erstellt), springt in die Funktion Drucken und danach löscht er Sie, eigentlich sollte es so klappen???

    Es ging Mal aber ich habe zwischendrin so viel versucht :irre:

    MfG
    Sascha

  • Hi,
    was heisst er bleibt hängen. Bleibt er beim RunWait stehen oder kommt er aus dem Loop nicht mehr heraus?
    Wenn du es ganz normal von Hand über den CMD-Promt aufrufst funktioniert es?

    eddy_erpel

  • Hi Eddy_Erpel,

    er kommt aus dem Loop nicht mehr heraus, es ist so das er immer wieder versucht, zu drucken...

    Und es dann auch tut...

    Du meinst wenn ich die Exe über Command aufrufe? Da geht es auch nicht.... :hm:

    • Offizieller Beitrag

    Hallo!

    Das Prolem ist das die 1. Schleife nicht beendet wird! Wenn die 2. Schleife in der Print-Funktion abgearbeitet ist kehrt das Programm in die 1. Schleife zurück und beginnt noch mal von vorne!

    Also einfach die 1. Schleife weglassen und alles wird gut!

    [autoit]

    ;#NoTrayIcon

    [/autoit][autoit][/autoit][autoit]

    ; Hier kann ein Hotkey zum Beenden des Programms festgelegt werden
    ; in Anführungszeichen vorm Komma, z. Z. ALT+SHIFT+Q
    HotKeySet("+!q", "Quit")

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;Ist der Ordner C:\Temp\Workflow vorhanden?
    If FileExists("C:\Temp\Workflow") Then

    [/autoit][autoit][/autoit][autoit]

    ; Alle Dateien/Ordner wo schon vorhanden sind werden vorher gelöscht
    FileDelete("C:\Temp\Workflow")
    DirRemove("C:\Temp\Workflow\gedruckt", 1)
    Else
    ; Erstellen des Workflows Ordners, nachdem festgestellt wurde, das der Ordner fehlt
    DirCreate("C:\Temp\Workflow")

    [/autoit][autoit][/autoit][autoit]

    ; !Testschreiben! Schreibe in die INI, das der Ordner erstellt wurde
    ;IniWrite("C:\Programme\FreePDF_XP\Workflow-Druck.ini", "Ordner erstellt", "Ordner", "1")

    [/autoit][autoit][/autoit][autoit]

    EndIf

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;Pfad zu Gsview
    $program = "c:\Programme\Ghostgum\gsview"

    [/autoit][autoit][/autoit][autoit]

    ; Pfad der auf neue Dateien überwacht werden soll
    $source = "C:\Temp\Workflow"

    [/autoit][autoit][/autoit][autoit]

    ; Pfad, in den die Dateien nach dem Drucken verschoben werden sollen
    ;$dest = "C:\Temp\Workflow\gedruckt"

    [/autoit][autoit][/autoit][autoit]

    ; Dauer des Prüfintervalls in Millisekungen (10 Sek = 10000)
    $interval = 10

    [/autoit][autoit][/autoit][autoit]

    Sleep($interval)
    $file = FileFindFirstFile($source & "\*.pdf")
    If $file <> -1 Then Print()
    FileClose($file)

    [/autoit][autoit][/autoit][autoit]

    Func Quit()
    Exit
    EndFunc ;==>Quit

    [/autoit][autoit][/autoit][autoit]

    Func Print()
    While 1
    $pdffile = FileFindNextFile($file)
    If @error Then ExitLoop
    RunWait('"' & $program & '\gsprint.exe" "' & $source & '\' & $pdffile & '"')
    FileDelete("C:\Temp\Workflow\Druck.pdf")

    [/autoit][autoit][/autoit][autoit]

    WEnd
    Exit
    EndFunc ;==>Print

    [/autoit]
  • Hi,

    wenn das file gelöscht würde, dann sollte eigentlich alles funktionieren. Also er verlässt die 2. Schlaufe und kehrt zur 1. zurück und wartet, bis ein neues PDF existiert zum drucken. Da er aber immer wieder das selbe PDF findet, druckt er es auch immer und immer wieder aus.
    Ich kann mir folgendes vorstellen:

    • gsprint.exe hat das PDF noch nicht freigegeben zum Zeitpunkt von FileDelete
    • Ein anderes Prgram greift noch auf das PDF file zu und kann es deshalb nicht löschen

    probier es einmal zu testen so:

    [autoit]


    RunWait('"' & $program & '\gsprint.exe" "' & $source & '\' & $pdffile & '"')
    Sleep(5000)
    MsgBox("","",FileDelete("C:\Temp\Workflow\Druck.pdf")) ;Bei nicht erfolgreichem Löschen wird "0" zurückgegeben, ansonsten 1

    [/autoit]


    eddy_erpel

  • Vielen Dank schon Mal für eure Hilfe...

    Eddy_Erpel, du hast Recht, so war es auch am Anfang angedacht, das da PDFs gedruckt werden und es im Hintergrund läuft...

    Da wurde aber noch nicht festgelegt welcher PDF Name benutzt wird, das heisst, es war eigentlich angedacht, das man alles reinziehen konnte und es einfach in einen anderen Ordner Verschoben wird (gedruckt).

    Das hat auch einwandfrei bei vielen funktionert, es wurde dann festgestellt, das auf anderen PCs es nicht läuft :irre:

    Bei allen anderen lief es aber, auch das das PDF gelsöcht wird, klappt einwandfrei, nur bei ein paar Personen nicht.

    Daher habe ich mich hingesetzt und es so versucht abzuändern, dass so eine Schleife nicht mehr vorkommt, nun ja, das ging wohl in die Hose.... :weinen:

    Ich ändere nun Mal das ganze....

    //Edit//
    Eddy_Erpels Tipp interessiert ihn nicht, er macht trotz alle dem eine Schleife, also gsprint Druckt und druckt und druckt.....

    bernd670s Tipp geht leider auch nicht, er druckt nicht :(
    Ich habe es auch schon so ähnlich versucht und genau das gleiche Problem gehabt, das er es einfach nicht druckt :hm:

    Sonst wird es wirklich so gemacht, das nur ein Durchlauf geschieht und das wars....

    MfG
    Sascha

    3 Mal editiert, zuletzt von Sascha (21. September 2006 um 11:30)

  • Kannst du das File von Hand löschen wenn die MsgBox erscheint?
    Aus zwei mach eins:

    Spoiler anzeigen
    [autoit]

    ;#NoTrayIcon
    ; Hier kann ein Hotkey zum Beenden des Programms festgelegt werden
    ; in Anführungszeichen vorm Komma, z. Z. ALT+SHIFT+Q
    HotKeySet("+!q", "Quit")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Ist der Ordner C:\Temp\Workflow vorhanden?
    If FileExists("C:\Temp\Workflow") Then

    [/autoit] [autoit][/autoit] [autoit]

    ; Alle Dateien/Ordner wo schon vorhanden sind werden vorher gelöscht
    FileDelete("C:\Temp\Workflow")
    DirRemove("C:\Temp\Workflow\gedruckt", 1)
    Else
    ; Erstellen des Workflows Ordners, nachdem festgestellt wurde, das der Ordner fehlt
    DirCreate("C:\Temp\Workflow")

    [/autoit] [autoit][/autoit] [autoit]

    ; !Testschreiben! Schreibe in die INI, das der Ordner erstellt wurde
    ;IniWrite("C:\Programme\FreePDF_XP\Workflow-Druck.ini", "Ordner erstellt", "Ordner", "1")

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Pfad zu Gsview
    $program = "c:\Programme\Ghostgum\gsview"

    [/autoit] [autoit][/autoit] [autoit]

    ; Pfad der auf neue Dateien überwacht werden soll
    $source = "C:\Temp\Workflow\"

    [/autoit] [autoit][/autoit] [autoit]

    ; Pfad, in den die Dateien nach dem Drucken verschoben werden sollen
    ;$dest = "C:\Temp\Workflow\gedruckt"

    [/autoit] [autoit][/autoit] [autoit]

    ; Dauer des Prüfintervalls in Millisekungen (10 Sek = 10000)
    $interval = 1000
    While 1
    Sleep($interval)
    $file=FileFindFirstFile ($source & "*.pdf")
    $pdffile=FileFindNextFile($file)
    if $pdffile<>"" Then
    RunWait('"' & $program & '\gsprint.exe" "' & $source & $pdffile & '"')
    FileClose($file)
    ;MsgBox(32,"File löschbar?","Versuch jetzt das File von Hand zu löschen und drück anschliessen auf OK")
    FileDelete($source & $pdffile)
    EndIf
    Wend

    [/autoit] [autoit][/autoit] [autoit]

    Func Quit()
    Exit
    EndFunc
    Exit

    [/autoit]


    eddy_erpel

    3 Mal editiert, zuletzt von Eddy_Erpel (22. September 2006 um 12:00)

  • Hi Eddy_Erpel,

    leider ging es nicht mit deinem Code, daher habe ich den hier genommen:

    Spoiler anzeigen
    [autoit]

    While 1
    Sleep($interval)
    $file = FileFindFirstFile ($source & "\*.pdf")
    If $file <> -1 then Print()
    If $file <> 0 then ExitLoop
    FileClose($file)
    Wend

    [/autoit] [autoit][/autoit] [autoit]

    Func Quit()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Print()
    While 1
    $pdffile = FileFindNextFile($file)
    If @error then ExitLoop
    RunWait('"' & $program & '\gsprint.exe" "' & $source & '\' & $pdffile & '"')
    MsgBox(32,"File löschbar?","Versuch jetzt das File von Hand zu löschen und drück anschliessen auf OK")
    FileDelete($source & $pdffile)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    WEnd
    EndFunc
    Exit

    [/autoit]

    Aber es konnte einwandfrei gelöscht werden.
    Bei dir kam die angehängte Fehlermeldung.

    MfG
    Sascha

    2 Mal editiert, zuletzt von Sascha (21. September 2006 um 15:49)

  • Hi,
    Ich sehen den Fehler schon:

    [autoit]

    $source = "C:\Temp\Workflow|"

    [/autoit]


    aber es müsste natürlich

    [autoit]

    $source = "C:\Temp\Workflow\"

    [/autoit]

    heissen. Sorry!
    Aber läuft es nun oder hast du immer noch Probleme damit?

    eddy_erpel

  • Hi,

    den Fehler habe ich verbessert, sorry habe ich vergessen zu sagen.
    Aber es geht immer noch nicht...leider...

    Ne die Schleife machte er trotzdem.
    Es hat so keinen Sinn, daher würde ich wissen, wie man den Quellcode oben vom bernd so anpasst, das es geht....

    Denn wenn ich die Lösung nicht finde, versuche ich diese Schleifen einfach zu umgehen.... :hm:

    MfG
    Sascha

    3 Mal editiert, zuletzt von Sascha (21. September 2006 um 17:27)

    • Offizieller Beitrag

    Hallo!

    Zitat

    Orginal von @Sascha
    Du meinst wenn ich die Exe über Command aufrufe? Da geht es auch nicht.... :hm:

    Welche Exe meinst du, die gsprint.exe oder die von dir erstellte exe?

    Wenn du die von dir erstellte exe meinst, probier mal den gsprint aufruf von Hand über Command aufzurufen!

  • Hallo,

    Zitat

    den Fehler habe ich verbessert, sorry habe ich vergessen zu sagen.
    Aber es geht immer noch nicht...leider...


    Was genau geht denn nicht??? (Eine etwas präzisere Aussage wäre sehr hilfreich)
    Bei mir läuft das Skript einwandfrei!

    Zitat

    Ne die Schleife machte er trotzdem.

    Ist ja logisch: While - Wend ist immer eine Schleife ;)

    eddy_erpel

  • Bernd
    Es wurde auch die gsprint.exe versucht aufzurufen. Alles paletti...
    Wie ich ja schon oben geschrieben habe, es geht alles, aufgerufen wird es ja...
    Das Problem nur dabei ist, das die gsprint.exe unendlich mal aufgerufen wird....

    Also in einer Endlosschleife...Somit so lange druckt bis kein Papier mehr da ist....

    Eddy_Erpel
    Die Schleife sollte aber keine Endlosschleife sein :rolleyes:
    Es kommt die Fehlermeldung, die ich unten angehängt habe....

    Bernds Quelltext geht auch nicht, denn er löscht das File, druckt es aber nicht aus...
    Ich schaue mir das nachher genauer an....

  • Die Bedingung ist, das es so lange läuft bis nichts mehr zum drucken im Ordner ist...

    So war es angedacht aber das verwerfe ich nun, es soll einmal drucken und dann nicht mehr...

    Das heisst, ich denke der Ansatz vom bernd ist nicht schlecht....

    MfG
    Sascha

    Einmal editiert, zuletzt von Sascha (22. September 2006 um 12:11)

  • Hallo,

    ich habe mir die ganze Sache nochmals angeschaut.
    Ich verwende dieses Skript:

    Spoiler anzeigen
    [autoit]

    ;#NoTrayIcon
    ; Hier kann ein Hotkey zum Beenden des Programms festgelegt werden
    ; in Anführungszeichen vorm Komma, z. Z. ALT+SHIFT+Q
    HotKeySet("+!q", "Quit")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Ist der Ordner C:\Temp\Workflow vorhanden?
    If FileExists("C:\Temp\Workflow") Then

    [/autoit] [autoit][/autoit] [autoit]

    ; Alle Dateien/Ordner wo schon vorhanden sind werden vorher gelöscht
    FileDelete("C:\Temp\Workflow")
    DirRemove("C:\Temp\Workflow\gedruckt", 1)
    Else
    ; Erstellen des Workflows Ordners, nachdem festgestellt wurde, das der Ordner fehlt
    DirCreate("C:\Temp\Workflow")

    [/autoit] [autoit][/autoit] [autoit]

    ; !Testschreiben! Schreibe in die INI, das der Ordner erstellt wurde
    ;IniWrite("C:\Programme\FreePDF_XP\Workflow-Druck.ini", "Ordner erstellt", "Ordner", "1")

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;Pfad zu Gsview
    $program = "c:\Programme\Ghostgum\gsview"

    [/autoit] [autoit][/autoit] [autoit]

    ; Pfad der auf neue Dateien überwacht werden soll
    $source = "C:\Temp\Workflow\"

    [/autoit] [autoit][/autoit] [autoit]

    ; Pfad, in den die Dateien nach dem Drucken verschoben werden sollen
    ;$dest = "C:\Temp\Workflow\gedruckt"

    [/autoit] [autoit][/autoit] [autoit]

    ; Dauer des Prüfintervalls in Millisekungen (10 Sek = 10000)
    $interval = 1000
    While 1
    Sleep($interval)
    $file=FileFindFirstFile ($source & "*.pdf")
    $pdffile=FileFindNextFile($file)
    if $pdffile<>"" Then
    RunWait('"' & $program & '\gsprint.exe" "' & $source & $pdffile & '"')
    FileClose($file)
    FileDelete($source & $pdffile)
    EndIf
    Wend

    [/autoit] [autoit][/autoit] [autoit]

    Func Quit()
    Exit
    EndFunc
    Exit

    [/autoit]


    Ich verwende Win XP, Autoit-Version 3.2.0.1, Ghostscript 8.53 & GSview 4.8.
    Habe es nun mehrfach getestet mit allen möglichen Konstellationen und es nicht aus den Bahnen werfen können.
    Ich hoffe, dass der Fehler lokalisierbar ist, sonst weiss ich langsam nicht mehr weiter ?(

    eddy_erpel

  • Hi Eddy_erpel,

    ich verwende bis auf die AutoIT Version das gleiche.
    Die AutoIT Version ist die 3.1.1.0...

    Werde das Mal updaten....und dann nochmals testen...
    Denn mit dieser Version kriege ich immer noch die gleiche Fehlermeldung...

    Vielen Dank für eure Hilfe...

    //Edit//
    Geht :)
    Auch bei den Problem Rechnern, habe es aber noch ein bisschen umgeschrieben...

    MfG
    Sascha

    2 Mal editiert, zuletzt von Sascha (28. September 2006 um 14:32)