2011-11-07 252 views
4

我們想擁有的主控文檔(自動化郵件合併後)發送,以自動方式,以同時具有網絡名稱和內部IP分配我們的網絡打印機的一個。無人值守打印網絡打印機上打印文檔

但這裏的真正棘手的部分。當我們從工作站打印文檔我們得到提示了「部門管理」對話框中輸入項目代碼,該文件是它會在打印前,所以財務部門可以做所有他們看中會計和計費的東西。

那麼,我們如何以編程方式將文檔(docx)以的作業計費參數發送到網絡打印機?

我不知道數據如何覈算常見的是做打印作業時,因爲這是我見過它的第一份工作。

這裏是重要的細節:

  • PHP 5(首選)
  • 的Windows Server(2003年,我相信)
  • 京瓷KM-4050打印機(W /靜態IP)
  • 一些使用C++和Visual Basic的經驗

我們已經做了一些研究,但在野外找不到太多可行的解決方案,討論,我們並不完全確定從哪裏開始。不幸的是,似乎沒有任何我們可以插入的API。

----- -----解決方案

我的團隊已經決定執行代碼,將調用一個可執行文件到每個文檔轉換爲PCL,然後把生成的PCL和預置它與

@PJL SET KJOBMANAGERCODE="[project code here]" 

然後,我們將採取生成的文件,並將其寫入到打印機的後臺打印,使打印機將處理它,並開始每個作業。

感謝大家的幫助。每個答案都很大程度上激發了我們實施計劃的某個部分。

+0

我們是否應假定工作會計功能是由打印機驅動程序提供的,並且沒有公共API可用? –

+0

是的,這個提示是由驅動程序直接強制執行的,但我想通信規範可能會通過這些信息可能是企業打印機的標準。雖然不確定,但提示本身直接來自驅動程序。 – WhiskeyTangoFoxtrot

+0

請添加一些截圖以顯示標準打印過程。 – hakre

回答

1

我的團隊已經決定執行代碼,將調用一個可執行文件到每個文檔轉換爲PCL,然後把生成的PCL,並在前面加上其與

@PJL SET KJOBMANAGERCODE =「[項目代碼在這裏] 「

然後我們將生成的文件寫入打印機的打印機,打印機將處理它並開始每個作業。

謝謝大家的幫助。每個答案都很大程度上激發了我們實施計劃的某個部分。

1

我會做的是:

  • 創建一個C++/VB腳本,會做的辛勤工作(對不起沒有從我的幫助)
    • 使它看起來成工作目錄/接受CLI PARAMS
  • 使服務器PHP文件保存到某個目錄中的一些信息
    • 說節省的1.txt沿(數量爲你的內部COUN ter,並且必須是唯一的,並且每個新的必須比前一個更大)歸檔到/ path/infos中,具有類似這樣的內容:1 c:\ temp \ filetoprint。DOCX
  • VB腳本將尋找到該目錄,並閱讀的第一個文件(一個最小號)
    • ,並認爲它是部門管理ID = 1
    • 打印是在文件C:\ TEMP \ filetoprint.docx
    • 並打印出來:)
    • 刪除文件(S)
(重要!)

現在一切都取決於你的VB/C++編程技巧:)順便說一句:另一種選擇是,而不是將文件保存到目錄,您可以使用VBScript/C++的exec()和CLI參數。但是基於文件的解決方案更加強大,因爲它是一種自然隊列,它也抵制了打印程序的失敗 - 作業只有在完成後纔會被刪除。如果打印作業失敗,它會在下次嘗試。類比文件可以使用數據庫來完成,但我不確定從VB/C++連接到數據庫是多麼容易,所以文件系統是最好的回退;)

PHP部分只有一個指向腳本的鏈接將JA ID和文件名保存到/ path/infos中的文件這是一種解決方法,但我認爲在純PHP中使用PHP擴展並不值得。

+0

我打算與我的團隊對此進行審查,以確定其可行性。 – WhiskeyTangoFoxtrot

1

'工作會計'只是驅動器重新命名用戶名/密碼提示。

如果您提到了您用於託管PHP的操作系統以及您的用戶在哪裏遇到這些提示,這很有幫助 - 但我認爲您很明顯正在使用MSWindows。

簡而言之,您需要繞過對話框 - 當前內置於您的打印機驅動程序中)。可以配置打印機驅動程序,也可以使用替代打印子系統,如Cups

+1

在做了更多的研究之後(例如,在一個測試文件中「打印到文件」),事實證明會計參數在PJL中是這樣傳遞的: ** @PJL SET KJOBMANAGERCODE =「10017」** 其中10017是項目我選擇的項目代碼。 – WhiskeyTangoFoxtrot

1

如果你想要它使用PHP,傳遞PJL參數(會計需要)是不容易實現的(AFAIK當然)。但是您可以使用套接字連接來傳遞您喜歡的任何參數以及要打印的文檔。例如:

> @PJL INFO ID 
@PJL INFO ID 
"LASERJET 4000" 
> @PJL INFO STATUS 
@PJL INFO STATUS 
CODE=10001 
DISPLAY="Ready" 
ONLINE=TRUE 
> @PJL INFO PAGECOUNT 
@PJL INFO PAGECOUNT 
536225 
> @PJL INFO MEMORY 
@PJL INFO MEMORY 
TOTAL=2526160 
LARGEST=1204208 

上面的例子是從IronGeek Blog,誰擁有編碼自己的連接來控制網絡打印機的一個有趣的introductionary文章。但是,我會先從打印機上的計算機和網絡打印機之間嗅探發送的流量開始,以便詳細瞭解所涉及的確切命令 - 這應該可以通過基於PHP的套接字輕鬆實現協議。

+0

我可能不能使用基於CLI的EXE(通過php中的exec()調用)來生成帶有PCL(PRN底部的二進制散列,在PJL參數下面)的.PRN文件,然後使用PHP在文件頂部寫入PJL參數。然後將該PRN文件寫入打印機隊列? – WhiskeyTangoFoxtrot

+0

是的,這可能是可能的。你可以例如根據你的流量嗅探書寫一個標題模板,並用真實的變量替換常見變量。這使得它比實現一個完整的PJL-API更容易,這對於你的問題來說會是一個矯枉過正的問題。不幸的是,我沒有合適的打印機設置,因此我無法再幫助您。 – Lars