【问题标题】:Can I use WMI to read a printer spool file我可以使用 WMI 读取打印机假脱机文件吗
【发布时间】:2021-04-22 23:01:18
【问题描述】:

我的客户有一个旧的基于 DOS 的应用程序,它将格式化的输出发送到打印机。我已禁用打印,因此假脱机文件保留在打印队列中。我想拿起这些假脱机文件并将它们转换为 PDF 格式(然后最好删除它们)。这可以使用 WMI 吗?

顺便说一句,我无法更改应用程序中产生打印输出的任何内容。

我想将此作为我支持的现有 Visual Foxpro 实用程序的一部分。

【问题讨论】:

  • 您可以从 WMI 获取作业 ID。这些文件只是坐在磁盘上等待读取。您只需要了解它们的格式即可。
  • 谢谢尼克。我可以看到文件,但无法读取它们。我使用的打印机队列是 PDF 创建者,当时希望假脱机文件可能是 PDF 格式,但我无法使用 PDF 阅读器打开它。非常欢迎任何进一步的建议。

标签: wmi foxpro print-spooler-api


【解决方案1】:

应用程序的格式化输出将是带有嵌入式 Epson 或 PCL 打印机代码的 ASCII 文本。 Windows 虚拟 PDF 打印机(或其他打印机驱动程序)不支持此类数据流。您必须使用 Generic Text Only 打印机驱动程序并将输出保存到文件中。或者像 DOSprn 这样的 DOS 到 Windows 打印处理器,或者像 vDos 这样的 DOS 仿真器,它们可以为 Windows 打印机驱动程序转换 ASCII 文本。

【讨论】:

  • 谢谢乔斯。我应该提到客户告诉我,他们能够使用该应用程序的唯一打印机是 HP 4200。
  • 这意味着应用程序使用 PCL 代码来格式化输出。大多数激光打印机(当然还有惠普的)仍然支持 PCL 输入。但其他打印机(和虚拟打印机)不接受这一点。只需安装 vDos,其内部打印处理器支持大多数 PCL 命令。
【解决方案2】:

有很多复杂情况,但其中大部分都包含在here 中。具体见:

  • 在 Spoolfile 名称中强制使用 JobID
  • 什么时候使用 RAW?

根据应用程序、驱动程序和其他因素,假脱机文件的格式将是 EMF、XPS 或 PostScript、PCL、PCL6 等“原始”PDL。EMF 现在有点过时了,但是您可以找到现代组件来呈现大多数 PDL。如果您可以获取用于假脱机到 PDF 的驱动程序,那么您就完成了。

由于 DOS 应用程序成功打印到 HP 4200(支持这些语言:HP GL/2, HP PJL, PCL 5E, PCL 6, PostScript 3),假脱机文件很可能是带有控制码或 PCL 转义码的 ASCII。您应该在十六进制编辑器中打开假脱机文件并查看。它们通常作为 SPL 文件存储在“C:\Windows\System32\spool\PRINTERS”中。

您可能可以使用GhostScript,具体取决于您可以使用的许可证。例如。对于 PCL 到 PDF,请参阅此(旧)question and its answers - 搜索更新的。

其他商业选项包括 Aspose for EMF to PDF。这些是您为特定用例寻找和评估所需的工具。

WMI can delete print jobs。例如。在命令行上:

wmic printjob where jobid=<jobnumber> delete

【讨论】:

  • 谢谢尼克。我应该提到客户告诉我,他们能够使用该应用程序的唯一打印机是 HP 4200。
猜你喜欢
  • 2013-01-27
  • 1970-01-01
  • 2013-09-19
  • 1970-01-01
  • 1970-01-01
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多