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 :

imprimer un pdf


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Points : 31
    Points
    31
    Par défaut imprimer un pdf
    Bonjour à toutes et tous,

    J'ai trouvé dans le forum un sujet concernant mon problème mais les liens ne fonctionnent plus

    J'ai cherché sur google (car c'est souvent mon ami), mais je n'ai rien trouvé de concluant ou de fonctionnel

    j'aimerai pouvoir imprimer un document pdf à partir de python dans l'idéal quel que soit le lecteur (acrobat, chrome, nitro, ...)


    si vous avez de la doc ou un lien ce serait sympa.

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 071
    Points : 9 515
    Points
    9 515
    Par défaut
    Hello,
    Citation Envoyé par figuedi Voir le message
    J'ai trouvé dans le forum un sujet concernant mon problème mais les liens ne fonctionnent plus
    peux-tu nous dire où se trouve ce sujet car parfois on peut retrouver le contenu des liens morts dans les archives web.

    Ami calmant, J.P

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Points : 31
    Points
    31
    Par défaut
    j'ai trouvé via google :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import win32api
    FILE_PATH = 'c:\\users\\pdf\\tete^tetete.pdf'
    win32api.ShellExecute(0, "print", FILE_PATH, None, None, 0)
    avec un soucis sur l'importation du module Win32api

    qu'il faut installer via
    C:\Users\_______> pip install pywin32==306
    dans google il parlait de la version 225 mais tu as une erreur

    C:\Users\_______> pip install pywin32==225
    ERROR: Could not find a version that satisfies the requirement pywin32==225 (from versions: 303, 304, 305, 306)
    ERROR: No matching distribution found for pywin32==225

    Bon il imprime sur la printer par défaut mais je vais peut etre trouver un moyen de lui faire choisir ou de la définir

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 362
    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 362
    Points : 36 894
    Points
    36 894
    Par défaut
    Citation Envoyé par figuedi Voir le message
    qu'il faut installer via
    C:\Users\_______> pip install pywin32==306
    dans google il parlait de la version 225 mais tu as une erreur
    Une bibliothèque doit être compatible avec votre version de Python et normalement, par défaut, pip va trouver ce qu'il faut. Pourquoi forcer la version dans ce cas?

    Donner le printer à win32api.ShellExecute... passe par les paramètres passés None. A défaut d'ouvrir la documentation de l'API Windows, cherchez sur Internet et ça se trouve.

    - W

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Une bibliothèque doit être compatible avec votre version de Python et normalement, par défaut, pip va trouver ce qu'il faut. Pourquoi forcer la version dans ce cas?
    surement mais là il ne faisait rien et dans google il disait qu'il fallait forcer la version donc j'ai appliqué

    Donner le printer à win32api.ShellExecute... passe par les paramètres passés None. A défaut d'ouvrir la documentation de l'API Windows, cherchez sur Internet et ça se trouve.
    telle est bien mon intention

    Merci

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Points : 31
    Points
    31
    Par défaut
    C'est quand même étonnant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import win32api
    FILE_PATH = 'c:\\dfi_5012\\pdf\\tete^tetete.pdf'
    # Mon_Imprimante = 'Microsoft Print to PDF'
    # Mon_Imprimante = 'PDFCreator'
    # Mon_Imprimante = 'OneNote'
    # Mon_Imprimante = 'HP LaserJet 400 color M451dn UPD PCL 6'
    Mon_Imprimante = 'Nitro PDF Creator'
    # win32api.ShellExecute(0, "print", FILE_PATH, None, None, 0)
    win32api.ShellExecute(0, "printto", FILE_PATH, Mon_Imprimante, None, 0)
    Cela fonction sur PDf Creator et one note mais ça n'imprime pas sur les autres la vrai et les emulateurs (nitro, microsoft) et ce avec la commande print (en changeant l'imprimante par défaut) ou printto (en lui passant le nom de l'imprimante en argument

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 362
    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 362
    Points : 36 894
    Points
    36 894
    Par défaut
    Une chaine de caractères comme 'Nitro PDF Creator' contenant des espaces, ça aurait plus de chances de fonctionner en forçant les doubles quotes; '"Nitro PDF Creator"' (sauf autre soucis bien sur)

    - W

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Points : 31
    Points
    31
    Par défaut
    oui merci nickel

    Il y a une raison particulière ? ou c'est juste à cause des espaces ?

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 362
    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 362
    Points : 36 894
    Points
    36 894
    Par défaut
    Que peut bien faire un truc comme ShellExecute? Ca lance un programme externe avec des paramètres passés en tant que chaines de caractères... Des espaces la dedans feront que le paramètre sera découpé en autant d'arguments positionnels passé au programme externe dont il ne saura que faire.
    Ce ne sont pas les espaces qui sont en cause mais le défaut de double-quote pour q'ils survivent à la mécanique mise en branle par ShellExecute.

    - W

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Points : 31
    Points
    31
    Par défaut
    Le problème persiste et signe maintenant que j'ai fait lister les imprimantes et choisir l'imprimante que l'on voulait
    j'ai le même problème de double cote sauf que là c'est dans une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    import win32print
    import win32api
    import os
    from tkinter import filedialog
     
     
     
    Imprimante_Locale=[]
    Imprimante_Reseau=[]
     
    for (Flags, pDescription, pNameL, pComment) in list(
            win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL, None, 1)):
        Imprimante_Locale.append(pNameL)
     
    for (Flags, pDescription, pNameR, pComment) in list(
                win32print.EnumPrinters(win32print.PRINTER_ENUM_CONNECTIONS, None, 1)):
        Imprimante_Reseau.append(pNameR)
     
    for i in range(0, len(Imprimante_Locale)):
        print(i, '\t', Imprimante_Locale[i])
     
    choix = int(input("Merci de taper le nombre correspondant à l'imprimante sur laquelle vous voulez imprimer : "))
    Mon_Imprimante = Imprimante_Locale[choix]
    Mon_Imprimante2 = '"HP LaserJet 400 color M451dn UPD PCL 6"'
    FILE_PATH = 'c:\\dfi_5012\\pdf'
    fichier = filedialog.askopenfilename(initialdir=FILE_PATH)
    print("j'imprime le document ", fichier)
    win32api.ShellExecute(0, "printto", fichier, Mon_Imprimante2, None, 0)
    Comme je viens de lire ton commentaire, je vais rajouter des " a chaque variable devant et derrière et cela devrait marcher.

    Merci

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Points : 31
    Points
    31
    Par défaut
    C'était bien ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    choix = int(input("Merci de taper le nombre correspondant à l'imprimante sur laquelle vous voulez imprimer : "))
    Mon_Imprimante = '"' + Imprimante_Locale[choix] + '"'
    Il fallait juste forcer les doubles quotes et cela fonctionne.

    Merci

    pour la solution mais surtout pour les explications qui vont avec

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Points : 31
    Points
    31
    Par défaut
    d'ailleurs si il y a un espace dans le nom du fichier que l'on veut imprimer cela plante aussi
    ==> double quote là aussi

+ Répondre à la discussion
Cette discussion est résolue.

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