0

我正在完成一个 Web 服务的构建,该服务构建并打印出 XPS 文档,并将它们发送到各种打印服务器上的各种打印队列。根据站点部署,Web 服务以 2 种模式运行。第一种是使用应用程序池身份帐户作为打印用户,第二种模式对“跟我来”类型的打印机使用用户模拟,以便用户注册打印作业。这一切都很好。

我必须针对打印队列上的特定托盘并为每个作业设置各种其他参数,因此我生成了 printickets,将托盘命名空间添加到 xml,这似乎也有效。

我担心的是这个(并且是我需要一些手的地方),因为我正在做所有这些 STA 线程服务器端,比如 Bob 在打印 200 个混合文档(A4、A5、信封)时运行,并且门票关闭说在打印机上进行双面打印,并且我的应用程序池身份帐户正在运行说 20 个打印线程,同时具有具有各种参数的各种目标托盘的多个文档,我会遇到任何问题还是会破坏默认的打印机队列设置?

根据 MS 的说法,MergeAndValidatePrintTicket 的范围可以分为不同的级别(我会满足于工作级别),但我只是想知道是否有任何有这种情况经验的人可以验证这是真的,是否有任何问题,因为整个 .Net 打印malarkey 似乎充满了它们。

'小费给任何这样做的人。如果您的目标打印机很简单,比如只有 3 个不同尺寸的托盘,只需在票据中设置介质尺寸(ISOA4 或其他)并将输入箱设置为未知,打印机就会解决。不幸的是,我所针对的打印机有大约 7 个垃圾箱,所以我必须针对确切的托盘。

谢谢阅读。

4

1 回答 1

0

编辑以显示解决方案

乔恩……这是相关部分……

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) <--改为.Net 4.5,一切正常

一切正常,但有以下例外......

1) 在由 3rd 方软件控制并使用用户模拟的 mfds 上,默认双面设置对于打印的第一个文档保持活动状态,之后就可以了。它适用于 Lexmarks(使用的应用程序池标识)。与其他设置一样,两种类型的托盘都已正确分配。

2) 日期和数字(作为字符串插入到文档中)并在 XPS 查看器中显示正常,即使它们所在的段落是令人费解的 Times New Roman,也会被重新格式化为 san serif。

你能发现任何错误吗?

问候

尼尔

于 2013-03-18T17:53:12.383 回答