Печать документа 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;,

Может кто-нибудь сказать мне, как мне следует распечатать документ Word на определенном принтере (не меняя принтер по умолчанию), используя NetOffice, потому что я не смог перенести этот конкретный метод.

1 ответ

Существует проблема с получением WordBasic-объекта в NetOffice.

Этот 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();
Другие вопросы по тегам