返回

Windows 中静默打印 PDF:告别 PDF 查看器的烦恼

windows

在 Windows 中静默打印 PDF:免去 PDF 查看器的烦恼

引言

在 Windows 中打印 PDF 时,我们通常会遇到恼人的 PDF 查看器应用程序自动启动的情况,这会打断我们的工作流程。本文将探讨如何在不打开查看器的情况下静默打印 PDF,并提供一个经过测试的解决方案,不仅可以消除打印预览的烦恼,还能让我们知道打印何时完成。

静默打印 PDF 的必要性

静默打印 PDF 在以下情况下非常有用:

  • 批量打印: 打印大量 PDF 时,频繁打开和关闭查看器会浪费时间和精力。
  • 后台打印: 在无需立即查看打印结果的情况下,静默打印允许我们在后台处理打印任务,提高效率。
  • 自动化任务: 将打印 PDF 的任务自动化,例如从 Web 应用程序生成报告或向客户发送文档。

解决方案:利用 DDE 和 Adobe Acrobat

在 Windows 中静默打印 PDF 的解决方案涉及使用动态数据交换 (DDE) 和 Adobe Acrobat Reader。DDE 是一种低级通信协议,允许不同应用程序共享数据和事件。

以下是如何使用 DDE 和 Acrobat Reader 实现静默打印:

  1. 获取 Acrobat Reader 的可执行文件路径: 使用 FindExecutable 函数找到 Acrobat Reader 的可执行文件路径。
  2. 创建 DDE 服务器和会话: 使用 CreateServerCreateConversation 函数创建 DDE 服务器和会话。
  3. 连接到 Acrobat Reader: 使用 ConnectTo 函数连接到 Acrobat Reader 的 DDE 服务器。
  4. 执行静默打印命令: 使用 Exec 函数执行 [FilePrintSilent("%s")] 命令,其中 %s 是 PDF 文件路径。
  5. 等待打印完成: 使用 QueryNextItem 函数轮询 DDE 会话,直到所有打印任务完成。
  6. 关闭 DDE 连接: 断开与 Acrobat Reader 的 DDE 连接。

示例代码

以下 Python 脚本演示了如何使用 DDE 在 Windows 中静默打印 PDF:

import win32ui, dde, os.path, time
from win32api import FindExecutable
from os import spawnl, P_NOWAIT

def silent_print_pdf(pdf_path):
    """
    在不打开 PDF 查看器应用程序的情况下静默打印 PDF。

    Args:
        pdf_path (str): PDF 文件路径。
    """

    # 分解 PDF 路径
    pdf_dir, pdf_file = os.path.split(pdf_path)

    # 获取 PDF 查看器应用程序的可执行文件路径
    reader_exe = FindExecutable(pdf_file, pdf_dir)

    # 使用 DDE 打开 PDF 查看器
    dde_server = dde.CreateServer()
    dde_server.Create('')
    dde_conversation = dde.CreateConversation(dde_server)
    dde_conversation.ConnectTo('acroview', 'control')

    # 执行静默打印命令
    dde_conversation.Exec('[FilePrintSilent("%s")]' % pdf_path)

    # 等待打印完成
    while True:
        time.sleep(1)
        if dde_conversation.QueryNextItem() == None:
            break

    # 关闭 DDE 连接
    dde_conversation.Disconnect()
    dde_server.Destroy()

# 使用示例
pdf_path = 'C:\\temp\\test.pdf'
silent_print_pdf(pdf_path)

注意事项

  • 确保已在计算机上安装 Adobe Acrobat Reader 或其他兼容的 PDF 查看器。
  • pdf_path 替换为要打印的 PDF 文件的实际路径。
  • 对于 Windows 10 或更高版本,需要禁用 Windows Defender 的受控文件夹访问,因为它可能会阻止脚本访问 PDF 文件。
  • 如果在运行脚本时遇到问题,请确保已使用管理员权限打开命令提示符或终端。

结论

通过本文提供的 DDE 和 Adobe Acrobat 的解决方案,我们可以在 Windows 中轻松地静默打印 PDF。该解决方案避免了 PDF 查看器应用程序的弹出,简化了批量打印任务,并使自动化成为可能。我们希望这篇文章能帮助程序员和 IT 专业人士提高他们的生产力和效率。

常见问题解答

问:为什么静默打印 PDF 很重要?
答:静默打印 PDF 消除了 PDF 查看器应用程序自动启动的烦恼,提高了批量打印任务的效率,并支持自动化场景。

问:如何实现静默打印 PDF?
答:在 Windows 中,可以使用 DDE 和 Adobe Acrobat Reader 来执行静默打印命令,从而在不打开查看器的情况下打印 PDF。

问:是否有可用的 Python 脚本来进行静默打印?
答:是的,本文提供了示例 Python 脚本,演示了如何使用 DDE 在 Windows 中静默打印 PDF。

问:在执行静默打印时有哪些注意事项?
答:确保已安装兼容的 PDF 查看器,例如 Adobe Acrobat Reader,并且已禁用受控文件夹访问(适用于 Windows 10 或更高版本)。

问:静默打印 PDF 是否适用于所有版本的 Windows?
答:该解决方案已在 Windows 7 和 Windows 10 系统上进行了测试,并且应该适用于所有版本的 Windows。