IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Ghostscript Conversion PS 2 PDF


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2022
    Messages : 5
    Par défaut Ghostscript Conversion PS 2 PDF
    Bonjour à tous,

    Je suis sur un projet en python 2.7. (je ne peux pas passer en 3 pour le moment).
    J'essaye de transformer un fichier .PS en .PDF avec le module intégrer GhostScript v 0.6.

    J'ai bien la conversion, mais mes fichiers sont illisibles avec acrobat.
    Y a t'il une astuce pour changer ça svp ?

    Voilà mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def ps2pdf(Dir_input_path, Fil_input_path):	
    	args = ["ps2pdf", # actual value doesn't matter
                "-sDEVICE=pdfwrite",	#Type de conversion ici en txt
    			"-sOutputFile=" + Dir_input_path + Fil_input_path + ".pdf",
                Dir_input_path + Fil_input_path]
    J'ai une question subsidiaire sur une transformation d'un .ps en .txt.
    J'essaye de faire tourner les pages. J'ai essayé d'intégrer la balise suivante, -c "<</Orientation 3>> mais il refuse systématiquement de l'executer.

    Voilà mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def ps2txt(Dir_input_path, Fil_input_path):	
    	args = ["ps2txt", # actual value doesn't matter
                "-dBATCH",				#
    			"-dNOPAUSE",			#
    			"-dNOPROMPT",			#
    			"-dSAFER",				#
    			"-dFIXEDMEDIA"			#
    			"-dFirstPage=3",        #Démarrage de la conversion à la page 3
                "-sDEVICE=txtwrite",	#Type de conversion ici en txt
    			"-sOutputFile=" + Dir_input_path + Fil_input_path + ".txt",
                Dir_input_path + Fil_input_path]
     
    	with ghostscript.Ghostscript(*args) as g:
    		ghostscript.cleanup()
    Avez vous une idée de comment faire svp ?

    Merci d'avance,
    C'est assez urgent et je m'arrache les cheveux pour finir dans les temps.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Votre code se réduit à lancer la conversion d'un postscript à un PDF via le programme externe ps2pdf.
    Les paramètres à passer à ce programme pour obtenir ce que vous voulez sont à rechercher dans la documentation de ce programme là et n'a rien à voir avec la programmation Python (et à mettre au point en lançant le programme depuis un terminal - sans python).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2022
    Messages : 5
    Par défaut
    Bonjour,

    Merci de cette réponse.

    Je code sur python, mais j'ai pas mal de choses à apprendre.
    J'ai installé via Pip le module Ghostscript suivant :

    https://pypi.org/project/ghostscript/0.6/

    Et je fais un import ghostscript en début de programme.

    En transférant les variables de ghostscript dans une variable python (arg) techniquement, je lance un exécutable hors python depuis python.
    Du coup, quelle est l'utilité du ghostscript 0.6 ?

    Mais du coup, je comprends encore moins pourquoi, lorsque je lance la ligne de commande dans une fenêtre DOS ça fonctionne,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Progra~1\gs\gs9.55.0\bin\gswin64c.exe -dPDFA -dbase -dBATCH -dNOPAUSE -dNoSafer -dQUIET -sDEVICE=pdfwrite -dFirstPage=3  -sOutputFile="c:\ProdGil\Out\LOALE21ZZ.ICDFQ400.V00.pdf" -dEPSCrop -c "<</Orientation 3>> setpagedevice" -f "c:\ProdGil\LOALE21ZZ.ICDFQ400.V00" -c quit

    et pourquoi pas directement dans le script. J'ai testé de mettre les " entre ', comme ça '"', et directement des ' autour de -c "<</Orientation 3>> setpagedevice".

    Idem, pourquoi mon fichier PDF est corrompu ?

    Sinon, quelles autres solutions de type Python pur, pour faire ce genre d'opération svp ?

    Merci d'avance.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par MBARON76 Voir le message
    Du coup, quelle est l'utilité du ghostscript 0.6 ?
    Vous avez récupéré cette bibliothèque... Ce qui suppose que vous avez pris le temps de l'évaluer par rapport à d'autres possibilités.

    Citation Envoyé par MBARON76 Voir le message
    Mais du coup, je comprends encore moins pourquoi, lorsque je lance la ligne de commande dans une fenêtre DOS ça fonctionne
    Lancer cette commande là via subprocess est une interface basique qui permet de l'utiliser depuis un programme Python.... Et elle fonctionne pour nombre de programmes externes.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2022
    Messages : 5
    Par défaut
    L'idée c'était surtout d'intégrer le code directement en lui passant les variables des différents fichiers à transformer dans le script plutôt que de recréer un .cmd et de définir des variables d'environnement.

    J'ai testé aussi avec un subprocess qui permet de lancer des commandes de manière asynchrone.
    Cela ne fonctionne pas beaucoup mieux.

    Tout cela semble assez évident pour vous, mais du haut de ma petite expérience, ça l'est beaucoup moins.

    Merci d'avoir pris du temps pour me répondre.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par MBARON76 Voir le message
    J'ai testé aussi avec un subprocess qui permet de lancer des commandes de manière asynchrone.
    La commande passée au terminal est une chaîne de caractères qu'on doit pouvoir passer à subprocess.call et avoir le même résultat.

    Après si on veut avoir quelques paramètres dynamiques comme le nom du fichier d'entrée ou de sortie, c'est juste une chaînes de caractère à construire à partir/avec des variables.

    Citation Envoyé par MBARON76 Voir le message
    Tout cela semble assez évident pour vous, mais du haut de ma petite expérience, ça l'est beaucoup moins.
    fabriquer des chaînes de caractères avec des bouts issus de variables est assez basique. Si vous ne maîtrisez pas, je comprends que ça paraisse "compliqué" mais vous ne pouvez pas partir à programmer (faire autre chose que des exercices proposés dans un tuto) sans maîtriser cela (et les facéties concernant les chemins d'accès aux fichiers).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2022
    Messages : 5
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    La commande passée au terminal est une chaîne de caractères qu'on doit pouvoir passer à subprocess.call et avoir le même résultat.

    Après si on veut avoir quelques paramètres dynamiques comme le nom du fichier d'entrée ou de sortie, c'est juste une chaînes de caractère à construire à partir/avec des variables.
    Je n'ai aucun soucis sur ce point ça fonctionne plutôt bien, c'est juste que j'ai le même problème pour faire tourner mon texte, et générer des fichiers PDF lisibles.


    Citation Envoyé par wiztricks Voir le message
    fabriquer des chaînes de caractères avec des bouts issus de variables est assez basique. Si vous ne maîtrisez pas, je comprends que ça paraisse "compliqué" mais vous ne pouvez pas partir à programmer (faire autre chose que des exercices proposés dans un tuto) sans maîtriser cela (et les facéties concernant les chemins d'accès aux fichiers).
    Pour ce qui est de l'utilisation des '"' et des """ voir des \" c'est en effet assez basic et j'ai déjà lu pas mal de choses à ce sujet. C'est plutôt de côté de la facétie que je m'interroge ?

    Pourquoi, lorsque je stock ceci dans une variable "-c '"'<</Orientation 1>> setpagedevice'"' ",,
    Il transforme mes " en ' ce qui donne "-c '<</Orientation 1>> setpagedevice' ", qui évidement n'est pas interprété par GhostScript.

    J'imagine qu'expliquer cette facétie ne vous posera aucun problème ?

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par MBARON76 Voir le message
    Pourquoi, lorsque je stock ceci dans une variable "-c '"'<</Orientation 1>> setpagedevice'"' ",,
    Il transforme mes " en ' ce qui donne "-c '<</Orientation 1>> setpagedevice' ", qui évidement n'est pas interprété par GhostScript.
    Dans les langages de programmation, on sait ou on fait n'importe quoi en espérant que çà va marcher... Et si vous écrivez n'importe quoi, il n'y a pas grand chose à expliquer!

    Pour savoir, c'est pas compliqué, il suffit de passer du temps dans les tutos... et si on patauge, c'est qu'il faut y retourner pour chercher à comprendre pourquoi çà ne le fait pas.

    Ou commence (et se termine) une chaîne de caractères sous forme littérale? Jouer avec l'interpréteur pour essayez de comprendre ce qu'il se passe ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> "c""c""c""c"
    'cccc'


    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2022
    Messages : 5
    Par défaut
    [QUOTE=wiztricks;11824041]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> "c""c""c""c"
    'cccc'
    C'est gentil de me rappeler les bases, dès fois que j'aurai pas compris...

    Ici, il s'agit de lancer un ghostscript via python ce qui nécessite une syntaxe particulière. Celle que je retrouve en exemple sur tous les forums que j'ai consulté, et qui fonctionne pour exécuter la transformation d'un .ps en .txt, .jpr ou ce que vous voulez.

    le contenu de la variable sous cette forme :

    ['ps2txt', '-dBATCH', '-dNOPAUSE', '-dNOPROMPT', '-dSAFER', '-dFIXEDMEDIA-dFirstPage=3', '-sDEVICE=txtwrite', '-sOutputFile=c:\\Prod\\Road\\2022\\20220316\\fichier.txt', '-dEPSCrop', 'c:\\Prod\\Road\\2022\\20220316\\fichier.ps']

    Ma question n'est donc pas de savoir comment constituer des variables de type string, mais d'intégrer un " dans une syntaxe cadrée par ghostscript pour avoir ceci '-c "<</Orientation 1>> setpagedevice"', d'inscrit literalement dans ma variable sous cette forme :

    ['ps2txt', '-dBATCH', '-dNOPAUSE', '-dNOPROMPT', '-dSAFER', '-dFIXEDMEDIA-dFirstPage=3', '-sDEVICE=txtwrite', '-sOutputFile=c:\\Prod\\Road\\2022\\20220316\\fichier.txt', '-dEPSCrop', '-c "<</Orientation 1>> setpagedevice"', 'c:\\Prod\\Road\\2022\\20220316\\fichier.ps']

    Libre à vous de me prendre de haut, mais j'ai bien l'impression que vous n'en savez pas plus que moi...

  10. #10
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 920
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par MBARON76 Voir le message
    Ma question n'est donc pas de savoir comment constituer des variables de type string, mais d'intégrer un " dans une syntaxe cadrée par ghostscript pour avoir ceci '-c "<</Orientation 1>> setpagedevice"', d'inscrit literalement dans ma variable sous cette forme :
    Bonjour,
    S'il s'agit de la construction de la string, le slash permet au caractère de ne pas être interprété:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> var = "\'-c \"<</Orientation 1>> setpagedevice\"\'"
    >>> print(var)
    '-c "<</Orientation 1>> setpagedevice"'
    >>>
    Mais, peut être que ta demande se situe ailleurs...
    ?

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par MBARON76 Voir le message
    Libre à vous de me prendre de haut, mais j'ai bien l'impression que vous n'en savez pas plus que moi...
    Toujours à l'interpréteur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> "a'a'a"
    "a'a'a"
    >>> 'a"a"a'
    'a"a"a'
    >>>
    si on peut délimiter la chaîne de caractères par " ou par ' c'est justement pour pouvoir y insérer ' ou " dedans.
    Autre facétie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> "a" 'a' "a"
    'aaa'
    >>>
    3 chaînes de caractères sous forme littérale séparées par des espaces sont interprétés comme une seule chaîne de caractères.

    Citation Envoyé par MBARON76 Voir le message
    C'est gentil de me rappeler les bases, dès fois que j'aurai pas compris...
    Par définition "comprendre", c'est arriver à faire quelque chose de ce que vous avez appris (comme maîtriser ce genre de situation en ayant fait ce genre de petits exercices).
    Et ce n'est pas le cas: potassez les bases...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [Python 2.X] ghostscript, conversion PDF vers Jpg, libérer le 1er fichier image et faire le suivant
    Par little_kevin dans le forum Général Python
    Réponses: 2
    Dernier message: 07/07/2020, 10h46
  2. Réponses: 1
    Dernier message: 15/01/2017, 09h24
  3. Problème conversion .rep en .pdf
    Par ruru9 dans le forum Deski
    Réponses: 9
    Dernier message: 07/12/2006, 16h48
  4. [FOP] conversion XML en PDF sous JBuilder10
    Par belassel_z dans le forum APIs
    Réponses: 1
    Dernier message: 09/06/2006, 13h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo