#wpf #printing #.net-4.0 #ms-word
#wpf #печать #.net-4.0 #ms-word
Вопрос:
Я создаю приложение WPF на C # и .NET 4, и мне нужно распечатать две копии одного и того же файла. У меня есть следующий код, который выполняет работу, но это не так красиво, поскольку Word открывается дважды.
Process myProcess = new Process();
myProcess.StartInfo.FileName = invoiceFileAbsoluteStoreagePath;
myProcess.StartInfo.Verb = "Print";
myProcess.StartInfo.CreateNoWindow = true;
//Print out two copies - ugly! - no better way apparently
myProcess.Start();
myProcess.WaitForExit();
//Let's do it again... there need to be a better way :(
myProcess.Start();
myProcess.WaitForExit();
Не могу ли я каким-либо образом отправить аргумент в Word, сообщающий, что мне нужны X копий из этого документа?
Ответ №1:
Обычно я выполняю печать с помощью документов потока WPF. Оттуда вы можете просто создать страницу WPF, вызвать на ней команду печати, автоматически заполнить количество копий и выполнить задание на печать. Если у вас всего несколько документов, вы можете воссоздать их в XAML и даже ввести в них данные. Запуск занимает немного времени, но после реализации он выполняется довольно быстро. Нет вступительного слова. Просто откройте XML-файл как XamlDocument, введите данные через ViewModel и распечатайте.
Хотя это не относится конкретно к документам потока, это поможет вам в этом.
Комментарии:
1. Спасибо, но, честно говоря, печать одного файла Word (.docx) кажется большой работой. У меня есть файл «template» .docx, который я заполняю и сохраняю на жестком диске. После этого мне нужно распечатать файл в два раза больше — вот и все. Ваше предложение, похоже, делает гораздо более динамичный материал.
2. Я реализовал это для проекта, над которым работал некоторое время назад. У нас было 3 документа (начинались как один). Мне потребовалось около 2 часов, чтобы создать шаблоны документов в WPF, еще час, чтобы создать виртуальные машины и распечатать код. После синхронизации запуска Word и процесса печати, который мы использовали (около 6 секунд) 40 раз в день при 260 рабочих днях в году, у меня получилось использовать 17 часов. В новом процессе задание на печать выполнялось на принтере почти мгновенно (менее 1/8 секунды), что позволило сэкономить большую часть из этих 17 часов. Я сделал его довольно модульным, чтобы позже можно было добавить дополнительные документы, сохранив больше…