powershell - 如何使用 Powershell 按顺序打印 PDF 文件?

标签 powershell pdf

我有一堆 PDF 文件,我想使用 Powershell 在 Windows 7 计算机上按顺序打印它们。

get-childItem "*.pdf" | sort lastWriteTime | foreach-object {start-process $._Name -verb 'print'}

打印的文件有时会出现乱序,例如 1) A.pdf、2) C.pdf、3) B.pdf 4) D.pdf。

不同的试验打印出不同的文件序列,因此,我担心错误与打印队列或 start-process 命令有关。我的猜测是每个打印过程都会被触发,而无需等待前一个打印过程完成。

有没有办法按照我指定的顺序一致地打印出 PDF 文件?

最佳答案

您正在按顺序启动进程,但默认为 Start-Process不会等到命令完成才开始下一个命令。由于根据 .PDF 文件的大小,命令需要不同的时间来完成,因此它们以任何完成的顺序打印。尝试添加 -wait切换到您的Start-Process ,这将迫使它等到命令完成后再开始下一个命令。

编辑:在 Stack 的其他地方找到了一篇文章来解决这个问题。也许会有所帮助。 https://superuser.com/questions/1277881/batch-printing-pdfs

此外,还有许多不是 Adob​​e 的 PDF 解决方案,其中一些在自动化方面比标准阅读器要好得多。 Adobe 拥有您可以使用的许可 .DLL 文件,并且 Acrobat 的专业版还具有与后端 .DLL Hook 的功能。

如果您必须使用 Acrobat Reader DC(封闭系统或类似系统),那么我会尝试打开要打印的文件并获取指向进程的指针,然后等待一段时间,然后强制关闭进程。如果您的 PDF 大小已知并且您可以估计完成打印需要多长时间,这样您就不会在完成之前终止该过程,这将很有效。像这样的东西:

ForEach ($PDF in (gci "*.pdf"))
{
    $proc = Start-Process $PDF.FullName -PassThru
    Start-Sleep -Seconds $NumberOfSeconds
    $proc | Stop-Process
}

编辑#2:一种可能(但未经测试)的优化是您可以使用 ProcessorTime 计数器 $proc.PrivilegedProcessorTime$proc.UserProcessorTime查看进程何时空闲。当然,这假设程序在打印后完全空闲。我会尝试这样的事情:
$LastPrivTime = 0
$LastUserTime = 0
ForEach ($PDF in (gci "*.pdf"))
{
    $proc = Start-Process $PDF.FullName -PassThru
    Do
    {
        Start-Sleep -Seconds 1
        $PrivTimeElapsed = $proc.PrivilegedProcessorTime - $LastPrivTime
        $UserTimeElapsed = $proc.UserProcessorTime - $LastUserTime
        $LastPrivTime = $proc.PrivilegedProcessorTime
        $LastUserTime = $proc.UserProcessorTime
    } 
    Until ($PrivTimeElapsed -eq 0 -and $UserTimeElapsed -eq 0)
    $proc | Stop-Process
}

如果程序仍然过早结束,您可能需要增加 # of seconds 以在内部 Do 循环内休眠。

关于powershell - 如何使用 Powershell 按顺序打印 PDF 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60103920/

相关文章:

powershell - 在 PowerShell 脚本中转义命令标志中的句点字符?

java - 命名我的内嵌 pdf

r - 在 .pdf 文件上提取图像会产生异常的垂直条纹

c# - 一键打印多个 PDF 文件

Powershell:如何用引号将字符串数组括起来,以便 SQL "IN"运算符起作用?

Powershell UNC 路径不支持异常

networking - RPC 服务器不可用。 (HRESULT : 0x800706BA) 的异常

java - 文本居中,不考虑 x 坐标

pdf - 如何在IE中显示base64编码的pdf?

arrays - PowerShell - 是否每小时创建一个文件?