2013-10-01 5 views
0

Я использую:Слово 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 для корректного вывода на выходную папку.

ответ

1

Если я начну свое слово (2010) и записать макрос меня, нажав Ctrl + P и ударяя печать - Я получаю

Application.PrintOut fileName:="", Range:=wdPrintAllDocument, Item:= _ 
    wdPrintDocumentWithMarkup, Copies:=1, Pages:="", PageType:= _ 
    wdPrintAllPages, Collate:=True, Background:=True, PrintToFile:=False, _ 
    PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _ 
    PrintZoomPaperHeight:=0 

Измените отпечаток, чтобы отразить то, что было Слово, и посмотреть, если он решает ваш вопрос.

Там нет причин, чтобы быть «достаточно уверенно», просто удалите

wordApp.Visible = false 

отладки вашей программы и убедитесь, что все в порядке.

+0

Ваше второе предложение было самым полезным. Я сделал свою программу видимой для целей отладки и увидел, что программа закрывается сразу после метода печати. Я поставил «Thread.Sleep (5000);» между методом печати и методом выхода, и, конечно, он работал нормально. Какая глупая ошибка. Хорошо, спасибо. TIL (еще раз) предположения не работают в программировании. –

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