代码之家  ›  专栏  ›  技术社区  ›  David González Blazman

通过Python以双面打印模式打印PDF文件

  •  0
  • David González Blazman  · 技术社区  · 7 年前

    我有一个Python脚本,可以打印PDF文件。
    脚本使用 win32api.ShellExecute() 一切都很好,但现在,我需要打印有双面内容的PDF文件,具体的用户手册。
    我曾尝试在win32print中设置双面打印模式,但没有任何效果,打印机仍然在两张纸上打印我的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 回复  |  直到 7 年前
        1
  •  1
  •   Yuri Gendelman    7 年前

    尝试运行以下代码:

    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\u ACCESS\u administrate导致中的“访问被拒绝” 打开打印机。
    2. 在我的计算机上,SetPrinter失败,出现“访问被拒绝”。但“双面打印”是 正确设置。。
    推荐文章