我正在完成构建Web服务,构建并打印出XPS文档,将它们发送到各种打印服务器上的各种打印队列。 Web服务以2种模式运行,具体取决于站点部署。第一种是使用应用程序池标识帐户作为打印用户,第二种模式使用用户模拟“跟我来”类型的打印机,以便用户注册打印作业。一切正常。
我必须在打印场所上定位特定的托盘并为每个作业设置各种其他参数,因此我生成了将托盘命名空间添加到xml的打印机,这似乎也有效。
我担心的是(这是我需要一些手持的地方),因为我正在做所有这个STA线程服务器端,说鲍勃跑鲍勃打印200份混合文件(A4,A5,信封)和门票关闭说打印机上的双面打印和我的应用程序池身份帐户正在运行说20个打印线程与各种目标托盘的多个文档同时具有各种参数,我是否会遇到任何问题或者我要打开默认的打印机队列设置?
根据MS,MergeAndValidatePrintTicket可以在各个级别确定范围(我会满足工作级别)但我只是想知道是否有任何有这种情况经验的人可以验证这是真的,如果有任何问题,因为这个.Net打印malarkey似乎充满了它们。
对于任何这样做的人来说都是小费。如果您的目标打印机很简单,只说3个不同尺寸的托盘,只需在故障单中设置介质尺寸(ISOA4或其他),并将输入框设置为未知,打印机将对其进行处理。不幸的是,我所针对的打印机有大约7个垃圾箱,所以我必须针对确切的托盘。感谢阅读。
答案 0 :(得分:0)
编辑以显示解决方案
Jon ......这是相关部分......
PrintTicket ptclone = pqTarget.UserPrintTicket * .Clone(); * < - 删除克隆()
//我的方法,用于指定用于作业和其他设置的托盘。 poj是我的printJob类
PrintTicket pt = GetPrintTicketForJob(ptclone,poj.trayMediaSize,poj.trayNameSpace,poj.trayUri);
ValidationResult vr = pqTarget.MergeAndValidatePrintTicket(ptclone,pt,PrintTicketScope.JobScope);
pqTarget.UserPrintTicket = vr.ValidatedPrintTicket; < - 删除此
// pqTarget.Commit()// localPrintServer模式下的打印服务器在用户模拟下不喜欢
PrintSystemJobInfo pj = pqTarget.AddJob(poj.id,poj.fileName,false)< - 不要这样做
我尝试使用.Net 4.5重载,其中包含打印票据,但是localPrintServer模式下的服务器不理解该方法,即使服务器上有.Net 4.5,而且...
PrintSystemJobInfo pj = pqTarget.AddJob(poj.id.ToString(),poj.fileName,false,vr.ValidatedPrintTicket)&lt; - 这样做.Net 4.5并且一切正常< / p>
除了以下例外,一切正常....
1)在由第三方软件控制并使用用户模拟的mfds上,默认的双工设置对于打印的第一个文档保持活动状态,之后,它没问题。它适用于Lexmarks(使用的应用程序池标识)。与其他设置一样,托盘在两种类型上都已正确分配。
2)日期和数字(作为字符串插入到文档中)并在XPS查看器中显示为OK,即使它们所在的段落位于Times New Roman中,也会重新格式化为san serif。
你能发现任何搞砸的事吗?
问候
尼尔