1

很多天以来,我一直在尝试修改打印票。:(

这是代码:

    using Microsoft.Win32;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Printing;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Drawing.Printing;
    using System.Drawing;
    using System.Xml;

    // ....

    // Get the ticket
    var printQueue = new PrintServer("\\\\NetworkNameHere").GetPrintQueue("PrinterNameHere");
    PrintTicket userPrintTicket = printQueue.UserPrintTicket;

    // Modify the ticket to print in landscape (or any other option)
    var xmlDoc = new XmlDocument();
    xmlDoc.Load(userPrintTicket.GetXmlStream());
    var manager = new XmlNamespaceManager(xmlDoc.NameTable);
    manager.AddNamespace(xmlDoc.DocumentElement.Prefix, xmlDoc.DocumentElement.NamespaceURI);

    string xpath = string.Format("//psf:Feature[@name='{0}']/psf:Option", "psk:PageOrientation");
    XmlNode node = xmlDoc.SelectSingleNode(xpath, manager);
    node.Attributes["name"].Value = "psk:Landscape";

    PrintTicket modifiedPrintTicket = null;
    using (var stream = new MemoryStream())
    {
        xmlDoc.Save(stream);
        stream.Position = 0;
        modifiedPrintTicket = new PrintTicket(stream);
    }

    System.Printing.ValidationResult result = printQueue.MergeAndValidatePrintTicket(printQueue.UserPrintTicket, modifiedPrintTicket);
   printQueue.UserPrintTicket = result.ValidatedPrintTicket;

           MessageBox.Show(result.ValidatedPrintTicket.PageOrientation.Value.ToString());

   printQueue.Commit();

   Byte[] myByteBuffer = UnicodeEncoding.Unicode.GetBytes("This is a test string for the print job stream.");
   using (var job = printQueue.AddJob())
        using (var stream = job.JobStream)
        {
            stream.Write(myByteBuffer, 0, myByteBuffer.Length);
            stream.Close();
        }

问题:看起来票已正确修改,但由于某些原因,它从未将票中指定的信息用于任何选项。帮助!!!!

请注意,我使用的是 .Net 4.0,但使用 addJob (4.5) 中的新 PrintTicket 参数得到相同的结果: printQueue.AddJob("xx", result.ValidatedPrintTicket)

谢谢!

4

0 回答 0