Imprimer un PDF en Python sous Windows: utiliser une application externe

J'ai essayé de trouver un moyen d'imprimer un PDF en utilisant Python sur Windows.

Cette fois, nous appellerons une application externe pour imprimer.

Addendum: 03/07/2015: L'exemple de code peut être fait avec python [filename]. Certains sont différents et aucune exception n'est incluse. Veuillez vérifier le code pour plus de détails.

Utilisez la ligne de commande d'Adobe Reader et d'Adobe Acrobat

Options de ligne de commande Acrobat et Adobe Reader

Adobe Reader et Adobe Acrobat ont des options de ligne de commande. Vous pouvez le démarrer dans un autre processus (instance) ou lancer l'impression telle quelle.

L'exemple ici utilise Adobe Acrobat. (ʻAcrobat.exe) Adobe Reader utilise ʻAcroRd32.exe. Le chemin d'installation dépend également de la version. L'inconvénient est-il que le jugement est gênant?

Référence: Imprimer des PDF avec Python? | GeoNet

Affichez la boîte de dialogue d'impression d'Adobe Reader, puis imprimez

https://gist.github.com/hrsano645/ddd5c111204338576404

# coding: utf-8
from __future__ import division, print_function, absolute_import, unicode_literals

import subprocess
import sys

# ref: https://geonet.esri.com/thread/59446
# ref: https://helpx.adobe.com/jp/acrobat/kb/510705.html

def main(pdffile):
    # acroread = r'C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe'
    acrobat = r'C:\Program Files (x86)\Adobe\Acrobat 11.0\Acrobat\Acrobat.exe'
    
    # '"%s"'is to wrap double quotes around paths
    # as subprocess will use list2cmdline internally if we pass it a list
    # which escapes double quotes and Adobe Reader doesn't like that
    
    cmd = '"{}" /P "{}"'.format(acrobat, pdffile)
    
    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    stdout, stderr = proc.communicate()
    exit_code = proc.wait()


if __name__ == '__main__':
    pdffile = sys.argv[1]
    main(pdffile)

Imprimer sans afficher la boîte de dialogue d'impression d'Adobe Acrobat (mode silencieux)

Cette méthode nécessite un nom d'imprimante. (Je n'ai pas vérifié s'il n'y en a pas. Veuillez commenter quelqu'un)

https://gist.github.com/hrsano645/a16c3f35deac04b2b4d9

# coding: utf-8
from __future__ import division, print_function, absolute_import, unicode_literals

import subprocess
import sys

# ref: https://geonet.esri.com/thread/59446
# ref: https://helpx.adobe.com/jp/acrobat/kb/510705.html


def main(pdffile, printer_name):
    # acroread = r'C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe'
    acrobat = r'C:\Program Files (x86)\Adobe\Acrobat 11.0\Acrobat\Acrobat.exe'

    # '"%s"'is to wrap double quotes around paths
    # as subprocess will use list2cmdline internally if we pass it a list
    # which escapes double quotes and Adobe Reader doesn't like that

    cmd = '"{}" /N /T "{}" "{}"'.format(acrobat, pdffile, printer_name)

    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    stdout, stderr = proc.communicate()
    exit_code = proc.wait()


if __name__ == '__main__':
    pdffile = sys.argv[1]
    printer_name = sys.argv[2]
    main(pdffile, printer_name)

Utilisez Pywin32: Win32API.ShellExecute

Utilisez ShellExecute dans l'API Windows disponible dans Pywin32.

Fonction ShellExecute

Avec ShellExecute, vous pouvez utiliser open pour ouvrir dans l'application associée et imprimer pour imprimer.

Cela semble fonctionner avec ce script, mais dans mon environnement, il y avait des moments où je pouvais imprimer et des moments où je ne pouvais pas.

référence:

https://gist.github.com/hrsano645/b69b071de4b8cb59cbe9

# coding: utf-8
from __future__ import division, print_function, absolute_import, unicode_literals
 
# ref: http://timgolden.me.uk/python/win32_how_do_i/print.html
# ref: http://docs.activestate.com/activepython/2.7/pywin32/win32api__ShellExecute_meth.html
 
import win32api
import sys
 
 
if __name__ == '__main__':
    pdf_file_name = sys.argv[1]
    win32api.ShellExecute(0, "print", pdf_file_name, None, ".", 0)

Utilisez GSPrint

Imprimez à l'aide d'une application de ligne de commande appelée GSPrint (incluse avec GSView) qui utilise Ghostscript.

Tout d'abord, installez Ghostscript et GSView. (Celle utilisée au moment de la vérification est la version originale, mais je pense que la version japonaise est probablement la même)

Ghostscript 9.16 and GSview 5.0 J (Official Site)

Utilisez ensuite le module de sous-processus pour exécuter la commande.

Si vous ne spécifiez pas l'option -query, elle sera imprimée telle quelle.

https://gist.github.com/hrsano645/fe73570d0d5d8df4863a

# coding: utf-8
from __future__ import division, print_function, absolute_import, unicode_literals
 
import subprocess
import sys
 
 
# ref: http://stackoverflow.com/questions/4498099/silent-printing-of-a-pdf-in-python
# ref: http://stackoverflow.com/questions/1462842/print-pdf-document-with-pythons-win32print-module
 
def main(pdffile):
    gsprint = r"C:\Program Files\Ghostgum\gsview\gsprint.exe"
 
    # -Appelez la liste des imprimantes avec l'option quert
    cmd = '"{}" -query "{}"'.format(gsprint, pdffile)
 
    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    stdout, stderr = proc.communicate()
    exit_code = proc.wait()
 
 
if __name__ == '__main__':
    pdffile = sys.argv[1]
    main(pdffile)

Remarque importante, étant donné que le réglage du format de papier au moment de l'impression ne peut pas être utilisé, il semble qu'il n'y ait pas d'autre choix que de régler l'agrandissement / la réduction côté imprimante après l'affichage de la boîte de dialogue d'impression avec -query. Cependant, le PX-1700F que j'utilise ne fonctionne pas pour une raison quelconque, même s'il est agrandi et imprimé. Est-ce un problème côté imprimante?

(Je l'ai essayé plus tard, mais si le format de papier de l'imprimante et le format de papier défini dans le fichier correspondent, il s'imprime magnifiquement.)

Au moment de l'impression, la couleur était monochrome, il peut donc être nécessaire de la spécifier à l'avance côté GSPrint. (Je ne l'ai pas vérifié en détail, mais si vous regardez les options, vous devez le définir.)

référence:

(Peut-être) continuer

Il semble y avoir une autre façon de faire cela en utilisant la boîte à outils GUI disponible en Python. J'ai trouvé quelque chose comme ça dans wxpython et pyqt (pyside), mais je ne l'ai pas encore vérifié. Si je peux le vérifier, j'écrirai la suite.

De plus, si vous connaissez une bonne méthode d'impression, je vous serais reconnaissant de bien vouloir l'écrire dans les commentaires.

Recommended Posts

Imprimer un PDF en Python sous Windows: utiliser une application externe
Utiliser Python sur Windows (PyCharm)
Utilisez Xming pour lancer une application GUI Ubuntu sous Windows.
Utiliser l'impression dans l'expression lambda Python2
Utiliser sans installer python 2.x sous Windows
Sakura Utiliser le module externe Python sur Internet
Je souhaite utiliser Python dans l'environnement de pyenv + pipenv sous Windows 10
Utilisez config.ini avec Python
Utiliser des dates en Python
Pixelliser un PDF avec Python
Utiliser Valgrind avec Python
Utilisez pyvenv sous Windows
python basic ② sous windows
Installez python sur Windows
Utiliser le profileur en Python
Utilisez Ansible sur Windows
Utilisez QuTiP sur Windows
Utiliser pip sur Windows
Jusqu'à dessiner un graphe 3D avec Python dans Windows10
Inclure et utiliser des fichiers Kv externes avec Python Kivy
Afficher des images dans OpenCV à partir de Python à l'aide d'une caméra USB externe sur votre MacBook
Activer Python virtualenv sous Windows
Voyons comment utiliser def en python
Exécutez Openpose sur Python (Windows)
Utilisez matplotlib sur Ubuntu 12 et Python
Utiliser l'expression let en Python
Utiliser le magasin de paramètres en Python
OCR à partir de PDF en Python
Comment utiliser VS Code dans un environnement Venv avec Windows
Développement Python + Kivy sous Windows
Exécuter des commandes externes avec python
Utilisez l'ODM de MongoDB avec Python
Utiliser un dict clé de liste en Python
[Introduction à l'application Udemy Python3 +] 36. Utilisation de In et Not
Sphinx-autobuild (0.5.2) sous Windows7, Python 3.5.1, Sphinx 1.3.5
Créer un environnement Python sur Windows
Utiliser Random Forest avec Python
Utilisez Spyder de Python IDE
Construire un environnement Python avec Windows
J'ai exécuté python sur Windows
Exécution de commandes externes en Python
[Python] [Chainer] [Windows] Installer Chainer sous Windows
Installation de Python en 2 lignes @Windows
Utiliser Linux sur Windows 10 (WSL2)
Concurrence avec VS Code Créez un environnement Python pour les professionnels sous Windows
Si vous êtes bloqué dans Impossible de charger mkl_intel_thread.dll en Python sous Windows
Résolution d'une erreur lors de la mise en place de pygame dans python3 sur raspberry pi
Un jeu pour partir à l'aventure en mode interactif de python
Quand j'obtiens une erreur avec Pylint sur Windows Atom
Pour utiliser python, mettez pyenv sur macOS avec PyCall
Comment utiliser un éditeur externe pour le développement Python avec Grasshopper
[Python] Afficher plusieurs fenêtres avec Tkinter
Mémo de construction de l'environnement Python sur Windows 10
Python 3.6 sous Windows ... et vers Xamarin.
Installation de Kivy sur Windows10 64 bits Python3.5
Rechercher des commandes externes avec python
Appuyez sur une commande en Python (Windows)
Construction de l'environnement Anaconda Python sous Windows 10
Convertir Markdown en PDF en Python