2016-06-29 6 views
0

Я действительно мог бы использовать некоторую помощь, это вопрос, который многие люди спрашивают в Интернете. У меня разные настройки, пробовали разные способы тестирования, это очень расстраивает.Принтер spooler api количество копий

Первая установка:

  • локальные принтеры

  • местный бегущий код

  • печати из PDF или блокнота: SucceS (количество копий, 2)

  • печать с слово: FAILED (число копий 1)

Вторая установка:

  • локальные принтеры, которые совместно

  • местных бегущего код

  • печать с другого компьютера к общим принтерам

  • количество копий isalways 1

Соват пропал без вести? Что происходит, когда некоторые поля отсутствуют, пока принтер все еще должен знать, что печатать? Что означает слово, которое также происходит при печати с другого компьютера? Может ли кто-нибудь сказать мне, почему что-то в окнах так ужасно? Все должны пропускать спулер, sowhy isthedata неправильно?

С уважением!

+0

Этот поток также работает на MSDN: https://social.msdn.microsoft.com/Forums/en-US/d8d07a54-f74a-44c9-a18f-6878782b4961/print-spool-api-number-of-copies ? forum = csharpgeneral – Condra963

ответ

2

Принтер печатает листы и страницы, поэтому копии на какой-то стадии преобразуются в страницы.

Данные уведомления, которые вы получаете, зависят как от приложения, которое печатает, так и от компонентов системы и драйвера, обрабатывающих буферизацию и визуализацию. По моему опыту, на данные нельзя положиться, и лучшие данные получаются путем разбора файла спула. Это может содержать или не содержать количество копий.

Word has had the "copies problem" for a long time. Был patch to supposedly fix this, но другое мнение состоит в том, что это потому, что оно использует unusual way of printing. Я процитирую некоторые из содержания ссылок здесь:

С позорным Словом Copy Count жуком ... в dmCopies подал 1 в SHD. Правильное значение найдено в записи DEVMODE в файле SPL (если это катушка EMF).

Единственный способ я нашел в том, чтобы контролировать поле PrintedPages из JOB_INFO_2 структуры, когда работа была отправлена ​​на принтер, и посмотреть, если он кратен TotalPages.

[...]

Что происходит, это не ошибка Word, но ошибка Windows. Word вызывает startDoc всегда с копиями, установленными в 1.После этого вызовы DocumentProperties и вносят изменения в dmCopies и вызывают ResetDC для обновления. Это - это странный способ печати, но не ошибается. Проблема заключается в том, что shd-файл и printer_info не обновляются этой информацией, только хранит информацию об Devmode, установленную в вызове StartDoc.

Но вызов ResetDC, создающего новый DevMode, хранится в файле SPL . Вы также можете получить эту информацию, если перехватили вызовы API DocumentProperties .

+0

Я разрабатывал драйверы Windows для печати в течение многих лет, и я засвидетельствую, что все продукты MS Office являются одними из самых печально известных приложений печати. Все они используют необычные методы, практически никакие другие приложения не используют. –

1

Благодарим за ответ. Есть ли способ уловить свойства документа при их изменении?

Структура JOB_INFO_2 имеет одинаковые итоговые_страницы как pages_printed. Так что это не решение.

Файл SPL содержит QTY для принтера, на котором я тестировался, на котором это правильно. НО мы тестировали много принтеров, и мы видим, что QTY не всегда установлен. Так что не 100% -ное решение. Но уже неплохой запас.

Так что, если я могу поймать свойства документа, не вызвав файл SPL, это было бы замечательно, потому что я думаю, что там все правильно. Не так ли?

+0

Это не работает, чтобы публиковать ваши комментарии в качестве ответа, и это то, что вы сделали. Человек, с которым вы пытаетесь обратиться, вероятно, не имеет понятия, что вы разместили это. Отправьте комментарий к его ответу, если вам все еще нужно спросить. –

+1

И чтобы ответить на ваш вопрос, для вызова вызовов DocumentProperties потребуется некоторая инъекция кода. Эти вызовы переходят от приложения к GDI к драйверу печати, и вам придется перехватить их. Очевидно, что это дорогостоящий вариант с высоким риском. Как сказал Ник Вестгейт в своем ответе, ваши лучшие данные будут файлом спула. Разборки тоже не простыни. –

+0

Да, если вы можете установить на каждого клиента, вы можете попробовать подключить API DocumentProperties с помощью DLL-инъекции, но у IIRC у вас могут возникнуть проблемы с драйверами, использующими нестандартные DEVMODE. Windows GDI-печать - беспорядок, и новый путь XPS не так много говорит. –

 Смежные вопросы

  • Нет связанных вопросов^_^