Java 如何以编程方式实现对普通windows打印队列的spool文件头的编辑';假脱机文件';在发送到打印机之前?

Java 如何以编程方式实现对普通windows打印队列的spool文件头的编辑';假脱机文件';在发送到打印机之前?,java,c#,printing,print-spooler-api,pjl,Java,C#,Printing,Print Spooler Api,Pjl,如何截取并更改windows 7打印假脱机文件(.SPL),以便在执行打印作业期间将此文件发送到打印机之前,在标题中添加一些附加信息,如“@PJL SET NAME=“PainPoint” 从顶部部分提取的.SPL文件是: 编辑spool文件显然很简单。诀窍是如何访问spool文件 我可以马上想到几个方法: 后台打印后暂停打印作业,对其进行编辑,然后释放。这不是小事,您可能需要根据可用的时间/精力求助于第三方软件 创建打印驱动程序或,如端口或,以编辑文件。(感谢Carey Gregory建议使

如何截取并更改windows 7打印假脱机文件(.SPL),以便在执行打印作业期间将此文件发送到打印机之前,在标题中添加一些附加信息,如“@PJL SET NAME=“PainPoint”

从顶部部分提取的.SPL文件是:


编辑spool文件显然很简单。诀窍是如何访问spool文件

我可以马上想到几个方法:

  • 后台打印后暂停打印作业,对其进行编辑,然后释放。这不是小事,您可能需要根据可用的时间/精力求助于第三方软件
  • 创建打印驱动程序或,如端口或,以编辑文件。(感谢Carey Gregory建议使用语言监视器)。这是一个很大的主题,您需要阅读大量的文档来了解如何做到这一点,但是WDK中有一个示例(Pjlmon)。请注意,适用于Windows 8/Server 2012的较新V4驱动程序型号
  • 如果您不需要透明地执行此操作,您可以设置(免费)调用您的应用程序来编辑spool文件。RedMon然后将其发送到所需的打印机

  • VeryPDF有一些功能更强的


  • 我有java/scala背景,你有什么建议?实际任务是在spool文件中包含额外的PJL头,然后发送到打印机。由于您暗示要避免本机编码,我建议先尝试选项3。我设置了RedMon,但它只能转发到另一台打印机/输出。我想我会在Visual C++或其他方面工作,在打印后暂停打印任务,编辑它然后释放它是完全可以实现的吗?我只需要为1台打印机实现此功能,但不能在正常工作的其他打印机上实现。我认为您可以使用其他端口监视器,但它们是商用的。VeryPDF在他们的众多产品中有一种——它是。另一个。或者,您可以使用Windows SDK监视器示例作为基础编写自己的端口监视器(选项2),也可以使用RedMon源代码。但是,是的,选择1是绝对可能的。我的另一个答案链接到示例。这就是语言监视器的用途。
    %-12345X@PJL SET STRINGCODESET=UTF8
    @PJL COMMENT DATE=02/08/2017
    @PJL ENTER LANGUAGE=PCLXL
    ) HP-PCL XL;2;1;FXXPL2-1.0.0,WINNT-6.1,XPL2DRV-6.9.1.1
    ?X???........