Solución:
Finalmente, después de horas y horas de buscar los archivos correctos, he encontrado la respuesta a mi problema.
Puede descargar GSPRINT en AQUÍ
Puede descargar Ghostscript GPL en AQUÍ
Con estos archivos extraídos en su PC (Windows) puede imprimir su PDF con este comando
GHOSTSCRIPT_PATH = "C:\path\to\GHOSTSCRIPT\bin\gswin32.exe"
GSPRINT_PATH = "C:\path\to\GSPRINT\gsprint.exe"
# YOU CAN PUT HERE THE NAME OF YOUR SPECIFIC PRINTER INSTEAD OF DEFAULT
currentprinter = win32print.GetDefaultPrinter()
win32api.ShellExecute(0, 'open', GSPRINT_PATH, '-ghostscript "'+GHOSTSCRIPT_PATH+'" -printer "'+currentprinter+'" "PDFFile.pdf"', '.', 0)
El GhostScript también se puede encontrar en la página oficial AQUÍ
Encontré el gsprint.exe para 64 bits AQUÍ
Espero que esto ayude.
Aquí hay una forma de imprimir silenciosamente un pdf en el mismo directorio que su script de Python sin gsprint
y sin win32api
. Permite una mayor personalización de GhostScript, como elegir ancho / alto, etc.
import os
import subprocess
import sys
if sys.platform == 'win32':
args=""C:\\Program Files\\gs\\gs9.23\\bin\\gswin64c" "
'-sDEVICE=mswinpr2 '
'-dBATCH '
'-dNOPAUSE '
'-dFitPage '
'-sOutputFile="%printer%myPrinterName" '
ghostscript = args + os.path.join(os.getcwd(), 'myFile.pdf').replace('\', '\\')
subprocess.call(ghostscript, shell=True)
Si está usando la versión de 32 bits de GhostScript, entonces usaría gswin32c
El siguiente código bloqueará la tarea actual
for i in range(10):
currentprinter = win32print.GetDefaultPrinter()
win32api.ShellExecute(0, "print", 'PDFfile.pdf', '/d:"%s"' % currentprinter, ".", 0)
y matar al lector después de imprimir la ayuda no bloqueará la tarea actual
os.system("TASKKILL /F /IM AcroRD32.exe")
pero también cerrará otros archivos pdf.
Si no puede usar gsprint, use el comando acrobat
import win32print
import subprocess
import time
pdf_file="D:d1d1.pdf"
acrobat="C:Program Files (x86)AdobeAcrobat Reader DCReaderAcroRd32.exe"
name = win32print.GetDefaultPrinter()
cmd = '"{}" /n /o /t "{}" "{}"'.format(acrobat, pdf_file, name)
for i in range(10)):
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
No bloqueará la tarea actual ni cerrará los otros archivos pdf.