Распечатать PDF-файл в дуплексном режиме через Python

У меня есть скрипт на Python, который печатает файлы PDF.
Скрипт работает с использованием win32api.ShellExecute() и все в порядке, но теперь мне нужно распечатать PDF-файлы с двусторонним содержимым, конкретные руководства пользователя.
Я попытался установить дуплексный режим в win32print, но ничего не работает, принтер по-прежнему печатает 2 страницы на 2 листах для моего PDF вместо двух страниц на двустороннем листе. Принтер работает с этим режимом в других приложениях, но со скриптом Python не работает хорошо. Это часть кода, который я использовал для печати:

name = win32print.GetDefaultPrinter()
printdefaults = {"DesiredAccess": win32print.PRINTER_ALL_ACCESS}
handle = win32print.OpenPrinter(name, printdefaults)
level = 2
attributes = win32print.GetPrinter(handle, level)
attributes['pDevMode'].Duplex
attributes['pDevMode'].Duplex = 1
win32print.SetPrinter(handle, level, attributes, 0)
win32print.GetPrinter(handle, level)['pDevMode'].Duplex
win32api.ShellExecute(0,'print','file.pdf','.','/route',0)

Есть идеи, почему это не работает? Благодарю.

1 ответ

Решение

Попробуйте запустить этот код:

import win32api
import win32print

name = win32print.GetDefaultPrinter()

#printdefaults = {"DesiredAccess": win32print.PRINTER_ACCESS_ADMINISTER}
printdefaults = {"DesiredAccess": win32print.PRINTER_ACCESS_USE}
handle = win32print.OpenPrinter(name, printdefaults)

level = 2
attributes = win32print.GetPrinter(handle, level)

print "Old Duplex = %d" % attributes['pDevMode'].Duplex

#attributes['pDevMode'].Duplex = 1    # no flip
#attributes['pDevMode'].Duplex = 2    # flip up
attributes['pDevMode'].Duplex = 3    # flip over

## 'SetPrinter' fails because of 'Access is denied.'
## But the attribute 'Duplex' is set correctly
try:
    win32print.SetPrinter(handle, level, attributes, 0)
except:
    print "win32print.SetPrinter: set 'Duplex'"

res = win32api.ShellExecute(0, 'print', 'test.pdf', None, '.', 0)

win32print.ClosePrinter(handle)

Он работает на моем компьютере: Windows 10, Python 2.7.14, pypiwin32-220

Заметки:

  1. На моем компьютере PRINTER_ACCESS_ADMINISTER вызывает "Доступ запрещен" в OpenPrinter.
  2. На моем компьютере SetPrinter не удается с "Доступ запрещен". Но "Дуплекс" настроен правильно..
Другие вопросы по тегам