【问题标题】:PrintTicket scopes (default, user, job, document, page etc)PrintTicket 范围(默认、用户、作业、文档、页面等)
【发布时间】:2013-03-15 17:57:36
【问题描述】:

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

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

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

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

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

感谢阅读。

【问题讨论】:

  • 这取决于您如何处理门票。如果你把票附在工作上,你就没事了。如果您在队列中设置票证,则不是。您有使用票证的示例代码吗?
  • 嗨,乔恩...我将在工作级别确定范围,因此感谢您的保证。我明天重新编码。我有一个管理站点,可以扫描每个打印服务器的打印队列并提取该打印机的 bin 名称。当我这样做时,我想创建打印票并将所有这些信息存储在数据库中。我有一个映射表(即手动),指定介质尺寸、打印机类型和 bin 命名空间,我将在视图中加入打印机数据并将其加入到文档表中,因此 doc A4 -> A4 Lex ns0000:Tray 2 -> Lex ns0000:Tray 2 打印票。我将使用票超载的 .net 4.5 addjob。
  • 空间不足...我将使用 queue.userPrintTicket 然后 validationResult.mergeAndValidatePrintTicket 然后希望使用这个具有 printticket 变量的 .Net 4.5 queue.addjob 重载。明天晚上(星期一)我会尝试弹出一些代码

标签: c# .net printing xps


【解决方案1】:

已编辑以显示解决方案

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

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) p>

除了以下例外,一切正常......

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

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

你能发现任何错误吗?

问候

尼尔

【讨论】:

  • pqTarget.UserPrintTicket = vr.ValidatedPrintTicket;正在尝试更改队列中的票。这绝对不是你想要做的。您是否确认您的项目针对的是 .net 4.5 框架?仅仅安装它是不够的。
  • 另外,您应该将您的更新编辑到原始问题中,而不是添加它们作为答案。
  • 项目的目标是 4.5,我检查过,如果不是,你看不到重载。 cmets 中没有足够的空间,但对糟糕的形式表示歉意。我对我在哪里应用 vr.ValidatedPrintTicket 感到困惑(迷失)?今天早上我会再试一次。感谢您的反馈
  • 顺便说一句,日期和数字问题似乎是我用于转换的 dll 中的一个错误,并且制造商正在向我提供修复,所以要解决的问题更少。我今天花了很多时间尝试不同的方法来获得工作的票,但似乎没有一个有效。原始用户打印票始终保持不变并保留其设置,所以我不知道问题是什么。
  • 我很笨。从第一行删除 Clone(),不要将验证票指向用户打印票,它可以工作
猜你喜欢
  • 1970-01-01
  • 2011-11-05
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
相关资源
最近更新 更多