使用NetOffice打印Word文档

时间:2014-05-02 07:38:52

标签: printing ms-word netoffice

我正在将服务迁移到使用NetOffice而不是自动化MS Word,以防止Office部署版本在部署到使用旧Office的系统时与开发系统上不匹配。

到目前为止,一切都很顺利。

但是,我在打印Word文档时遇到了一些困难。这在自动化MS Word时工作得很好,但是当我尝试使用NetOffice时,我的代码中出现了强制转换错误。

以下是我正在做的代码示例。 (appWord是NetOffice Word.Application的一个实例)

                object paramFilePath = full_path_to_document;
                object falseValue = false;
                object missing = Type.Missing;
                object wb = appWord.WordBasic;
                int copies = 1;

                object[] argValues = null;
                string[] argNames = null;

                // the specific printer for the print job
                argValues = new object[] { "printer_name", 1 };
                // do not change the default printer
                argNames = new String[] { "Printer", "DoNotSetAsSysDefault" };

                Word.Document doc = appWord.Documents.Open(paramFilePath, missing, falseValue, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);

                wb.GetType().InvokeMember("FilePrintSetup", BindingFlags.InvokeMethod, null, wb, argValues, null, null, argNames);

                for (int i = 0; i < copies; i++)
                {
                    appWord.PrintOut(); 

                    Thread.Sleep(100);
                }

以前这对MS Word工作得很好(除了Documents.Open方法的参数是参考),但现在我在对象wb = appWord.WordBasic这一行得到了一个强制转换错误;

任何人都可以告诉我应该如何使用NetOffice在特定打印机上打印Word文档(同时不更改默认打印机),因为我没有成功迁移此特定方法。

1 个答案:

答案 0 :(得分:0)

在NetOffice中获取WordBasic-Object时遇到问题。

这个C#-Code工作(NetOffice 1.6.0)来设置打印机而不更改系统默认打印机:

var dialog = appWord.Dialogs[WdWordDialog.wdDialogFilePrintSetup];

var argValues = new object[] { "printer_name" };
dialog.UnderlyingObject.GetType().InvokeMember("Printer", BindingFlags.SetProperty, null, dialog.UnderlyingObject, argValues);

argValues = new object[] { 1 };
dialog.UnderlyingObject.GetType().InvokeMember("DoNotSetAsSysDefault", BindingFlags.SetProperty, null, dialog.UnderlyingObject, argValues);

dialog.Execute();