Я использую:Слово Interop 2007 выпуск бесшумный печать
- Office 2007
- VC# Экспресс 2010
- 1x Citrix виртуальной среде XP сети доступны через Windows, 7 ноутбук хозяина
- 1x принтер установлен вывод в .prn в данном сетевом подключенном приводе
Я использую C# и Word Interop для бесшумной печати заданного набора файлов autom матически. Приложение сканирует входную папку каждые 10 минут только для файлов .doc/.docx и вводит их путь & filename в список. Foreach нашел файл, попытка напечатать с помощью следующего кода:
public static Boolean PrintFoundFiles(List<string> foundFiles)
{
successful = false;
foreach (string file in foundFiles)
{
object fileAndPath = file; //declare my objects here, since methods want an object passed
object boolTrue = true; //
object boolFalse = false; //
object output = FormatOutputName(file); //
object missing = System.Type.Missing; //
object copies = "1"; //
object pages = ""; //
object items = Word.WdPrintOutItem.wdPrintDocumentContent; //
object range = Word.WdPrintOutRange.wdPrintAllDocument; //
object pageType = Word.WdPrintOutPages.wdPrintAllPages; //
Word.Application wordApp = new Word.Application(); //open word application
wordApp.Visible = false; //invisible
Word.Document doc = wordApp.Documents.Open(ref fileAndPath, ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing); //opens the word document into application behind the scenes
doc.Activate(); //activates document, else when I print the system will throw an exception
wordApp.ActivePrinter = "my printer name"; //Specify printer I will print from
doc.PrintOut(ref boolTrue, ref boolFalse, ref range, ref output, ref missing, ref missing,
ref items, ref copies, ref pages, ref pageType, ref boolTrue, ref boolTrue,
ref missing, ref boolFalse, ref missing, ref missing, ref missing, ref missing);
doc.Close(SaveChanges: false);
doc = null;
((Word._Application)wordApp).Quit(SaveChanges: false); //kill word process the right way
wordApp = null; //reset to null
successful = true;
}
return successful;
}
После я получаю истинное логическое значение «успешных», я резервную копию файла автоматически в резервной папке, удалите его в папку ввода и найдите .prn в выходной папке (он просто сидит здесь для обработки позже).
Если я не предоставляю выход (см. Вывод ref на doc.PrintOut()), то выходной каталог не обновляется и не печатается вообще. Если я предоставляю вывод, создается .prn, хотя это пустой файл 0kb.
Принтер настроен как принтер по умолчанию, и он настроен на автоматический вывод в указанную выходную папку. Если я открываю Word вручную с тем же файлом, с которого я пытаюсь автоматически печатать, нажмите print, он создаст файл в формате 6kb .prn в выходном каталоге, не ударяя ничего, кроме CTRL + P, OK.
Я уверен, что файл открывается ОК через «Word.Document doc = wordApp.Documents.Open()», потому что я сделал doc.FullName и получил полный путь к документу входного слова. Я просто не могу для жизни меня получить .prn для корректного вывода на выходную папку.
Ваше второе предложение было самым полезным. Я сделал свою программу видимой для целей отладки и увидел, что программа закрывается сразу после метода печати. Я поставил «Thread.Sleep (5000);» между методом печати и методом выхода, и, конечно, он работал нормально. Какая глупая ошибка. Хорошо, спасибо. TIL (еще раз) предположения не работают в программировании. –