2017-03-20 1 views
-1

J'ai essayé d'exécuter la commande avec la commande ouverte aussiObtention de l'erreur lors de la conversion JPG au format PDF via Ghostscript en utilisant un script TCL

set command "C:\Program Files(x86)\gs\bin\gswin32c.exe -sDEVICE=pdfwrite -o $createpdfpath D:/test/1/ghostscript/gs9.19/lib/viewjpeg.ps -c \"($Modifiedjpgpath) <</PageSize 2 index viewJPEGgetsize 2 array astore >> setpagedevice viewJPEG\"" 

set f [open "$command" "r"] 

Après l'exécution je reçois l'erreur suivante:

 
couldn't open "C:\Program Files(x86)\gs\bin\gswin32c.exe -sDEVICE=pdfwrite -o C:/sample/Et/Alpha_10H00000001.0.00000102.00000001/23.pdf D:/test/1/ghostscript/gs9.19/lib/viewjpeg.ps -c "(\\\\Test-PC\\TRAIL-P\\Ds\\PS\\0\\17\\Color_00000001.jpg) > setpagedevice viewJPEG"": no such file or directory 
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Mais si J'exécute la même commande via l'invite de commande, il convertit le fichier jpg en fichier pdf sans aucune erreur.

Répondre

1

À moins que votre configuration de Windows ne soit différente de la course de l'usine, alors "C:\Program Files(x86)" est incorrect, et devrait être "C:\Program Files (x86)", notez l'espace manquant dans votre définition.

donc quelque chose comme:

set command "C:\Program Files (x86)\gs\bin\gswin32c.exe........" 

FWIW Ghostscript ne j'installe pas normalement dans ce répertoire soit, attendez-vous le répertoire à la forme « c: \ Program Files (x86) \ gs \ Gsx .YY \ bin \ gswin32c "où X.YY est le numéro de version de Ghostscript.

+0

C'est probablement l'un des nombreux problèmes du code. OTOH, c'est celui que je n'ai pas repéré ... –

1

Le problème principal que vous avez est que vous n'exécutez pas cette commande en tant que pipeline.

Vous devez changer:

set f [open "$command" "r"] 

à:

set f [open |$command "r"] 

Vous pouvez également avoir des fautes de frappe dans votre descripteur de pipeline, que je vous recommande de construire une liste et file nativename est probablement important que Eh bien, pas tellement pour le nom de l'interpréteur ghostscript lui-même, mais plutôt pour tous les noms de fichiers qui lui sont donnés:

# Easiest to use/instead of \ in filenames inside Tcl, really 
set gs "C:/Program Files (x86)/gs/bin/gswin32c.exe" 
set psscript "D:/test/1/ghostscript/gs9.19/lib/viewjpeg.ps" 

# The next bit is building some postscript to run 
set thejpgfile [file nativename $Modifiedjpgpath] 
set pscmd "($thejpgfile) <</PageSize 2 index viewJPEGgetsize 2 array astore >> setpagedevice viewJPEG" 

# Compose everything into a subprocess invokation 
set command [list $gs -sDEVICE=pdfwrite -o $createpdfpath [file nativename $psscript] -c $pscmd] 

# Actually run it 
set f [open |$command "r"] 

Je trouve qu'il est généralement plus simple d'essayer de garder les lignes de code plus courtes et d'utiliser des variables pour donner un nom utile aux bits individuels. Il est également beaucoup plus facile de déboguer; vous pouvez simplement imprimer tout ce qui semble trop mystérieux.

+0

Notez que cela fonctionne comme un pipeline; parfois, il est plus facile de faire 'exec {*} $ command' à la place. –