При использовании виртуального принтера, как я могу проверить, что печать закончена?

StackOverflow https://stackoverflow.com/questions/3914880

  •  29-09-2019
  •  | 
  •  

Вопрос

Я использую виртуальный принтер для печати документа Word в файл изображения в программе C#. Пока все идет хорошо, за исключением того, что я не знаю, когда процесс печати закончен, чтобы я мог прочитать содержание сгенерированного изображения. Вот мой код:

using System;
using Microsoft.Office.Interop.Word;
using Word=Microsoft.Office.Interop.Word;

var app = new ApplicationClass();
object filename = "C:\\ad.doc";
var missing = Type.Missing;
var doc = app.Documents.Open(ref filename, 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);
var oldPrinter = app.ActivePrinter;
app.ActivePrinter = "Name of printer";
object outputFileName = "c:\\ad.tif";
object trueValue = true;
object falseValue = false;

doc.PrintOut(ref trueValue, ref falseValue, ref missing, ref outputFileName, ref missing, ref missing,
                             ref missing, ref missing, ref missing, ref missing, ref trueValue, ref missing, ref missing,
                             ref missing, ref missing, ref missing, ref missing, ref missing);


app.ActivePrinter=oldPrinter ;                
doc.Close(ref missing, ref missing, ref missing);
app.Quit(ref missing, ref missing, ref missing);

Тогда как я могу быть уверен, что обработка печати завершена, чтобы я мог продолжить и получить содержание изображения?

Это было полезно?

Решение

К сожалению, единственный способ, которым я обнаружил, чтобы проверить статус печати в Word, это одна из двух вещей.

  1. Печать синхронно. Не очень здорово, потому что это сможет повесить вас, пока печать не будет завершена.
  2. Распечатайте документ асинхронно, а затем проверяйте свойство Application.backgroundprintingStatus в цикле или в потоке фонового работника, пока не станет 0 (больше не печатает) или вы нажимаете время на сторож

Что-то вроде этого....

        Do Until _Doc.Application.BackgroundPrintingStatus = 0
            System.Windows.Forms.Application.DoEvents()
            System.Threading.Thread.Sleep(750)
        Loop

Не идеально, но это работает.

Обратите внимание, что это скажет вам только тогда, когда он готовкает из слова. Если вы говорите о том, чтобы знать, когда документ фактически завершен печати на принтере, это совсем другая проблема. Вам понадобится печатный Jobid, и вам придется запросить материал для печати, в котором я не смог вам помочь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top