Word.Interop打印到pcl文件。

时间:2011-09-06 15:14:48

标签: vb.net ms-word

我正在开发一个自动生成传真的应用程序。 系统使用word interop来填充带有值的模板.doc文件(工作正常),但是当需要将生成的文件打印到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打印,并且它们可以正常运行而不会抛出错误。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

不知道这是否有帮助,但您是否在该计算机上安装了防病毒软件?如果是这样,你试图禁用它吗?病毒扫描程序有时会在后台访问文件,阻止访问或删除临时文件。

答案 1 :(得分:0)

我只是想通了。显然,您必须在尝试写入文件之前创建该文件。

例如:

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

我之前尝试过创建该文件,但没有意识到Create返回了一个文件流,需要在word打印出来之前将其关闭。

有没有办法在vb.net中创建一个不会在文件流对象的文件上创建锁的文件?这个版本有效,但是稍微清理代码会很好。