Подтвердить что ты не робот

Как автоматически печатать PDF файлы с подробными параметрами?

Вот сценарий, который я пытаюсь решить. Компания, с которой я работаю, должна ежедневно печатать несколько 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
    }
4b9b3361

Ответ 1

В этом сценарии вы можете попробовать использовать стороннее решение, например Виртуальный принтер Google или аналогичный

Ответ 2

Я понимаю, что это старый вопрос, но itextsharp - это дополнение, которое вы можете прочитать в pdf файлах в powershell и т.д.

Ответ 3

  Как правило, они автоматически расшифровываются через несколько секунд после открытия Adobe Reader, но, поскольку сценарий распечатывает их сразу, времени для декодирования нет.

Вы пытались добавить команду сна?

Start-Sleep -Seconds 10 # for example to wait for 10 seconds!