我有一个应用程序可以根据用户请求生成一些中央文件。创建文件后,我希望能够将它们放入该用户的打印队列中(在该组织中,有一个中央打印队列,因此用户负责打印自己的文档),以便它们可以当用户准备好时打印出来。
通过使用System.Printing
.net 中的程序集,我可以将作业添加到我自己的打印队列中,所以我在这方面做得很好。我的打印代码如下所示:
private void RunPrintJob( string myFileName )
{
PrintServer ps = new PrintServer(@"\\printatron");
PrintQueue queue = new PrintQueue(ps, "psandqueues");
try
{
PrintSystemJobInfo pj = queue.AddJob(myFileName);
Stream myStream = pj.JobStream;
Byte[] myByteBuffer = GenerateBufferFromFile(myFileName); myStream.Write(myByteBuffer, 0, myByteBuffer.Length);
myStream.Close();
}
catch (Exception ed)
{
Debug.WriteLine(ed.Message);
if (ed.InnerException != null)
{
Debug.WriteLine(" -> " + ed.InnerException);
}
result = false;
}
queue.Commit();
}
所以我有我集中创建的文档,我知道哪个用户负责他们的创建,我可以将它们发送到打印机。
我现在需要的是一种将它们发送到打印机的方法,并将创建它们的用户设置为他们的用户。有没有办法通过打印队列做到这一点?我知道它可以从PrintSystemJobInfo.Submitter
属性中读取,但那是只读的。如果不是,我是否必须通过模拟来做到这一点,如果是的话,在后一种情况下,我能做些什么来避免必须存储一堆用户密码并且每次用户更改密码时软件都会失败?这似乎是一种非常笨拙的操作方式,但是由于此活动当前不是交互式执行的,我还有哪些其他选择?