PrintQueue.AddJob方法不起作用

时间:2017-02-15 05:48:32

标签: c# printing dllimport spooler

我正在开发一个应用程序,我必须在原始打印文本后添加一行额外的文本。

为此,我正在使用Print Spooler API的FindFirstPrinterChangeNotification和FindNextPrinterChangeNotification方法,它们工作正常。

我能够获得显示作业数量1的打印队列。

我正在使用以下代码在Print Queue中添加新作业:

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

我的代码成功执行,没有任何例外,但新作业不会与原始文本一起打印。

1 个答案:

答案 0 :(得分:0)

正如Tony在评论中指出的那样,JobStream已经在.NET Framework 4.5 for Windows 8中发生了变化,并且最多使用了XPS文档格式。如果你想打印,你将不得不遵循指南。

我找不到可行的解决方案,但您可以尝试使用XPS Printing API

我发现的最接近的解决方案是微软here提到的herehere