J'ai besoin d'imprimer un document Word du côté serveur vers une imprimante réseau. Ma page Web envoie le document et l'emplacement du fichier au serveur pour qu'il ouvre et remplace les éléments de fusion de courrier, puis imprime le document sur une imprimante réseau préférée (pas par défaut). Le nom de l'imprimante préférée change lorsque le document sélectionné sur la page Web change.
J'utilise Bibliothèque d'objets Word 14.0, Asp.Net MVC 4.0, .Net Framework 4.0, IIS 7 sur Windows server 2008 R2 . Sur IIS j'ai créé un pool d'applications qui fonctionne sur un compte spécifique Identity (accountName@DomainName). Charger le profil de l'utilisateur défini sur true pour charger les connexions de l'imprimante réseau dans le registre. J'ai autorisé le compte à avoir des permissions pour exécuter les services d'interopérabilité de word COM. J'ai réussi à ouvrir le document, à remplacer les champs de fusion de courrier et à l'enregistrer au format PDF pour envoyer le fichier en tant que pièce jointe à un courriel.
L'application Word a l'imprimante par défaut dans son ActivePrinter
afin que je puisse également imprimer sur l'imprimante par défaut. Mais mon objectif final est d'imprimer le mot sur une imprimante réseau préférée avant de fermer l'application Word et le document actif.
Les deux méthodes suivantes provoquaient des exceptions si j'essayais de modifier l'adresse de l'utilisateur. ActivePrinter
propriété.
Word.Application wordApp = new Word.Application();
Première méthode :
wordApp.ActivePrinter = "preferredPrinterName";
Deuxième méthode ;
object[] oWordDialogParams = { "\\<serverName>\<PrinterName>", true };
string[] argNames = { "Printer", "DoNotSetAsSysDefault" };
object wordBasic = wordApp.WordBasic;
wordBasic.GetType().InvokeMember("FilePrintSetup"
, System.Reflection.BindingFlags.InvokeMethod
, null
, wordBasic
, oWordDialogParams
, null
, null
, argNames);
J'ai constaté que l'objet d'application Word ne charge pas toutes les imprimantes installées sur le compte de l'utilisateur. Il ne charge que l'imprimante par défaut. Je suppose que c'est la raison des exceptions lorsque les deux méthodes ci-dessus tentent de modifier ou d'ajouter une imprimante préférée à l'objet d'application, car l'imprimante que j'essaie de définir n'a jamais été trouvée dans la liste des imprimantes actives.
Comment faire pour que toutes les imprimantes partagées installées sous le profil de l'utilisateur soient chargées dans l'objet d'application Word ?