2011-09-06 172 views
0

我正在處理自動生成傳真的應用程序。 系統使用字互操作來填充模板.doc文件的值(它工作正常),但是當需要將結果文件打印到pcl時,我遇到了問題。Word.Interop打印到pcl文件。

所以,我們有一臺HP Laserjet打印機,它可以打印.pcl文件。

Dim appWord As New Word.Application 
Dim doc As New Word.Document 
appWord.ActivePrinter = PCL_PRINTER 
doc = appWord.Documents.Open(APPLICATION_DIR & "LTL_" & n.Language & ".doc") 

...(裝滿值的文件)

outFile = APPLICATION_DIR & "Faxout\DROPDIR\" & n.Order & ".pcl" 
doc.PrintOut(True, True, , outFile, , , , , , , True) 
'cleanup... 

問題是doc.PrintOut線運行時,字抱怨,彈出一個消息: The file 1472136.pcl is not available.

我已經嘗試了各種各樣的組合,但錯誤消息仍然存在。偶爾,這個東西實際上起作用並生成一個可用的pcl文件,但98%的時間,錯誤信息彈出,整個過程停頓。

我們在同一臺服務器上有其他應用程序,它們幾乎完全相同,除了它們是從excel而不是word打印的,並且它們在不拋出錯誤的情況下工作。

任何人都可以幫忙嗎?

+0

我只是想通了。顯然,在嘗試寫入文件之前,您必須先創建該文件。 我想早些時候創建文件,但沒有意識到,創建返回一個文件流,需要關閉之前,單詞將打印出來。 有什麼辦法可以在vb.net中創建一個文件,該文件不會在文件流對象上創建文件鎖定?這個版本可以工作,但它有助於清理代碼。 – tdoan

+0

顯然,我不能「回答我自己的問題」7個小時,所以我明天將不得不發佈更完整的解決方案。 – tdoan

回答

0

我只是想通了。顯然,在嘗試寫入文件之前,您必須先創建該文件。

如:

Dim fs As FileStream 
fs = System.IO.File.Create(outFile) 
fs.Close() 
fs = Nothing 
doc.PrintOut(True, True, , outFile, , , , , , , True) 

我會嘗試創建文件較早,但並沒有意識到,創建返回這之前需要將字打印出來,以它來關閉一個文件流。

有沒有辦法在vb.net中創建一個文件,該文件不會在文件流對象的文件上創建鎖定?這個版本可以工作,但是清理一下代碼會很好。

0

不知道這是否有幫助,但是您在該計算機上是否安裝了防病毒軟件?如果是這樣,你是否嘗試禁用它?病毒掃描程序有時會在後臺訪問文件,阻止訪問或刪除臨時文件。

+0

謝謝文檔。我找到了解決方案。事實證明,病毒掃描器與它沒有任何關係,但這是一個很好的想法! – tdoan