Распечатать существующий документ с помощью автоматизации Word
Я хочу распечатать документы Word, которые я создал в своей программе. Поэтому я использую этот код:
public static void druckeRechnung(object oFilename)
{
object oMissing = System.Reflection.Missing.Value;
List<int> procIds = getRunningProcesses();
_Application wordApp = new Application();
wordApp.Visible = false;
_Document aDoc = wordApp.Documents.Add(ref oFilename);
try
{
System.Windows.Forms.PrintDialog pDialog = new System.Windows.Forms.PrintDialog();
if (pDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
wordApp.ActivePrinter = pDialog.PrinterSettings.PrinterName;
wordApp.ActiveDocument.PrintOut(ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message, "Fehler beim Drucken");
}
finally
{
aDoc.Close(WdSaveOptions.wdDoNotSaveChanges);
wordApp.Quit(WdSaveOptions.wdDoNotSaveChanges);
aDoc = null;
wordApp = null;
killProcess(procIds);
}
}
В первый раз, когда я печатаю документ, он работает так же, как и должен, но после этого запрос отправляется на принтер, и ничего не происходит.
Я делаю что-то не так? Есть ли лучшие способы реализовать это?
2 ответа
Вы не позволяете процессу завершить печать. Для этого вам нужно будет приостановить ваш код, для этого вы можете использовать первый параметр PrintOut.
object background = false;
wordApp.ActiveDocument.PrintOut(background, 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, ref missing,
ref missing);
Как сказано в документации: http://msdn.microsoft.com/en-us/library/microsoft.office.tools.word.document.printout(v=vs.80).aspx
"Фон true, чтобы код настройки продолжался, пока Microsoft Office Word печатает документ".
Я думаю, что проблема в том, что документ закрыт до окончания печати.
Я добавил WHILE до закрытия документа:
var printDialog = new System.Windows.Forms.PrintDialog();
if (printDialog.ShowDialog()==System.Windows.Forms.DialogResult.OK)
{
w. = printDialog.PrinterSettings.PrinterName;
d.PrintOut();
}
while (w.BackgroundPrintingStatus>0)
{
}
d.Close(false);
w.Quit();