- Vixual - http://www.vixual.net/blog -

如何自動列印 PDF 檔與圖檔

由於公司的傳真是用數據機接收,再以 PDF 的格式儲存在特定的資料夾,於是就有了自動列印 PDF 檔案的需求。

原本我想這功能應該滿簡單的,應該是寫個批次檔 + 隨便一套 PDF Reader 應該可以達成。

Acrobat Reader

首先研究業界標準的 Acrobat Reader 是否能用命令列來列印 PDF 檔案。

測試它的命令列語法1:

"C:\Program Files\Adobe\Reader\AcroRd32.exe" /p D:\auto_print\test.pdf

結果:

Acrobat Reader 會開啟檔案,顯示列印的對話視窗,等你按下 [確定] 它才會列印,列印完會自動關閉 PDF 檔,但不會關閉 Acrobat 的主視窗。

測試它的命令列語法2:

"C:\Program Files\Adobe\Reader\AcroRd32.exe" /h /t D:\auto_print\test.pdf

結果:

Acrobat Reader 會以「最小化視窗」的方式開啟檔案,以「預設的印表機」完成列印工作,列印完會自動關閉 PDF 檔,但不會關閉 Acrobat 的主視窗。

(Acrobat Reader 全部的的命令列指令可以參考: Adobe Developer FAQ)

Acrobat Reader 雖然可以自動列印,但不會關閉主程式,可以說是陰魂不散。不會關閉主程式就無法執行批次檔的下一行指令了...於是我再尋求其它的程式...

Foxit Reader

再來研究知名的 Foxit Reader

測試它的命令列語法:

"D:\Portable\FoxitReader-5.3.1\Foxit Reader.exe" /p D:\auto_print\test.pdf

結果:

Foxit Reader 會「無聲無息」的以「預設的印表機」完成列印工作,不會彈出任何的視窗或任何的訊息要你確認...

真是太令人感動了!!而且我用的還是 Portable 可攜版,所以 Foxit Reader 自動列印成功!!

繼續研究 Foxit Reader 還有哪些指令:

"D:\Portable\FoxitReader-5.3.1\Foxit Reader.exe" /help
Here are some command lines that can be used with Foxit Reader using the following syntax:
<Reader Path> [/register] | [PDF Path] [/pwd] [/p | /pt <PDFPath> [Printer]] [/A [...] [...] ...]
Command                         Description
/register                       Set Foxit Reader as the default reader
/pwd <password>                 Input the password of the protected PDF documents
/p <PDF Path>                   Print the document with default printer
/t <PDF Path> [Priter]          Print the document with designated printer
<PDF Path> /A [...] [...] ..    Open a PDF document with a command that specifies exactly what to display, and how to display it

可以用參數 /t <PDF Path> [Priter] 以指定其它印表機,也可以用參數 /pwd <password> 來指定開啟檔案時的密碼 (雖然暫時用不到),Foxit Reader 太棒了,完全符合我的需求。

自動列印批次檔

接下來就是寫個批次檔來列印特定資料夾下的 PDF 檔,列印完還要把檔案移到其它資料夾,免得下次又被拿出來列印。

批次檔的內容如下:

@ECHO OFF

:: 待列印的 PDF 資料夾
SET PDF="D:\auto_print"

:: 列印完畢的 PDF 資料夾
SET OK="D:\auto_print\ok"

:: PDF Reader 的程式路徑
SET EXE="D:\Portable\FoxitReader-5.3.1\Foxit Reader.exe"

ECHO 開始列印: %PDF%

:: 取得 PDF 檔案名稱,執行列印、搬移檔案 (自動覆蓋舊檔)
FOR %%f IN (%PDF%\*.pdf) DO ECHO %%f && %EXE% /p %%f && MOVE /Y %%f %OK%

ECHO 列印完畢

批次檔可以隨便命名,但副檔名必須是「.bat」。把這個批次檔加到 Windows 的「工作排程器」去定期執行就 ok 了。

附註: 如何自動列印圖檔

要自動列印圖檔只要用「小畫家」就可以了,不過必須是它支援的圖檔格式。

測試它的命令列語法:

mspaint /p D:\auto_print\test.jpg

結果:

小畫家會彈出一個小對話框,顯示列印進度,以「預設的印表機」完成列印工作,列印完也會自動關閉程式。

這樣已經符合我們的需求了,可以依樣畫葫蘆寫個批次檔讓它列印特定資料夾以下的圖檔。

不過有兩點是要特別注意的:

  1. 小畫家列印出來的東西會變成橫向的
  2. 如果是多頁的 TIFF 圖檔,則只會列印第 1 頁

參考網頁