繁体   English   中英

System.Printing命名空间设置打印机页面源

[英]System.Printing namespace set printer page source

我试图通过System.Printing命名空间打印XPS流

    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();

来自github的XpsPrinterUtils.ModifyPrintTicket

代码不起作用,我坚持这个。

任何人都有好主意或解决方案来打印(pdftron获得的Xps文件流)使用system.printing命名空间并动态更改页面源。

我没有测试,但这似乎更接近正确的解决方案。

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)是否按预期工作。 如果是这样,那么任何剩下的问题都是使用System.Printing API,而不是使用PDFNet。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM