PDF in Python unter Windows drucken: Verwenden Sie eine externe Anwendung

Ich habe versucht, eine Möglichkeit zu finden, eine PDF-Datei mit Python unter Windows zu drucken.

Dieses Mal rufen wir eine externe Anwendung zum Drucken auf.

Nachtrag: 03.07.2015: Der Beispielcode kann mit python [Dateiname] erstellt werden. Einige sind unterschiedlich und es sind keine Ausnahmen enthalten. Bitte überprüfen Sie den Code für Details.

Verwenden Sie die Befehlszeile von Adobe Reader und Adobe Acrobat

Befehlszeilenoptionen für Acrobat und Adobe Reader

Adobe Reader und Adobe Acrobat verfügen über Befehlszeilenoptionen. Sie können es in einem anderen Prozess (Instanz) starten oder den Druckvorgang so ausführen, wie er ist.

Das Beispiel hier verwendet Adobe Acrobat. (Acrobat.exe) Adobe Reader verwendet AcroRd32.exe. Der Installationspfad hängt auch von der Version ab. Ist der Nachteil, dass das Urteil problematisch ist?

Referenz: PDFs mit Python drucken? | GeoNet

Zeigen Sie den Druckdialog von Adobe Reader an und drucken Sie dann

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)

Drucken, ohne den Druckdialog von Adobe Acrobat anzuzeigen (stiller Modus)

Diese Methode erfordert einen Druckernamen. (Ich habe nicht überprüft, ob es keine gibt. Bitte kommentieren Sie jemanden)

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)

Verwenden Sie Pywin32: Win32API.ShellExecute

Verwenden Sie ShellExecute in der in Pywin32 verfügbaren Windows-API.

ShellExecute-Funktion

Mit ShellExecute können Sie open zum Öffnen in der zugehörigen Anwendung und print to print verwenden.

Es scheint mit diesem Skript zu funktionieren, aber in meiner Umgebung gab es Zeiten, in denen ich drucken konnte und Zeiten, in denen ich nicht konnte.

Referenz:

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)

Verwenden Sie GSPrint

Drucken Sie mit einer Befehlszeilenanwendung namens GSPrint (im Lieferumfang von GSView enthalten), die Ghostscript verwendet.

Installieren Sie zuerst Ghostscript und GSView. (Die zum Zeitpunkt der Überprüfung verwendete Version ist die Originalversion, aber ich denke, die japanische Version ist wahrscheinlich dieselbe.)

Ghostscript 9.16 and GSview 5.0 J (Official Site)

Verwenden Sie dann das Unterprozessmodul, um den Befehl auszuführen.

Wenn Sie die Option -query nicht angeben, wird sie unverändert gedruckt.

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"
 
    # -Rufen Sie die Druckerliste mit der Option quert auf
    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)

Da die Einstellung des Papierformats zum Zeitpunkt des Drucks nicht aktiviert werden kann, scheint es keine andere Wahl zu geben, als die Vergrößerung / Verkleinerung auf der Druckerseite einzustellen, nachdem der Druckdialog mit -query angezeigt wurde. Der von mir verwendete PX-1700F funktioniert jedoch aus irgendeinem Grund nicht, selbst wenn er vergrößert und gedruckt ist. Ist dies ein Problem auf der Druckerseite?

(Ich habe es später versucht, aber wenn das Papierformat des Druckers und das in der Datei festgelegte Papierformat übereinstimmen, wird es wunderbar gedruckt.)

Zum Zeitpunkt des Drucks war die Farbe monochrom, daher kann es erforderlich sein, sie auf der GSPrint-Seite im Voraus anzugeben. (Ich habe es nicht im Detail überprüft, aber wenn Sie sich die Optionen ansehen, müssen Sie es festlegen.)

Referenz:

(Vielleicht) weiter

Es scheint eine andere Möglichkeit zu geben, dies mit dem in Python verfügbaren GUI-Toolkit zu tun. Ich habe so etwas in wxpython und pyqt (pyside) gefunden, aber ich habe es noch nicht überprüft. Wenn ich es überprüfen kann, werde ich die Fortsetzung schreiben.

Wenn Sie eine gute Druckmethode kennen, würde ich mich freuen, wenn Sie sie in die Kommentare schreiben könnten.

Recommended Posts

PDF in Python unter Windows drucken: Verwenden Sie eine externe Anwendung
Verwenden Sie Python unter Windows (PyCharm)
Verwenden Sie Xming, um eine Ubuntu-GUI-Anwendung unter Windows zu starten.
Verwenden Sie print in Python2 lambda expression
Verwenden Sie es, ohne Python 2.x unter Windows zu installieren
Sakura Verwenden Sie das externe Python-Modul im Internet
Ich möchte Python in der Umgebung von pyenv + pipenv unter Windows 10 verwenden
Verwenden Sie config.ini mit Python
Verwenden Sie Datumsangaben in Python
PDF mit Python rastern
Verwenden Sie Valgrind mit Python
Verwenden Sie pyvenv unter Windows
Python Basic ② in Windows
Installieren Sie Python unter Windows
Verwenden Sie den Profiler in Python
Verwenden Sie Ansible unter Windows
Verwenden Sie QuTiP unter Windows
Verwenden Sie pip unter Windows
Bis zum Zeichnen eines 3D-Diagramms mit Python in Windows 10
Schließen Sie externe Kv-Dateien in Python Kivy ein und verwenden Sie sie
Zeigen Sie Bilder in OpenCV von Python mit einer externen USB-Kamera auf Ihrem MacBook an
Aktivieren Sie Python virtualenv unter Windows
Mal sehen, wie def in Python verwendet wird
Führen Sie Openpose unter Python (Windows) aus.
Verwenden Sie matplotlib unter Ubuntu 12 und Python
Verwenden Sie den let-Ausdruck in Python
Verwenden Sie den Parameterspeicher in Python
OCR aus PDF in Python
Verwendung von VS-Code in einer venv-Umgebung mit Windows
Python + Kivy-Entwicklung unter Windows
Führen Sie externe Befehle mit Python aus
Verwenden Sie in Python ein Diktat mit Listenschlüssel
[Einführung in die Udemy Python3 + -Anwendung] 36. Verwendung von In und Not
Sphinx-Autobuild (0.5.2) unter Windows7, Python 3.5.1, Sphinx 1.3.5
Erstellen Sie eine Python-Umgebung unter Windows
Verwenden Sie Random Forest mit Python
Verwenden Sie Spyder von Python IDE
Erstellen Sie eine Python-Umgebung mit Windows
Ich habe Python unter Windows ausgeführt
Externe Befehlsausführung in Python
[Python] [Chainer] [Windows] Chainer unter Windows installieren
Python-Installation in 2 Zeilen @Windows
Verwenden Sie Linux unter Windows 10 (WSL2)
Wettbewerb mit VS-Code Erstellen Sie eine Python-Umgebung für Profis unter Windows
Wenn Sie nicht weiterkommen, können Sie mkl_intel_thread.dll in Python unter Windows nicht laden
Ein Fehler beim Einfügen von Pygame in Python3 auf Himbeer-Pi wurde behoben
Ein Spiel für ein Abenteuer im interaktiven Python-Modus
Wenn ich eine Fehlermeldung mit Pylint unter Windows Atom erhalte
So verwenden Sie Python in Pyenv unter MacOS mit PyCall
Verwendung eines externen Editors für die Python-Entwicklung mit Grasshopper
[Python] Mit Tkinter mehrere Fenster anzeigen
Python-Umgebungskonstruktionsnotiz unter Windows 10
Python 3.6 unter Windows ... und zu Xamarin.
Installieren von Kivy unter Windows 10 64bit Python3.5
Suchen Sie mit Python nach externen Befehlen
Drücken Sie einen Befehl in Python (Windows)
Aufbau einer Anaconda-Python-Umgebung unter Windows 10
Konvertieren Sie Markdown in Python in PDF