Powershell:自動列印PDF

透過排程去呼叫Powershell自動列印特定資料夾的PDF。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$adobe='C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\acrord32.exe'
$printername='TWTPENP22501'
$Directory = "D:\Test"
$PrintedDir = "D:\Printed"

foreach($File in Get-ChildItem -Path $Directory -Recurse)
{

    Move-Item -Path "$Directory$File" -Destination $PrintedDir -Force
    $arglist='/S /T "{0}" "{1}"' -f "$PrintedDir$File", $printername
    start-Process $adobe -ArgumentList $arglist
}
$sleepcount = $CountFiles.Count + [int]11
Start-Sleep $sleepcount

Remove-Item $PrintedDir\*.pdf -Force -ErrorAction SilentlyContinue

這一段程式是使用Adobe Reader DC的Command line模式來通知列印。
利用變數去組合起整段的Command line。
由於列印的動作相對的比較慢,所以是先把要印的PDF檔先搬到Printed的目錄再去列印
動作會是搬一個檔案印一個檔案,所以不會有漏印的問題。
刪除檔案的部分:
1.因為透過Adobe Reader打開來印速度會比較緩慢一點。所以會視檔案數量做延遲的動作。
2.如果有卡住沒刪掉印過的檔案,排程下一次執行也會一併刪除

這一段你可以按照你的需求/硬體效能修改變數,放到排程執行,只有有人放檔案進去就會自動進行列印。

下面附上有Log的版本,方便各位除錯。Log會放在列印的目錄裡。依照日期做檔名。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$adobe='C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\acrord32.exe'
$printername='TWTPENP22501'
$Directory = "D:\Test"
$PrintedDir = "D:\Printed"
Function LogWrite
{
    Param([string]$logstring)
    $Logfile = "$PrintedDir"+(Get-date -Format 'yyyy-MM-dd')+".txt"   #LogFile
    Add-content $Logfile "$(Get-date -Format 'yyyy-MM-dd tthh:mm:ss') $logstring"
}
$CountFiles = Get-ChildItem -Path $Directory | measure
foreach($File in Get-ChildItem -Path $Directory -Recurse)
{
    Move-Item -Path "$Directory$File" -Destination $PrintedDir -Force
    LogWrite "Move $Directory$File to $PrintedDir"
    $arglist='/S /T "{0}" "{1}"' -f "$PrintedDir$File", $printername
    LogWrite "$arglist"
    start-Process $adobe -ArgumentList $arglist
    LogWrite "Print $File"
}
$Countfilenumber = $CountFiles.Count
$sleepcount = $CountFiles.Count + [int]11
LogWrite "Wait $sleepcount seconds to delete file."
Start-Sleep $sleepcount

foreach($WillDelFile in Get-ChildItem -Path $PrintedDir -Recurse)
{
    LogWrite "$WillDelFile will be delete."
}
Remove-Item $PrintedDir\*.pdf -Force -ErrorAction SilentlyContinue
LogWrite "There are $Countfilenumber PDF files deleted"

準備列印

送出完成

Log紀錄

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料