Печать с помощью Word Interop с диалогом печати

Я пытаюсь напечатать слово doc из моего кода C#. Я использовал 12.0.0.0 Word Interop, и то, что я пытаюсь сделать, - это получить диалог печати до печати документа. Я не на 100% уверен в синтаксисе всего этого, поскольку я не могу заставить свой код работать :( Есть идеи?

спасибо заранее!

2 ответов


это должно быть что-то вроде:

object nullobj = Missing.Value;
doc = wordApp.Documents.Open(ref file,
                             ref nullobj, ref nullobj, ref nullobj,
                             ref nullobj, ref nullobj, ref nullobj,
                             ref nullobj, ref nullobj, ref nullobj,
                             ref nullobj, ref nullobj, ref nullobj,
                             ref nullobj, ref nullobj, ref nullobj);

doc.Activate();
doc.Visible = true;
int dialogResult = wordApp.Dialogs[Microsoft.Office.Interop.Word.WdWordDialog.wdDialogFilePrint].Show(ref nullobj);

if (dialogResult == 1)
{
    doc.PrintOut(ref nullobj, ref nullobj, ref nullobj, ref nullobj, 
                 ref nullobj, ref nullobj, ref nullobj, ref nullobj, 
                 ref nullobj, ref nullobj, ref nullobj, ref nullobj, 
                 ref nullobj, ref nullobj, ref nullobj, ref nullobj, 
                 ref nullobj, ref nullobj);
}

принятый ответ не работа для меня, поэтому я нашел другой способ. Это напечатает документ по адресу c:\temp.docx в фоновом режиме, сохраняя слово скрытым от просмотра.

Он использует Microsoft.Office.Interop.Word.

Word.Application wordApp = new Word.Application();
wordApp.Visible = false;

PrintDialog pDialog = new PrintDialog();
if (pDialog.ShowDialog() == DialogResult.OK)
{
  Word.Document doc = wordApp.Documents.Add(@"c:\temp.docx");
  wordApp.ActivePrinter = pDialog.PrinterSettings.PrinterName;
  wordApp.ActiveDocument.PrintOut(); //this will also work: doc.PrintOut();
  doc.Close(SaveChanges: false);
  doc = null;
}

// <EDIT to include Jason's suggestion>
((Word._Application)wordApp).Quit(SaveChanges: false); 
// </EDIT>

// Original: wordApp.Quit(SaveChanges: false);
wordApp = null;