none
求教,用PrintQueue.AddJob打印XPS文件, 为何不能打印彩色/灰度,2IN1,4IN1? RRS feed

  • 问题

  • 想彩色印刷/灰度印刷,以及,2In1,4In1,8In1等,在PrintTicket中设置了,却不起作用。。。

    代码如下 

          LocalPrintServer ps = new LocalPrintServer();
    
          PrintQueue pq = ps.GetPrintQueue("DocuCentre-II C4300");
          //pq.CurrentJobSettings.CurrentPrintTicket.OutputColor = OutputColor.Color;
          // 打印机信息取得
          PrintCapabilities pc = pq.GetPrintCapabilities();
       
          PrintTicket pt = pq.UserPrintTicket;
          // 两面打印
          pt.Duplexing = Duplexing.TwoSidedLongEdge;
          // 2In1设定
          pt.PagesPerSheet = 2;
          pt.PagesPerSheetDirection = PagesPerSheetDirection.BottomLeft;
          // 输出颜色设定
          pt.OutputColor = OutputColor.Color;
    
          System.Printing.ValidationResult result = pq.MergeAndValidatePrintTicket(pq.UserPrintTicket, pt);
          if (result.ValidatedPrintTicket.Duplexing == Duplexing.TwoSidedLongEdge)
          {
            pq.UserPrintTicket = result.ValidatedPrintTicket;
            pq.Commit();
          }
    
          if (result.ValidatedPrintTicket.OutputColor == OutputColor.Color)
          {
            pq.UserPrintTicket = result.ValidatedPrintTicket;
            pq.Commit();
          }
    
          using (XpsDocument doc = new XpsDocument(@"C:\Personal\TestFiles\print.xps", FileAccess.Read))
          {
            using (Package container = Package.Open(@"C:\Personal\TestFiles\print1.xps", FileMode.Create))
            {
              using (XpsDocument xpsDoc = new XpsDocument(container))
              {
                XpsDocumentWriter xpsDocWriter = XpsDocument.CreateXpsDocumentWriter(xpsDoc);
                //xpsDocWriter.WritingPrintTicketRequired += new System.Windows.Documents.Serialization.WritingPrintTicketRequiredEventHandler(xpsDocWriter_WritingPrintTicketRequired);
    
                xpsDocWriter.Write(doc.GetFixedDocumentSequence(),pt);
              }
            }
          }
    
          try
          {
            PrintSystemJobInfo xpsPrintJob = pq.AddJob("TestJobName", @"C:\Personal\TestFiles\print1.xps", false);
          }
          catch (PrintJobException e)
          {
            Console.WriteLine("\n\t{0} could not be added to the print queue.", @"C:\Personal\TestFiles\print1.xps");
            if (e.InnerException.Message == "File contains corrupted data.")
            {
              Console.WriteLine("\tIt is not a valid XPS file. Use the isXPS Conformance Tool to debug it.");
            }
            Console.WriteLine("\tContinuing with next XPS file.\n");
          }
    

    ※ 打印机支持彩色/灰度打印,也支持2In1,4In1等打印。

    现象:打印出来的不是彩色的,并且也没有以2In1进行打印,我在PrintTicket中设定了彩色,2In1为什么没有打印出来?处理是否错了?请帮忙指正,谢谢!

    2011年6月20日 2:37

全部回复

  • 难道没有人遇到同样的问题?
    2011年6月22日 1:17
  • 你好,没有遇到过类似的问题。

    我想可以这样来排除问题所在:

    1.检测打印机能否按照要求正确打印(不通过代码)。

    2.在代码中设置断点,查看设置是否正确传递给了打印任务。

    3.信息传输是否异常。


    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
    MSDN 论坛好帮手 立刻免费下载  MSDN 论坛好帮手
    2011年6月22日 8:59
  • 你好,感谢回复。

    〉〉1.检测打印机能否按照要求正确打印(不通过代码)。

    可以正确打印(不通过代码)。

    〉〉2.在代码中设置断点,查看设置是否正确传递给了打印任务。

    应该正确传递了,打印状态中显示彩色打印了,但打印出来的却是灰度

    〉〉3.信息传输是否异常。

    如何看是否异常?

    2011年6月23日 2:59