Печать PDF-файлов на определенные принтеры на основе имени файла - PullRequest
0 голосов
/ 27 июня 2018

Я просто хотел бы предвосхитить это, сказав, что я новичок в Powershell и пытался учиться, подбирая вещи здесь и там. В настоящее время я пытаюсь автоматизировать процесс в своей компании, используя строго powershell и Adobe Reader.

Наша компания в настоящее время вручную печатает отдельные наборы записей и отдельную титульную страницу, связывает их и отсылает. Идея автоматизировать этот процесс состояла в том, чтобы заполнить папку заархивированным набором .pdfs в течение дня. Затем этот zip-файл будет извлечен, а его содержимое перемещено в другую папку. PDF-файлы с обычным набором записей, указанным как «Набор WO-xxxxxx» и титульный лист как «Обложка WO-xxxxxx» Все, что мне нужно сделать, это создать простой сценарий, который распечатывает их по порядку, так что «Обложка WO-000001» находится поверх «набора WO-000001», а затем печатает следующий набор в порядке.

Сложность, с которой я столкнулся, заключается в том, что Start-Process -FilePath $File.Fullname -Verb Print позволяет мне использовать только принтер по умолчанию. Наши обложки нужно будет печатать на более толстой бумаге, и поэтому я подумал, что наилучшим способом будет создание двух принтеров в сети с необходимыми настройками принтера. Если бы я мог переключить сценарий между двумя принтерами на основе имени файла, то это решило бы мою проблему.

Этот скрипт отправляет документы на принтер по порядку, но не заменяет принтер по умолчанию. Я уверен, что это то, что я сделал неправильно в моем командлете IfElse, и был бы признателен экспертам за это.

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 голосов
/ 02 июля 2018

Если вы используете глагол PrintTo вместо Print, вы можете указать принтер:

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

Это позволит вам удалить вызовы SetDefaultPrinter из скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...