我可以使用WMI读取打印机线轴文件吗?



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

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

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

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

有很多复杂的地方,但这里介绍了其中的大多数。具体参见:

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

根据应用程序,驱动程序和其他因素,spool文件的格式将是EMF, XPS或"raw";PDL,如PostScript, PCL, PCL6等。EMF现在有点老了,但是您可以找到现代组件来呈现大多数pdl。如果你能得到你正在使用的驱动程序,那么你就完成了。

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

你可能能够使用GhostScript取决于哪些许可证你是ok的。例如,关于PCL到PDF,请参阅这个(旧)问题及其答案-搜索更多最近的问题。

其他商业选项包括将EMF转换为PDF。这些是您需要为您的特定用例寻找和评估的工具类型。

WMI可以删除打印作业。例如在命令行:

wmic printjob where jobid=<jobnumber> delete

如果是HP,则文件是PCL格式的(如上所述)。这里有一个命令行实用程序可以将PCL转换为PDF。引用:

这个页面提供了两个几乎相同的实用程序,可以从PCL"打印文件"创建PDF输出。两者都使用GhostPCL由Artifex(在GNU通用公共许可证下发布)作为执行转换的引擎。

所以你可以在Visual FoxPro中通过构建一个命令行来运行带有相关参数的EXE,并使用(例如)Windows Scripting Host:

执行它。
lcExe = "fullpathtowinpcltopdf.exe"
lcCommandLine = "myinputfile.pcl myoutputfile.pdf"
loWshShell = CreateObject("WScript.Shell")
lnProcessReturnCode = loWshShell.Run(lcExe + " " + lcCommandLine, 1, .t.)   

相关内容

  • 没有找到相关文章

最新更新