De nombreuses imprimantes et périphériques multifonctions prennent aujourd'hui en charge l'impression directe de fichiers PDF, ce qui peut résoudre l'un de vos problèmes. Il suffit d'envoyer le fichier PDF à l'imprimante. En fait, certains supportent même l'envoi d'une URL et l'imprimante va alors chercher le document et l'imprimer. Lexmark fait cela et je pense que quelques autres fournisseurs le font aussi. Cela signifie toujours que vous devez gérer le document Word. Word 2007 prend en charge PDF (avec le add-in installed from Microsoft) et j'ai utilisé cette fonction par programme avec un grand succès en C#.
Voici le code pour que:
Microsoft.Office.Interop.Word.ApplicationClass msWord = new Microsoft.Office.Interop.Word.ApplicationClass();
object paramUnknown = Type.Missing;
object missing = Type.Missing;
object paramSaveChangesNo = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges;
//object paramFonts = Microsoft.Office.Interop.Word.wde
object paramFormatPDF = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatPDF;
object paramTrue = true;
object paramReadOnly = true;
object sourceDoc = @"c:\input.doc"
object target = @"c:\output.pdf";
msWord.Visible = false;
//open .doc
msWord.Documents.Open(ref sourceDoc, ref paramUnknown, ref paramReadOnly, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown);
//so it won't show on the taskbar
msWord.Application.Visible = false;
msWord.WindowState = Microsoft.Office.Interop.Word.WdWindowState.wdWindowStateMinimize;
//save .doc to new target name and format
msWord.ActiveDocument.SaveAs(ref targetDoc, ref paramFormatPDF, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramTrue, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown, ref paramUnknown);
msWord.ActiveDocument.Close(ref missing, ref missing, ref missing);
msWord.Quit(ref paramSaveChangesNo, ref paramUnknown, ref paramUnknown);
Enfin, si votre appareil ne prend pas en charge l'impression de PDF, vous pouvez utiliser Ghostscript ou d'autres outils pour convertir vos PDF en PS ou même PCL. Ce n'est pas le plus grand car cela signifie exécuter un peu de code non géré ou le pire des cas, bombarder et exécuter la ligne de commande GS, cela étant dit, nous le faisons actuellement dans l'une de nos applications web et cela fonctionne bien. En aparté, nous ne le faisons pas pour l'impression mais plutôt pour la jonction d'un certain nombre de PDF, mais à la fin, cela fonctionnera de la même manière.
J'ai le contrôle total de l'environnement de déploiement, c'est une application intranet interne. Office interop/autmation est horrible, et tandis que les documents sont générés par C#, nous utilisons Aspose.Words. Je peux accepter d'utiliser interop.automation pour l'impression, je vais essayer. –
Si vous avez déjà Aspose, vous pouvez vérifier s'il prend en charge l'impression. –
Mais tout à fait d'accord que dans 99% des cas interop bureau est horrible. –