【问题标题】:How to listen to printing jobs in java如何在 Java 中收听打印作业
【发布时间】:2012-01-18 15:50:53
【问题描述】:

我想知道如何在 Java 应用程序中查看任何其他应用程序(Word、Excel、PDF 阅读器)发送到打印机的打印详细信息。这意味着,用户可以从一台 PC 将各种类型的文档发送到打印机。

我的 Java 应用程序必须计算发送到打印机的文档数量。

如何在 Java SE 应用程序中获取这些详细信息?非常感谢任何资源、有用的链接和指导。

【问题讨论】:

    标签: java printing


    【解决方案1】:

    这不能直接使用 Java 完成,但有一种解决方法。

    对于每个打印作业,Windows 假脱机服务会生成两个假脱机文件。

    一个带有.SHD 扩展名的文件用于作业设置,一个带有.SPL 扩展名的文件用于绘图命令。

    这些文件可以按打印机存储在用户定义的位置。所有后台处理程序作业的默认位置是c:\windows\system32\spool\PRINTERS

    按打印机设置位置

    1. 单击开始,单击运行,在打开的框中键入regedit,然后单击 好的。

    2. 找到以下注册表子项,其中<printername> 是 您的打印机名称:

      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\

      在右侧窗格中, 右键单击SpoolDirectory,然后单击修改。

    3. 在“数值数据”框中,键入要存储假脱机文件的位置。 例如,键入 c:\windows\system32\spool\printers 作为默认值 地点。

    4. 退出注册表编辑器。重新启动 Print Spooler 服务。

    所有新工作都将采用XXXXX.SPLXXXXX.SHD 的形式,并且将与其 JobID 一致地编号。

    使用 Java,您可以监视此文件夹是否有新作业发送到打印机服务或特定打印机。

    【讨论】:

    • 非常感谢约翰先生。正如您提到的,有一个文件夹。您能解释一下吗?我想知道,是否为每次打印创建一个 .SHD 文件?(例如打印一个文档,一个.SHD文件)以及这个文件存在多长时间?(直到命令发送到打印机?,我在我的文件夹中查找,但即使我已经打印过它也是空的)如果是这样,我们应该总是查看此文件夹并计算这些文件?另外如果打印机比较多,我们如何识别哪个打印机属于哪个.SHD?(jobid号是否有哪个打印机的job要打印?)
    • 打印作业完成后,这些文件将被清除。我以前没有做过这个,这是我想到的一个想法。
    • 您提到'一旦打印作业完成,这些文件将被清除..' 如果打印机需要 4 秒打印,.SHD 文件可能会保留 4 秒?或者只是发送命令,创建 .SHD 文件并删除 .SHD 文件?如果是这样,我们将无法捕获 .SHD?(即使在线程中 while(true){通过 java 代码计算文件夹中的文件。 ..} 如果 jdk 抓取文件夹中的文件速度很慢,可能不会给出一个好的结果?)任何方式你的想法都很棒。再次感谢它。 :)
    • 也许你可以引入 JNI 并使用 Print Spooler API (msdn.microsoft.com/en-us/library/windows/desktop/…)
    猜你喜欢
    • 2016-08-14
    • 1970-01-01
    • 2016-04-03
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 2012-06-23
    • 1970-01-01
    相关资源
    最近更新 更多