java - 在发送到打印机之前,如何以编程方式实现普通 Windows 打印队列 'spool file' 的假脱机文件头的编辑?

标签 java c# printing print-spooler-api pjl

如何拦截和更改 Windows 7 打印假脱机文件 (.SPL),以在执行该文件发送到打印机之前在 header 中添加一些附加信息,例如“@PJL SET NAME="PainPoint"”打印作业?

顶部的 .SPL 文件部分摘录如下:

%-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???........

最佳答案

编辑假脱机文件显然是微不足道的。诀窍在于如何访问假脱机文件。

我可以立即想到一些方法:

  1. 假脱机后暂停打印作业,对其进行编辑,然后释放。 See my answer here 。这并不是一件小事,您可能需要根据可用的时间/精力求助于第三方软件。
  2. 创建打印驱动程序或spooler component例如端口或 language monitor编辑文件。 (感谢 Carey Gregory 建议使用语言监视器)。这是一个很大的主题,您必须阅读大量文档才能弄清楚如何做到这一点,但 WDK 中有一个示例 (Pjlmon)。请注意,适用于 Windows 8/Server 2012 doesn't support these components 的较新 V4 驱动程序模型.
  3. 如果您不需要透明地执行此操作,您可以设置 RedMon (免费)调用您的应用程序来编辑假脱机文件。然后 RedMon 会将其发送到所需的打印机。

  4. VeryPDF 有一些 similar commercial products具有更多功能。

关于java - 在发送到打印机之前,如何以编程方式实现普通 Windows 打印队列 'spool file' 的假脱机文件头的编辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42102898/

相关文章:

Javafx 箭头按钮

java - 如何只打印文本?

Java JDBC 线程安全

java - Eclipse RCP - 将子菜单添加到现有文件菜单

c# - 任意精度型

c# - .net5 上的函数 : No job functions found. 尝试将您的作业类和方法公开

python - 如何让新的 python 接受不带括号的打印?

c# - 在 Awesomium 中打印到打印机?

java - Spring 网关: how to dynamically set URI and path based on request headers and path

c# - 传递一个 List<T> 和一个 bool