根据文件名将PDF打印到特定打印机

时间:2018-06-27 16:53:24

标签: powershell pdf printing

我想在此开头说我是Powershell的新手,并且一直在尝试通过在这里和那里捡东西来学习。我目前正在尝试使用严格的Powershell和Adobe Reader在公司内部自动化流程。

我们公司目前正在手动打印单个记录集和一个单独的封面,将它们装订并发送出去。自动执行此过程的一个想法是在当天用一组压缩的.pdfs填充文件夹。然后将解压缩该zip文件,并将其内容移动到另一个文件夹。具有正常记录集的列为“ WO-xxxxxx集”和封面为“ WO-xxxxxx封面”的PDF。我需要做的就是创建一个简单的脚本,按顺序打印这些,以便将“ WO-000001 Cover”放在“ WO-000001 Set”的顶部,然后按顺序打印下一组。

我遇到的麻烦是Start-Process -FilePath $File.Fullname -Verb Print仅允许我定位默认打印机。我们的Covers需要打印在较厚的纸张上,因此,我认为最佳的做法是在网络上使用所需的打印机设置创建两台打印机。如果我可以根据文件名在两台打印机之间交换脚本,则可以解决我的问题。

此脚本将文档按顺序发送到打印机,但实际上并未交换默认打印机。我敢肯定,这是我在IfElse cmdlet中做错的事情,并且希望对此有专家的重视。

Function UnZipEverything($src, $dest)
{
[System.Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem") | Out-Null
$zps = Get-ChildItem $src -Filter *.zip

foreach ($zp IN $zps)
    {
    $all = $src + $zp
    [System.IO.Compression.ZipFile]::ExtractToDirectory($all, $dest)
    }
}

UnZipEverything -src "C:\Users\admin\Desktop\Zip Test\" -dest'C:\Users\admin\Desktop\UnZip Test\'

Remove-Item "C:\Users\admin\Desktop\Zip Test\*.zip"

$files = Get-ChildItem “C:\Users\admin\Desktop\UnZip Test\*.*” -Recurse

ForEach ($file in $files){
If ($files -eq '*Cover*') {
(New-Object -ComObject WScript.Network).SetDefaultPrinter('Test')
Start-Process -FilePath $File.FullName -Verb Print -PassThru | %{ sleep 10;$_ } | kill
(New-Object -ComObject WScript.Network).SetDefaultPrinter('\\RFC-Print01\Collections Tray 6')
} 

Else {Start-Process -FilePath $File.FullName -Verb Print -PassThru | %{ sleep    10;$_ } | kill
}
}

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果使用动词PrintTo代替Print,则可以指定打印机:

Start-Process -FilePath $File.FullName -Verb PrintTo '\\RFC-Print01\Collections Tray 6' -PassThru 

这将允许您从脚本中删除SetDefaultPrinter调用。