Jamyy's Weblog

Windows 自動列印 PDF 文件

by Jamyy on 一月.19, 2011, under Linux, Windows

目的: 定時檢查分享資料夾, 列印存放在分享資料夾裡的 PDF 文件。很蠢, 但有效。

作業流程: 排程每分鐘檢查一次分享資料夾 → 發現 ok.txt 檔案則呼叫 acrord32.exe (Adobe PDF Reader) 或 acrobat.exe (Adobe Acrobat Pro) 列印分享資料夾裡的 PDF 檔案 → 發訊息通知使用者已經送交印表機列印 → 刪除分享資料夾裡的所有檔案

環境: Printer Server (Windows XP)、Client (Ubuntu)

訊息傳遞軟體: IP Messenger (Windows)、iptux (Linux)

Printer Server 環境建置 (Windows XP)

以下皆於命令提示字元 (Command Prompt) 視窗中操作

建立相關路徑
cd \
mkdir tmp
mkdir tmp\spool1
mkdir tmp\spool2
mkdir tmp\spool3

分享目錄 (允許任何人寫入)
net share spool1=C:\tmp\spool1 /UNLIMITED
net share spool2=C:\tmp\spool2 /UNLIMITED
net share spool3=C:\tmp\spool3 /UNLIMITED

下載 IP Messenger, 將 ipmsg.exe 解包到 C:\tmp\

取得印表機名稱 (使印表機名稱與之後的 autoprint.bat 內容相對應)
control printers

notepad c:\tmp\autoprint.bat

@echo off
rem 參數1: PDF 文件路徑; 參數2: 印表機名稱
call action.bat C:\tmp\spool1 "My Printer - Recycled Paper Printing"
call action.bat C:\tmp\spool2 "My Printer - New Paper Printing"
call action.bat C:\tmp\spool3 "\\192.168.1.100\sharedprt"

notepad c:\tmp\action.bat

@echo off
set TARGETPATH=%1
set PRINTER=%2

if exist %TARGETPATH%\done.txt goto cleanup
if exist %TARGETPATH%\ok.txt goto startup
goto end

:startup
rem 於 TARGETPATH 中發現 ok.txt, 開始進行列印處理
rem 將 TARGETPATH 路徑下的 PDF 檔案列印到指定的印表機
for /R %TARGETPATH% %%i in (*.pdf) do call start /min /D"C:\Program Files\Adobe\Acrobat 9.0\Acrobat\" acrobat.exe /h /t %%i %PRINTER%
rem 產生 done.txt 表示已經送交列印處理
echo done > %TARGETPATH%\done.txt
rem 傳遞訊息給 ok.txt 裡面所註明的 IP 位址, 通知已經進行列印作業
for /F %%i in ('type %TARGETPATH%\ok.txt') do ipmsg /MSG /SEAL %%i Printed
goto end

:cleanup
rem 若在 TARGETPATH 中發現 done.txt 表示已經完成列印作業
rem 將路徑下的檔案全數刪除, 並停止 acrobat.exe 程序
del /q %TARGETPATH%\*.*
taskkill /f /im acrobat.exe /fi "USERNAME eq NT AUTHORITY\SYSTEM"

:end

排程每分鐘自動執行 C:\tmp\autoprint.bat
control schedtasks

Linux 環境配置 (Ubuntu)

#安裝並執行 iptux
sudo apt-get install iptux
iptux

#製作 ok.txt (內含本機 LAN IP), 讓 Printer Server 的 ipmsg.exe 回傳訊息
ifconfig eth0 | grep "inet addr" | cut -d ':' -f 2 | awk '{print $1}' > /tmp/ok.txt

#上傳 PDF 檔案到 Printer Server (方式一)
#假設 Printer Server (Windows XP) 的 LAN IP 是 192.168.1.100

smbclient //192.168.1.100/spool1 -U guest%

put myfile.pdf
lcd /tmp
put ok.txt
exit

#上傳 PDF 檔案到 Printer Server (方式二)
mkdir /tmp/smb
sudo mount //192.168.1.100/spool1 /tmp/smb -o \
  username=guest,password=,uid=myuid,gid=mygid
cp myfile.pdf /tmp/smb/
cp /tmp/ok.txt /tmp/smb/

延伸閱讀



:,