1

我开发了一个用于打印的 Web 服务 (C# MVC 4),它创建 XPS 文档,然后通过各种打印机服务器 (MS) 将它们打印到各种打印队列。这一切都适用于 Sharp 打印队列,但在打印到 Lexmarks 时,所有字体数据都会丢失,尽管字体大小保持正确。在 XPS 查看器中查看时,所有 XPS 文档都正确显示,并且在通过查看器打印到 Lexmarks 时,通过打印服务器正常工作。字体位于打印服务器上,Sharp 队列与 Lexmark 位于同一打印服务器上,并且字体都在 XPS 文档中指定。更改 Lexmark 打印机设置、驱动程序等似乎没有任何区别。

这里唯一相关的问题(一年前)说,由于字体转换错误,MS 解决方案是在进行服务器端打印时关闭打印后台处理程序。

我知道这是一个非常模糊的问题,但如果有人经历过这种痛苦并且有任何关于如何解决这个问题的提示,我将不胜感激。

4

2 回答 2

1

好的..经过大量测试后,注意到以下内容(并且可能对其他人有帮助)。

在回答上述问题.. 1)嵌入字体确认并使用MS官方测试XPS文件。这没有帮助。2) 使用的 Lexmark 驱动程序是 winprint > RAW。改变这个没有帮助。2) 字体已安装在打印机上

测试 1) 新的打印服务器,直接打印到锐利的打印机上。问题出现在字体丢失。解决此问题的方法是将后台处理程序设置更改为仅在打印所有文档后才打印。问题消失了,但是我不想依赖配置需要专业设置的打印机的人,所以我拒绝了。这是客户的网络,我无法控制它。

2)打印到打印服务器上的现有 Web 服务(使用用户模拟)到 Sharp 队列,以确认这仍然有效。确认的。

3)打印到打印服务器上的现有 Web 服务(使用用户模拟)到 Lexmark 队列,这仍然失败并且字体丢失。

4) 从 2 个单独的 IIS 框打印到打印服务器到 Lexmark 队列(使用域应用程序池身份帐户),现在这可以正常工作(在 c# new printserver(\printerservername) 中),因为 Lexmark 打印正确。

5)打印到打印服务器上的现有 Web 服务(使用域应用程序池身份帐户)到 Lexmark 队列,这仍然失败(在 c# new localprintserver() 中)。

6)打印到打印服务器上的现有 Web 服务(使用域应用程序池身份帐户)到 Lexmark 队列,这仍然失败(在 c# new printserver(\printerservername) 中)

所有这一切的结果是,如果您在本地打印,字体会由于某种奇怪的原因丢失,但如果您远程打印,字体会被保留。所有服务器都具有相同的基本设置(没有 xps 查看器等,域应用程序池帐户是服务帐户),我能看到的唯一区别是新的 localprintserver 与新的 printserver(\printservername) 调用。相同的代码通过保存本地或远程设置的 Web 配置文件从一台机器移植到另一台机器。所有机器都有 IIS 7.5 .net 4.5 MVC 4 并且在受信任区域中。

所以我的解决方案将被拆分,非 Sharp 打印将在打印服务器服务远程的文档生成器上执行,Sharp 打印将在打印服务器上完成(这是 Equitrac“跟随我”打印所必需的),因为我没有不想使用 kerberos 委托。如前所述,这不是我的域,我可以看到整个地方因 spn 丢失或 kerberos 故障而停止打印。

无论如何,希望这对某人有所帮助。

于 2013-03-13T11:30:56.040 回答
1

好吧,没什么可做的,但我怀疑三件事:

  1. 您正在生成的 XPS 文档引用字体而不嵌入它们
  2. 服务器上的 Lexmark 打印驱动程序是 XPS 驱动程序
  3. 字体未安装在打印机本身上。

假设我是对的,改变这三个事实中的任何一个都应该纠正这种情况,尽管我对#3 不做任何保证。

发生这种情况的原因是在 XPS 光栅化之前不使用字体 - 即转换为原始图像数据。我怀疑在 Lexmark 案例中,这发生在设备上,而在 Sharp 案例中,它发生在打印服务器上。从 XPS 查看器打印 XPS 文档可以正常工作这一事实支持这一点,因为这会导致在运行查看器的机器上发生光栅化。

在打印服务器上使用非 XPS 驱动程序会导致性能下降。打印服务器将有效地将 XPS 转换为 GDI,然后非 XPS 驱动程序将其转换为另一个 PDL,例如 PostScript 或 PCL。我怀疑 Sharp 驱动程序就是这种情况,尽管 Sharp 驱动程序也可能是在主机上执行光栅化的 XPS 驱动程序。

于 2013-03-13T04:33:24.130 回答