Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# PrintQueue.AddJob方法不使用';行不通_C#_Printing_Dllimport_Spooler - Fatal编程技术网

C# PrintQueue.AddJob方法不使用';行不通

C# PrintQueue.AddJob方法不使用';行不通,c#,printing,dllimport,spooler,C#,Printing,Dllimport,Spooler,我正在开发一个应用程序,在这个应用程序中,我必须在原始打印文本之后添加一行文本 为此,我使用了打印后台处理程序API的FindFirstPersInterchangeNotification和FindNextPrinterChangeNotification方法,这两种方法运行良好 我能够得到打印队列,它显示作业计数1的数量 我正在使用以下代码在打印队列中添加新作业: // Create the printer server and print queue objects

我正在开发一个应用程序,在这个应用程序中,我必须在原始打印文本之后添加一行文本

为此,我使用了打印后台处理程序API的FindFirstPersInterchangeNotification和FindNextPrinterChangeNotification方法,这两种方法运行良好

我能够得到打印队列,它显示作业计数1的数量

我正在使用以下代码在打印队列中添加新作业:

        // Create the printer server and print queue objects
        LocalPrintServer localPrintServer = new LocalPrintServer();
        PrintQueue defaultPrintQueue = LocalPrintServer.GetDefaultPrintQueue();

        // Call AddJob
        PrintSystemJobInfo myPrintJob = defaultPrintQueue.AddJob();

        // Write a Byte buffer to the JobStream and close the stream
        Stream myStream = myPrintJob.JobStream;
        Byte[] myByteBuffer = UnicodeEncoding.Unicode.GetBytes("This is a test string for the print job stream.");
        myStream.Write(myByteBuffer, 0, myByteBuffer.Length);
        myStream.Close();

我的代码毫无例外地成功执行,但新作业没有与原始文本一起打印。

正如Tony在评论中指出的那样,作业流在.NET Framework 4.5 for Windows 8及更高版本中已更改为使用XPS文档格式。如果你想打印,你必须遵循指南

我还没有找到有效的解决方案,但您可以尝试使用


我找到的最接近的解决方案是,正如Microsoft所提到的,您刚刚复制了MSDN示例代码。警告:“此代码仅适用于能够检测和打印纯文本的打印机。有些打印机无法。”。把“一些”变成“大多数”,不再有很多点阵打印机了。不要这样做,改用PrintDocument。请检查此@HansPassant谢谢回复。此代码是否适用于POS热敏打印机,或者我也必须为其使用PrintDocument?@imsome1感谢您的回复。我的方案是每次启动新打印时,在原始打印文本的末尾额外打印一行文本。从PrintSystemJobInfo.JobStream文档中可以看出:“从Windows 8和更高版本的操作系统上的.NET Framework 4.5开始,写入此流的数据必须以XPS格式作为包流。”