Вот сценарий, который я пытаюсь решить. Компания, с которой я работаю, должна ежедневно печатать несколько PDF файлов для студентов. Последняя страница каждого pdf должна быть напечатана синим цветом. Наш текущий процесс состоит в том, чтобы вручную распечатать pdf файлы и отправить все страницы, за исключением последнего на один принтер с белой бумагой, а затем отправить последнюю страницу на другой принтер с голубой бумагой в лотке. Это отнимает много времени и утомительно. Я создал PowerShell script, который будет принимать все pdf файлы в заданной папке и сначала разбивает pdf файлы на две части, причем первая из них - все страницы, а последняя и вторая - последняя. Затем script отправляет каждый PDF на соответствующий принтер.
Однако эти PDF файлы защищены, поэтому script не работает. Обычно они автоматически дешифруются через несколько секунд после открытия Adobe Reader, но поскольку script печатает их сразу же, нет времени для декодирования.
Мне интересно:
- Есть ли способ разрешить проблему шифрования в Powershell и
- Кроме того, можно выбрать лоток при автоматической печати для правильной печати цветных страниц с использованием только одного принтера. (Это было бы идеально, так как страницы останутся в порядке. В настоящее время у нас нет принтера с двумя лотками, но по мере расширения компании мы, безусловно, будем.)
Из того, что я знаю, я считаю, что # 2 потребует С#, поэтому я готов отказаться от своего Powershell script, если это означает возможность автоматического выбора лотка для бумаги.
Здесь мой текущий script (это не очень, извините)
# Set Up Folders
$input = "C:\batchPrintPKs\unsplit_pdfs"
$output_f = "C:\batchPrintPKs\split_pdfs_f"
$output_l = "C:\batchPrintPKs\split_pdfs_l"
# Load Adobe and PDFtk (Used to split PDFs)
$adobe= 'C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe'
$pdftk = "C:\Program Files (x86)\PDFtk Server\bin\pdftk.exe"
# Printer Names
$printername_brother='Brother DCP-L2540DW series Printer'
$printername_epson='Epson854235 (ET-4550 Series)'
# Create List of Paths to Pdfs to Work With
$files1 = Get-ChildItem "c:\batchPrintPKs\unsplit_pdfs\*.pdf"
# For All PDFs in unsplit_pdfs
foreach ($file1 in $files1){
# Calculating Indexing
$Match = 'NumberOfPages: (\d+)'
$NumberOfPages = [regex]::match((& $pdftk $file1 dump_data),$Match).Groups[1].Value
$SecondToLastPage = $NumberOfPages - 1
# Making PDF of pages 1 - Second to Last
Get-Childitem -path $input -filter *.pdf -recurse | foreach {
& $pdftk $_.Fullname cat 1-$SecondToLastPage output $output_f\"f_"$_
}
# Making PDF of last page
Get-Childitem -path $input -filter *.pdf -recurse | foreach {
& $pdftk $_.Fullname cat $NumberOfPages output $output_l\"l_"$_
}
# Removing File
Remove-Item $file1
}
sleep(5)
# Brother
# Create List of Paths to Pdfs to Work With
$files2 = Get-ChildItem "c:\batchPrintPKs\split_pdfs_f\*.pdf"
# Print Each File to the Epson
foreach ($file2 in $files2){
$arglist1='/t "{0}" "{1}"' -f $file2, $printername_Brother
Start-Process $adobe $arglist1
sleep(2)
# Removing File
Remove-Item $file2
}
# Epson
# Create List of Paths to Pdfs to Work With
$files3 = Get-ChildItem "c:\batchPrintPKs\split_pdfs_l\*.pdf"
# Print Each File to the Epson
foreach ($file3 in $files3){
$arglist2='/t "{0}" "{1}"' -f $file3, $printername_Epson
Start-Process $adobe $arglist2
sleep(2)
# Removing File
Remove-Item $file3
}