Печать Python из python32

Я не могу заставить Python напечатать текстовый документ. Я пытаюсь открыть документ Word, распечатать его и закрыть. Я могу открыть Word и документ Word:

import win32com.client

msword = win32com.client.Dispatch("Word.Application") 
msword.Documents.Open("X:\Backoffice\Adam\checklist.docx")

msword.visible= True

Я попытался рядом с печатью

msword.activedocument.printout("X:\Backoffice\Adam\checklist.docx")

Я получаю сообщение об ошибке «распечатка недействительна».

Может ли кто-нибудь пролить свет на то, как я могу распечатать этот файл из Python. Я думаю, что это может быть так же просто, как изменить слово «распечатка». Спасибо, я новичок в Python.


person Trying_hard    schedule 03.11.2011    source источник


Ответы (2)


msword.ActiveDocument дает вам текущий активный документ. Метод PrintOut печатает этот документ: он не принимает имя файла документа в качестве параметра.

Из http://msdn.microsoft.com/en-us/library/aa220363(v=office.11).aspx:

expression.PrintOut(Background, Append, Range, OutputFileName, From, To, Item, 
  Copies, Pages, PageType, PrintToFile, Collate, FileName, ActivePrinterMacGX, 
  ManualDuplexPrint, PrintZoomColumn, PrintZoomRow, PrintZoomPaperWidth, 
  PrintZoomPaperHeight)

В частности, Word пытается использовать ваше имя файла как логическое значение Background, которое может быть установлено True для печати в фоновом режиме.

Изменить: регистр имеет значение, и ошибка немного странная. msword.ActiveDocument.Printout() должен его распечатать. msword.ActiveDocument.printout() выдает ошибку, жалуясь, что «PrintOut» не является свойством.

Я думаю, что внутренне происходит то, что Python пытается компенсировать, когда вы не соответствуете регистру в свойствах, но он не совсем подходит для методов. Или что-то в этом роде. ActiveDocument и activedocument взаимозаменяемы, а PrintOut и printout - нет.

person Duncan    schedule 03.11.2011
comment
Хорошо, я знаю, что это глупый вопрос, но мне просто нужно ввести диапазон, чтобы напечатать все, как - person Trying_hard; 03.11.2011
comment
ms.word.activedocument.printout(range=wdprintalldocument) или нужно вводить каждый символ сверху? - person Trying_hard; 03.11.2011
comment
Я получаю сообщение об исключении.', (0, 'Microsoft Word', 'PrintOut' не является свойством. - person Trying_hard; 03.11.2011
comment
Я отредактировал свой ответ: вам нужно использовать PrintOut с верблюжьим чехлом. - person Duncan; 03.11.2011

Вероятно, вам придется экранировать символ обратной косой черты \ с помощью \\:

msword.Documents.Open("X:\\Backoffice\\Adam\\checklist.docx")

EDIT: объяснение

Обратная косая черта обычно используется для объявления специальных символов. Например, \n — это специальный символ для новой строки. Если вам нужен буквальный \, вы должны его избежать.

person Constantinius    schedule 03.11.2011
comment
Кроме того, вы также можете использовать необработанные строки, где такие специальные символы невозможны: тогда "X:\\Backoffice\\Adam" будет равно r"X:\Backoffice\Adam". Это весьма полезно для разрешения копирования и вставки. - person Joël; 03.11.2011
comment
Спасибо, я могу заставить его открыть, это распечатка, которую я не могу выполнить - person Trying_hard; 03.11.2011
comment
Word открывается и файл открывается, но функция печати не выполняется? - person Trying_hard; 03.11.2011