我正在将服务迁移到使用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文档(同时不更改默认打印机),因为我没有成功迁移此特定方法。
答案 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();