عند استخدام طابعة افتراضية ، كيف يمكنني التحقق من تلك الطباعة؟

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.BackgroundPrintPrintStatus في حلقة أو على مؤشر ترابط عامل الخلفية بشكل مستمر حتى يصبح 0 (لم يعد يطبع) أو تضغط على مهلة مراقبة

شيء من هذا القبيل....

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

ليس مثاليا، لكنه يعمل.

لاحظ أن هذا لن يخبرك إلا عندما يكون التخزين المؤقت من Word. إذا كنت تتحدث عن معرفة متى يتم الانتهاء من المستند بالفعل الطباعة على الطابعة ، فهذه قضية أخرى كاملة. ستحتاج إلى Print JobID وعليها الاستعلام عن أشياء التخزين المؤقت للطابعة ، والتي لم أستطع مساعدتك عليها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top