Как Windows печатает документы в формате PDF? - PullRequest
3 голосов
/ 21 декабря 2011

На моем аппарате при выборе нескольких документов PDF в проводнике Windows, щелкнув правой кнопкой мыши и выбрав Печать , Adobe Acrobat Reader открывается в свернутом виде, и все документы автоматически отправляются на принтер.

Я хочу сделать то же самое, что и Windows, но как это сделать?

Я использую ProcessStartInfo с глаголом PrintTo, как вы можете видеть в предыдущем вопросе .К сожалению, это все, кроме молчания, и у меня большие проблемы при печати более одного документа.Как узнать, когда приложение (обычно Adobe Reader) завершает печать?Если запустить несколько процессов printTo подряд, кажется, что один документ открывается до того, как предыдущий закончит печать.

Я бы хотел избежать жесткого кодирования Adobe Reader, потому что некоторые из моих пользователей обменяли его на Foxit Reader или другие..

1 Ответ

4 голосов
/ 21 декабря 2011

Я не знаю, сможете ли вы сделать это с другими программами просмотра PDF таким образом, чтобы эти программы просмотра заменяли Adobe Reader. Возможно, вам придется адаптировать его к каждой программе, которую вы хотите поддерживать. На самом деле не так сложно иметь Reader в своей системе, если это необходимо для выполнения работы, и большинство компьютеров поставляются с ней предустановленной.

Первое, что вам нужно знать, это то, что когда вы говорите ему печатать через этот глагол, через код или контекстное меню Проводника, вы делаете что-то вроде этого:

""C:\Program Files\Adobe\Reader 10.0\Reader\AcroRd32.exe"" /p /h "%1" 

Обратите внимание на аргументы: / p (указывает печатать) и / h (начало свернуто).

Есть еще один вариант. В документе Adobe Developer FAQ (http://partners.adobe.com/public/developer/en/acrobat/sdk/pdf/intro_to_sdk/DeveloperFAQ.pdf) говорится, что эта командная строка работает для каждого файла:

AcroRd32.exe /t path "printername" "drivername" "portname"

В документе указывается, что при этом запускается Adobe Reader и печатается файл, путь которого должен быть полностью указан, при этом закрывается диалоговое окно «Печать». (Скопировано из FAQ для разработчиков.)

Существует также опция / n, которая «запускает отдельный экземпляр Acrobat или Adobe Reader, даже если он в данный момент открыт». (Опять же, часто задаваемые вопросы для разработчиков.) Я думаю, это можно использовать для параллельного запуска нескольких заданий на печать.

Я нашел еще одну ссылку на командную строку по адресу: Справочник по командной строке Adobe Reader

Таким образом, вы можете перебирать свой список PDF-файлов, и для каждого из них начинать новый процесс печати с помощью вызова Process.Start и ждать его закрытия через Process.WaitForExit. Это заставит вашу программу зависать, и я ненавижу, когда программы зависают, когда они выполняют операции, так что вы должны действительно сделать это в отменяемом BackgroundWorker, который сообщает о прогрессе и все еще оставляет ваш графический интерфейс несколько интерактивным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...