2016-05-03 3 views
1

Я пытаюсь напечатать XPS поток через System.Printing именSystem.Printing имен исходный код страницы установите принтер

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

код не работает, и я застрял с этим.

У любого есть хорошая идея или решение для печати (поток файлов Xps, полученный pdftron) с использованием пространства имен system.printing и динамического изменения источника страницы.

+1

'myPrintJob.JobStream = stm;' вместо ваших 3 строк из 'Stream myStream' до' myStream.Close(); 'это atleast 1 ошибка, которую я могу быстро определить – SynerCoder

+0

@SynerCoder да может ошибаться в этой строке, но я много пробовал и менял код слишком много времени ... так что ... вы можете понять ... код может быть неправильным/изменить, что я получил из источника. –

ответ

0

Я не тестировал, но это оказалось бы ближе к правильному решению.

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

Вы можете проверить выше вне, создавая stream_sink как поток в файл на диске, и проверив, что stream_source.CopyTo (stream_sink) работает, как ожидалось. Если это так, то любая оставшаяся проблема будет связана с использованием API System.Printing, а не с помощью PDFNet.

Смежные вопросы