2016-05-03 2 views
1

Ich versuche XPS Strom durch System.Printing NamespaceSystem.Printing Namespace gesetzt Druckerseite Quelle

Stream stm = pdftron.PDF.Convert.ToXps(pdfdoc); 

    LocalPrintServer localPrintServer = new LocalPrintServer(); 
    PrintQueueCollection pqc = localPrintServer.GetPrintQueues(); 
    PrintQueue defaultPrintQueue = localPrintServer.GetPrintQueue(_PrinterName); 
    MemoryStream ms = defaultPrintQueue.GetPrintCapabilitiesAsXml(); 


    // Call AddJob 
    System.Printing.PrintTicket printTicket = defaultPrintQueue.DefaultPrintTicket; 


    PrintSystemJobInfo myPrintJob = defaultPrintQueue.AddJob(); 

    Stream myStream = myPrintJob.JobStream;//may be this line is wrong, can you suggest alternative? 
    myStream = stm;//may be this line is wrong, can you suggest alternative? 
    myStream.Close();//may be this line is wrong, can you suggest alternative? 
    var inp= defaultPrintQueue.GetPrintCapabilities().InputBinCapability; 
    System.Printing.PrintTicket newprintTicket = XpsPrinterUtils.ModifyPrintTicket(printTicket, "psk:JobInputBin", "NS0000:" + _PaperSource); 
    System.Printing.ValidationResult vr = defaultPrintQueue.MergeAndValidatePrintTicket(printTicket, newprintTicket);// this line giving exception while changing page source merge and validate 
    myPrintJob.Commit(); 

XpsPrinterUtils.ModifyPrintTicket from github

Der Code funktioniert nicht gedruckt werden, und ich bin mit diesem fest.

Jeder hat eine gute Idee oder Lösung zu diesem zu drucken (Xps-Datei-Stream von pdftron erhalten) mit System.printing-Namespace und dynamisch wechseln Seite Quelle.

+1

'myPrintJob.JobStream = stm;' anstelle Ihrer 3 Zeilen von 'Stream myStream' bis' myStream.Close(); 'das ist mindestens 1 Fehler Ich kann schnell – SynerCoder

+0

@SynerCoder finden Ja, kann diese Zeile falsch sein, aber ich viel versucht und Code zu viel Zeit ändern..so ... Sie können verstehen ... Code kann falsch sein/ändern, dass ich von der Quelle erhalten. –

Antwort

0

Ich habe nicht getestet, aber dies scheint näher an der richtigen Lösung zu sein.

Stream stream_source = pdftron.PDF.Convert.ToXps(pdfdoc); 
Stream stream_sink = myPrintJob.JobStream; 
stream_source.CopyTo(stream_sink); 

Sie könnten die oben aus, indem stream_sink als Stream in einer Datei auf der Festplatte testen möchten, und überprüfen, ob stream_source.CopyTo (stream_sink) wie erwartet funktioniert. Wenn dies der Fall ist, würde das verbleibende Problem mit der Verwendung der System.Printing-API und nicht mit PDFNet geschehen.