Як друкувати файли xps програмним способом

Для друку файлів Формат XPS (XML Paper Specification) можна використовувати перевантаження методу AddJob не відкриваючи PrintDialog або, в принципі, взагалі призначений для користувача інтерфейс.

Можна також надрукувати файли Формат XPS (XML Paper Specification) за допомогою методів Write і WriteAsync об'єкта XpsDocumentWriter. Для отримання додаткових відомостей про це див. Друк документа XPS.

Інший спосіб друку Формат XPS (XML Paper Specification) полягає у використанні методів PrintDocument або PrintVisual елемента управління PrintDialog. Див. Розділ Практичний посібник. Виклик діалогового вікна друку.

Нижче наведені основні кроки використання методу AddJob (String, String, Boolean) з трьома параметрами. Наведений нижче приклад містить докладні відомості.

Визначте, чи є принтер принтером XPSDrv. (Додаткові відомості про драйвер XPSDrv см. В розділі Загальні відомості про друк.)

Якщо принтер не є принтером XPSDrv, встановіть підрозділ потоку на однопотокові.

Створіть екземпляр сервера друку і об'єкт черги друку.

Викличте метод, вказавши ім'я завдання, файл для друку і прапор Boolean. вказує, чи є принтер принтером XPSDrv.

У прикладі, який наведений нижче, показано, як виконати пакетну друк всіх файлів XPS каталогу. Хоча додаток пропонує користувачеві вказати каталог, метод з трьома параметрами AddJob (String, String, Boolean) не вимагає для користувача інтерфейс. Його можна використовувати в будь-якому шляху коду, де є ім'я файлу XPS і шлях, який можна використовувати для його передачі.

Перевантаження методу AddJob (String, String, Boolean) з трьома параметрами для AddJob повинна виконуватися в однопотоковому підрозділі, коли параметр Boolean приймає значення false. яке він повинен приймати при використанні принтера XPSDrv. Однак за замовчуванням сотояние підрозділ Microsoft .NET є багатопотокових. Це значення за замовчуванням має бути скасовано, оскільки в прикладі передбачається, що використовується принтер НЕ XPSDrv.

Існує два способи, щоб змінити значення за замовчуванням. Одним з них є просте додавання STAThreadAttribute (тобто "[System.STAThreadAttribute ()]") безпосередньо над першим рядком методу Main додатки (зазвичай, «static void Main (string [] args)»). Однак багато додатків вимагають, щоб метод Main мав стан багатопотокового підрозділу, тому існує другий метод: приміщення виклику методу AddJob (String, String, Boolean) в окремий потік, стан підрозділи якого встановлено значення STA. з методом SetApartmentState. У прикладі, який наведений нижче, використовується цей другий метод.

Відповідно, приклад починається зі створення екземпляра об'єкта Thread і передачі його методу PrintXPS як параметра ThreadStart. (Метод PrintXPS визначається пізніше в цьому прикладі). Далі потік встановлюється в однопотокові підрозділ. Новий потік запускає тільки залишився код методу Main.

Суть прикладу міститься в методі static BatchXPSPrinter.PrintXPS. Після створення сервера друку і черги метод пропонує користувачеві вибрати каталог, що містить файли XPS. Після перевірки існування каталогу і наявності в ньому файлів xps метод додає кожен такий файл в чергу друку. Передбачається, що принтер є не XPSDrv принтером, тому ми передаємо значення false останнім параметром методу AddJob (String, String, Boolean). З цієї причини, метод буде перевіряти розмітку XPS в файлі перед спробою перетворення його в мову опису сторінок принтера. Якщо перевірка завершилася невдало, викликається виняток. Приклад коду отримає виняток, повідомить про нього користувача і перейде до обробки наступного файлу XPS.

Схожі статті