Rotation Ghostscprit
MBARON76
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
MBARON76 Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
MBARON76 Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je tente de convertir des fichiers PostScripts en fichier PDF et :ou txt en utilisant Python.
J'utilise plusieurs méthodes, a première est de passer par un subprocess + ligne de commande.
subprocess.call("C:\Progra~1\gs\gs9.55.0\\bin\gswin64c.exe -dPDFA -dbase -dBATCH -dNOPAUSE -dNoSAFER -dQUIET -dtextFormat=3 -sDEVICE=txtwrite -sOutputFile=\"c:\fichiersorti.txt" -dEPSCrop -c \"<</Orientation 3>> setpagedevice\" -f c:\fichierentree.ps -c quit", shell=True)
Lorsque je lance cette ligne de commande, j'ai l'erreur << était inattendu.
Je pense que python ne supporte pas le <<. Je cherche les tipes pour comprendre quelle syntaxe mettre pour que cela fonctionne.
L'autre consiste à utiliser le module GS importé dans Python ce script fonctionne :
args = ["ps2txt", # actual value doesn't matter
"-dPDFA",
"-dbase",
"-dBATCH",
"-dNOPAUSE",
"-dNoSAFER",
"-dQUIET"
"-dFirstPage=3", #Démarrage de la conversion à la page 3
"-dtextFormat=3",
"-sDEVICE=txtwrite", #Type de conversion ici en txt
"-sOutputFile=\""+ Dir_input_path + Fil_input_path[:-2] + "txt\"",
"-dEPSCrop",
Dir_input_path + Fil_input_path]
print args
with ghostscript.Ghostscript(*args) as g:
ghostscript.cleanup()
Mais lorsque j'ajoute la commande permettant de tourner mes pages : "-c \"<</Orientation 3>> setpagedevice\"",
Il ne veut rien savoir. Certainement un nouveau problème de syntaxe. Mais là je sèche un peu.
Avez vous déjà rencontré ce genre de problème. et pouvez vous pointer mon problème de saisie svp ?
Merci d'avance.
Je tente de convertir des fichiers PostScripts en fichier PDF et :ou txt en utilisant Python.
J'utilise plusieurs méthodes, a première est de passer par un subprocess + ligne de commande.
subprocess.call("C:\Progra~1\gs\gs9.55.0\\bin\gswin64c.exe -dPDFA -dbase -dBATCH -dNOPAUSE -dNoSAFER -dQUIET -dtextFormat=3 -sDEVICE=txtwrite -sOutputFile=\"c:\fichiersorti.txt" -dEPSCrop -c \"<</Orientation 3>> setpagedevice\" -f c:\fichierentree.ps -c quit", shell=True)
Lorsque je lance cette ligne de commande, j'ai l'erreur << était inattendu.
Je pense que python ne supporte pas le <<. Je cherche les tipes pour comprendre quelle syntaxe mettre pour que cela fonctionne.
L'autre consiste à utiliser le module GS importé dans Python ce script fonctionne :
args = ["ps2txt", # actual value doesn't matter
"-dPDFA",
"-dbase",
"-dBATCH",
"-dNOPAUSE",
"-dNoSAFER",
"-dQUIET"
"-dFirstPage=3", #Démarrage de la conversion à la page 3
"-dtextFormat=3",
"-sDEVICE=txtwrite", #Type de conversion ici en txt
"-sOutputFile=\""+ Dir_input_path + Fil_input_path[:-2] + "txt\"",
"-dEPSCrop",
Dir_input_path + Fil_input_path]
print args
with ghostscript.Ghostscript(*args) as g:
ghostscript.cleanup()
Mais lorsque j'ajoute la commande permettant de tourner mes pages : "-c \"<</Orientation 3>> setpagedevice\"",
Il ne veut rien savoir. Certainement un nouveau problème de syntaxe. Mais là je sèche un peu.
Avez vous déjà rencontré ce genre de problème. et pouvez vous pointer mon problème de saisie svp ?
Merci d'avance.
Configuration: Windows / Edge 97.0.1072.62
A voir également:
- Rotation Ghostscprit
- Rotation ecran windows - Guide
- Rotation video - Guide
- Problème rotation écran tablette lenovo - Forum Matériel & Système
- Rotation ecran samsung ✓ - Forum Samsung
- Rotation pdf raccourci clavier ✓ - Forum PDF
7 réponses
Bonjour,
Concernant ta première méthode, les caractères <> sont des caractères spéciaux qui sont interprétés comme des redirections.
Pour ne pas qu'ils soient interprétés par l'invite de commandes, il faut les "échapper" comme ceci :
Concernant ta première méthode, les caractères <> sont des caractères spéciaux qui sont interprétés comme des redirections.
Pour ne pas qu'ils soient interprétés par l'invite de commandes, il faut les "échapper" comme ceci :
macommande="C:\Progra~1\gs\gs9.55.0\\bin\gswin64c.exe -dPDFA -dbase -dBATCH -dNOPAUSE -dNoSAFER -dQUIET -dtextFormat=3 -sDEVICE=txtwrite -sOutputFile=\"c:\fichiersorti.txt" -dEPSCrop -c \"^<^</Orientation 3^>^> setpagedevice\" -f c:\fichierentree.ps -c quit" subprocess.call(macommande, shell=True)
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
qui te retourne l'erreur, python ou la console exécutant la commande?
prends le temps de partager le texte complet et précis du message d'erreur reçu.
en python, au lieu de
fais plutôt:
qui te retourne l'erreur, python ou la console exécutant la commande?
prends le temps de partager le texte complet et précis du message d'erreur reçu.
en python, au lieu de
subprocess.call("blabla", shell=True),
fais plutôt:
macommande="blabla" subprocess.call(ma commande , shell=True)
Merci, comme ça c'est surement plus lisible, en effet.
Ma commande :
C'est la console qui me retourne des erreurs lorsque j'ajoute cette ligne :
En ligne de commande dans une fenêtre dos, ça fonctionne.
.

Ma commande :
args = ["ps2txt", # actual value doesn't matter
"-dPDFA",
"-dbase",
"-dBATCH",
"-dNOPAUSE",
"-dNoSAFER",
"-dQUIET"
"-dFirstPage=3", #Démarrage de la conversion à la page 3
"-dtextFormat=3",
"-sDEVICE=txtwrite", #Type de conversion ici en txt
"-sOutputFile=\""+ Dir_input_path + Fil_input_path[:-2] + "txt\"",
"-dEPSCrop",
Dir_input_path + Fil_input_path]
print args
with ghostscript.Ghostscript(*args) as g:
ghostscript.cleanup()
C'est la console qui me retourne des erreurs lorsque j'ajoute cette ligne :
"-c "<</Orientation 3>> setpagedevice"",
En ligne de commande dans une fenêtre dos, ça fonctionne.
.

Génial !
Est ce qu'il y a un tuto qui reprends toutes ces subtilités du langage Python. Au démarrage, c'est assez bloquant ces petits aménagements nécessaires.
Je tests ça dès mon retour au boulot.
Bon week-end.
Est ce qu'il y a un tuto qui reprends toutes ces subtilités du langage Python. Au démarrage, c'est assez bloquant ces petits aménagements nécessaires.
Je tests ça dès mon retour au boulot.
Bon week-end.
Bien que Python possède aussi des caractères spéciaux, dans ton cas ceux-ci ne sont pas liés à Python mais plutôt à l'invite de commandes (cmd.exe)
https://www.robvanderwoude.com/escapechars.php
https://www.robvanderwoude.com/escapechars.php
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Voici la commande qui fonctionne directement dans un .cmd :
Je passe mes variables %inputfilet% et %outputfile% depuis python.
Et là pas de problème il me tourne bien mes pages en paysage.
CAS 1 : commande executée depuis mon scripte python.
Ca fonctionne, mais lorsque j'essaye d'intégrer ce code
J'ai l'erreur suivante :
CAS 2 : Autre méthode en passant les arguments
Je fais la conversion avec celle fonction, qui est lancée pour chaque fichier présent dans le répertoire de traitement.
Pas de soucis, mais là il manque la rotation de la page.
J'ajoute donc la ligne suivante :
Et lorsque je lance mon script python j'ai le message d'erreur suivant :
Il évoque une violation d'écriture.
Le ^ ne semble pas changer grand chose malheureusement. Snif !
Je pense à un problème d'écriture et/ou d'interprétation dans les passages d'arguments. Mais je ne trouve pas où.
Merci encore.
Voici la commande qui fonctionne directement dans un .cmd :
C:\Progra~1\gs\gs9.55.0\bin\gswin64c.exe -dbase -dBATCH -dNOPAUSE -dNoSafer -dQUIET -sDEVICE=txtwrite -dFirstPage=3 -sOutputFile="%outputfile%" -dEPSCrop -c "<</Orientation 3>> setpagedevice" -f "%inputfile%" -c quit
Je passe mes variables %inputfilet% et %outputfile% depuis python.
Et là pas de problème il me tourne bien mes pages en paysage.
CAS 1 : commande executée depuis mon scripte python.
subprocess.call("C:\Progra~1\gs\gs9.55.0\\bin\gswin64c.exe -dbase -dBATCH -dNOPAUSE -dNoSAFER -dQUIET -sDEVICE=txtwrite -dFirstPage=3 -sOutputFile=\""+ Dir_input_path + Fil_input_path[:-2] + ".txt\" "+Dir_input_path + Fil_input_path, shell=True)
Ca fonctionne, mais lorsque j'essaye d'intégrer ce code
-c "<</Orientation 3>> setpagedevice"comme ci-dessous :
subprocess.call("C:\Progra~1\gs\gs9.55.0\\bin\gswin64c.exe -dbase -dBATCH -dNOPAUSE -dNoSAFER -dQUIET -sDEVICE=txtwrite -dFirstPage=3 -c \"<</Orientation 3>> setpagedevice\" -sOutputFile=\""+ Dir_input_path + Fil_input_path[:-2] + ".txt\" "+Dir_input_path + Fil_input_path, shell=True)
J'ai l'erreur suivante :
**** Unable to open the initial device, quitting.
CAS 2 : Autre méthode en passant les arguments
Je fais la conversion avec celle fonction, qui est lancée pour chaque fichier présent dans le répertoire de traitement.
def ps2txt(Dir_input_path, Fil_input_path):
args = ["ps2txt", # actual value doesn't matter
"-dPDFA",
"-dbase",
"-dBATCH",
"-dNOPAUSE",
"-dNoSAFER",
"-dQUIET"
"-dFirstPage=3", #Démarrage de la conversion à la page 3
"-dtextFormat=3",
"-sDEVICE=txtwrite", #Type de conversion ici en txt
"-sOutputFile=\""+ Dir_input_path + Fil_input_path[:-2] + "txt\"",
"-dEPSCrop",
Dir_input_path + Fil_input_path]
with ghostscript.Ghostscript(*args) as g:
ghostscript.cleanup()
Pas de soucis, mais là il manque la rotation de la page.
J'ajoute donc la ligne suivante :
"-c "^<^</Orientation 3^>^> setpagedevice"",ou
"-c \"<</Orientation 3>> setpagedevice\"",
Et lorsque je lance mon script python j'ai le message d'erreur suivant :
['ps2txt', '-dPDFA', '-dbase', '-dBATCH', '-dNOPAUSE', '-dNoSAFER', '-dQUIET-dFirstPage=3', '-dtextFormat=3', '-c "<</Orientation 3>> setpagedevice"', '-sDEVICE=txtwrite', '-sOutputFile="c:\\Import\\fichier.txt"', '-dEPSCrop', 'c:\\Import\\fichier.PS']
GPL Ghostscript 9.55.0 (2021-09-27)
Copyright (C) 2021 Artifex Software, Inc. All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
%%[ ProductName: GPL Ghostscript ]%%
Traceback (most recent call last):
File "C:\Python27\gsprint.py", line 150, in <module>
ps2txt (Directory_input, File_input)
File "C:\Python27\gsprint.py", line 53, in ps2txt
with ghostscript.Ghostscript(*args) as g:
File "C:\Python27\lib\site-packages\ghostscript\__init__.py", line 174, in Ghostscript
stderr=kw.get('stderr', None))
File "C:\Python27\lib\site-packages\ghostscript\__init__.py", line 74, in __init__
rc = gs.init_with_args(instance, args)
File "C:\Python27\lib\site-packages\ghostscript\_gsprint.py", line 271, in init_with_args
rc = libgs.gsapi_init_with_args(instance, len(argv), c_argv)
WindowsError: exception: access violation writing 0x00000000
Il évoque une violation d'écriture.
Le ^ ne semble pas changer grand chose malheureusement. Snif !
Je pense à un problème d'écriture et/ou d'interprétation dans les passages d'arguments. Mais je ne trouve pas où.
Merci encore.
au lieu d'écrire:
peux-tu écrire:
cela aiderait à comparer ce qui fonctionne directement dans un .cmd et ce qui ne fonctionne pas quand appelé par python.
pour tester, tu pourrais aussi, à partir du python, créer un fichier cmd, et verifier qu'il peut s'exécuter.
subprocess.call("C:\Progra~1\gs\gs9.55.0\\bin\gswin64c.exe -dbase -dBATCH -dNOPAUSE -dNoSAFER -dQUIET -sDEVICE=txtwrite -dFirstPage=3 -c \"<</Orientation 3>> setpagedevice\" -sOutputFile=\""+ Dir_input_path + Fil_input_path[:-2] + ".txt\" "+Dir_input_path + Fil_input_path, shell=True)
peux-tu écrire:
lacommande= "C:\Progra~1\gs\gs9.55.0\\bin\gswin64c.exe -dbase -dBATCH -dNOPAUSE -dNoSAFER -dQUIET -sDEVICE=txtwrite -dFirstPage=3 -c \"<</Orientation 3>> setpagedevice\" -sOutputFile=\""+ Dir_input_path + Fil_input_path[:-2] + ".txt\" "+Dir_input_path + Fil_input_path print("lacommande:", lacommande) subprocess.call( lacommande, shell=True)
cela aiderait à comparer ce qui fonctionne directement dans un .cmd et ce qui ne fonctionne pas quand appelé par python.
pour tester, tu pourrais aussi, à partir du python, créer un fichier cmd, et verifier qu'il peut s'exécuter.
Bon et bien l'approche systèmique est en effet la meilleur.
Merci pour cette ultime proposition de passer par une variable.
Déjà c'est plus facile à lire, ensuite j'ai rechercher à reproduire l'exact syntaxe, et là ca marche.
Il ne faut en effet oublier aucun argument, et l'ordre des arguments est important.
Du coup cette ligne de commande fonctionne :
Il est important de mettre le
Vous aurez remarqué le double slash à gs9.55.0\bin. parce que 0\b n'est pas interprété comme il faut.
Je test avec le passage d'arguments, et je vais aussi le faire pour la transformation PDF. Je vous livre les résultats après.
En tout cas commu super sympa, c'est un plaisir déchanger avec vous.
Merci pour cette ultime proposition de passer par une variable.
Déjà c'est plus facile à lire, ensuite j'ai rechercher à reproduire l'exact syntaxe, et là ca marche.
Il ne faut en effet oublier aucun argument, et l'ordre des arguments est important.
Du coup cette ligne de commande fonctionne :
LaCommande = "C:\Progra~1\gs\gs9.55.0\\bin\gswin64c.exe -dbase -dBATCH -dNOPAUSE -dNoSAFER -dQUIET -sDEVICE=txtwrite -dFirstPage=3 -sOutputFile=\""+ Dir_input_path + Fil_input_path[:-2] + "txt\" -dEPSCrop -c \"<</Orientation 3>> setpagedevice\" -f "+Dir_input_path + Fil_input_path
print (LaCommande)
subprocess.call(LaCommande, shell=True)
Il est important de mettre le
-c "<</Orientation 3>> setpagedevice"juste après le nom du fichier de sorti, et ne pas oublier le -f.
Vous aurez remarqué le double slash à gs9.55.0\bin. parce que 0\b n'est pas interprété comme il faut.
Je test avec le passage d'arguments, et je vais aussi le faire pour la transformation PDF. Je vous livre les résultats après.
En tout cas commu super sympa, c'est un plaisir déchanger avec vous.
J'ai testé via le passage d'arguments mais là ça bloque. En attendant voilà la ligne de commande pour une transformation PS en PDF.
LaCommande = "C:\Progra~1\gs\gs9.55.0\\bin\gswin64c.exe -dbase -dPDFA -dBATCH -dNOPAUSE -dNOPROMPT -dNoSAFER -dFirstPage=3 -sDEVICE=pdfwrite -sOutputFile=\""+ Dir_input_path + Fil_input_path[:-2] + ".pdf\" -dEPSCrop -c \"<</Orientation 3>> setpagedevice\" -f "+Dir_input_path + Fil_input_path
print (LaCommande)
subprocess.call(LaCommande, shell=True)