2017-11-30 5 views
2

ich auf einem Programm in C# arbeiten, um die Gesamtseitenzahl zu pausieren und bekommen beim Drucken ist hier Hauptcode:Warum wird die gesamte Seite des N-Up-Drucks mit Win32_PrintJob/C# falsch angezeigt?

string wql = "SELECT * FROM Win32_PrintJob"; 
ManagementObjectCollection mos; 
Dictionary<uint,short> checkedJobs = new Dictionary<uint,short>(); 

while (true) 
{ 
     Thread.Sleep(SleepTime); 
     try 
     { 
      mos = new ManagementObjectSearcher(wql).Get(); 
      if (mos != null && mos.Count > 0) 
      { 
       foreach (ManagementObject mo in mos) 
       { 
        if (mo != null) 
        { 
         uint jobId = ProcessJob(mo); 
         if (!checkedJobs.ContainsKey(jobId)) 
          checkedJobs.Add(jobId, 0); 
         } 
        }       
       } 
       // ... 
      } 
     } 

Es funktioniert gut mit normalen task.But in N-Up-Druck, wenn ich Drucken Sie mehr als eine Folie auf einer Seite (N Folien-In-One-Seite), es kommt falsch, ich kann nicht die richtige Gesamtzahl zu drucken.

Gibt es jemanden, der schon einmal diese Frage treffen ~ bitte, vielen Dank

+0

Wie erhalten Sie die Anzahl der Seiten und was ist "falsch"? –

+0

Das Ergebnis ist falsch bedeutet (nur im Modus von N-Up-Druck), zum Beispiel drucke ich eine PPT von 10 Seite, aber ich drucke die PPT 5-in-1-Modus (5 Folien auf einer Seite drucken). Die gesamte Seite sollte 2 sein, aber es kommt zu 10. – dayu

+0

Und ich bekomme die gesamte Seite mit JOB_INFO_2.TotalPages – dayu

Antwort

0

Ihre Frage ist ähnlich wie eine andere Frage (siehe meine answer there und folgen Sie dem Link für weitere Informationen), aber vielleicht ist es anders genug helfen, eine andere zu rechtfertigen antworte hier.

Grundsätzlich wird NUP nicht von allen Druckertreibern unterstützt. Die Anwendung, die Sie verwenden, überprüft möglicherweise die DEVMODE (oder ignoriert es) und die Behandlung von NUP selbst statt letting the Spooler handle it.

Wie ich in der anderen Antwort gesagt habe, kann die Windows-Seitenanzahl nicht für alle Apps und Treiber verlässlich sein. Dies könnte sich mit dem neuen XPS-Drucksystem verbessern, aber für alte Apps und Treiber ist die einzige Möglichkeit, eine zuverlässige Seitenanzahl zu erhalten, das Parsen der Druckspooldatei.

+0

Können Sie mir bitte das Detail zeigen, wie man die Druckspooldatei analysiert? Jetzt verwende ich die Spool-API, um den Druckauftrag anzuhalten. Aber ich kann keinen Weg finden, die tatsächliche Anzahl der Drucke des NUP-Jobs herauszufinden. – dayu

+0

Gut gemacht, aber wie ich in meiner anderen Antwort gesagt habe, ist die Seitenzählung eine nicht-triviale Aufgabe - abhängig davon, welche Drucksprachen Sie unterstützen möchten. EMF (wenn nicht zu roh, ziemlich gut definiert), PCL-XL (gut definiert), PCL (viele Varianten), PostScript (eine mächtige Sprache) ... Unternehmen geben eine Menge Geld für dieses Problem aus. Sehen Sie, wie viel [undokumentiert] ist (http://www.undocprint.org/) Oder wenn Sie es aus Spaß machen, könnten Sie vielleicht [GhostScript] (https://ghostscript.com/) verwenden. –

+0

Vielen Dank, ich werde einen Versuch haben – dayu

Verwandte Themen