Click here to Skip to main content
Click here to Skip to main content

Printing a Word Document using Word Automation

By , 9 Jun 2007
Rate this:
Please Sign up or sign in to vote.

Introduction

I began my journey down Word Automation and found good articles here. Unfortunately, I hit a big road block: I couldn't choose which printer to print to. I could only print to whichever printer was the ActivePrinter when the Word object was created. Everywhere I looked I was told that all you had to do was:

WordApp.ActivePrinter = "Printer name"

This didn't work for me, it would just hang. I believe that this is due to different versions, and some might have never had the problem I did, but if you're like me, then read on and you won't have to deal with all the headache I had. Hope it helps.

Background

Word Automation is simply being able to use another application within another. Sounds simple enough, but it can get ugly pretty fast and I have found very few resources for when you hit a problem.

Using the Code

Attached is a VB.NET project that allows you to print a specified Word document. The code is given here.

Make sure to add a reference to the Word Object Library found in the COM tab. (To add a reference, right-click on project and select Add Reference.)

Declare variables on show file and print dialogs to get user input:

Dim f As New OpenFileDialog
Dim p As New PrintDialog
Dim app As Word.Application
Dim doc As Word.Document

'Open file and print dialogs to get desired document and printer
If f.ShowDialog = Windows.Forms.DialogResult.OK Then
     If p.ShowDialog = Windows.Forms.DialogResult.OK Then

Create a Word application object:

 'Create instance of Word Application
                app = New Word.Application

This is where you need to use the WordBasic property to set the active printer.

'Set Printer
 app.WordBasic.FilePrintSetup(Printer:=p.PrinterSettings.PrinterName, _
    DoNotSetAsSysDefault:=1) 

The rest of the code simply opens the document, prints it, and quits the Word application:

        'Set filename to object type
        Dim filename As Object = f.FileName
        Dim m As Object = System.Reflection.Missing.Value

        'Open document
        doc = app.Documents.Open(filename, m, m, m, m, m, m, m, m, m, m, m)

        'Print document
        app.PrintOut()

        'Close document
        app.Documents.Close()

        'Quit word application
        app.Quit()

        'Release 
        app = Nothing
    End If
End If 

The most important line in the above code is this:

'Set Printer
app.WordBasic.FilePrintSetup(Printer:=p.PrinterSettings.PrinterName, _
    DoNotSetAsSysDefault:=1) 

For those who need the above in C#, here it is:

//Set Printer 
object wb = app.WordBasic;

//first arg is a printer name
object[] argValues = new object[] {p.PrinterSettings.PrinterName, 1}; 
String [] argNames = new String [] {"Printer","DoNotSetAsSysDefault"};

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

I hope this helps people, because it really got me out of a bind.

History

  • 9th June, 2007: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

josepaulino

United States United States
No Biography provided

Comments and Discussions

 
QuestionGOOD JOB! But have one question PinmemberMember 1032105913-Oct-13 16:50 
QuestionGood Article josepaulino....but haiving One Que ? Pinmemberkoolprasad20038-Oct-10 20:33 
GeneralMy vote of 5 Pinmemberkoolprasad20038-Oct-10 20:26 
GeneralThanks alot PinmemberDurgaPNaidu21-Nov-07 1:11 
GeneralA small caveat PinmemberJorge Varas12-Jun-07 8:20 
GeneralRe: A small caveat Pinmemberdazzer12320-Aug-07 1:38 
GeneralMultiple Versions PinmemberStrattonN12-Jun-07 3:59 
AnswerRe: Multiple Versions Pinmemberjosepaulino12-Jun-07 4:12 
GeneralRe: Multiple Versions PinmemberHirenjPatel2-Aug-07 0:49 
GeneralRe: Multiple Versions Pinmemberjosepaulino2-Aug-07 3:25 
GeneralRe: Multiple Versions PinmemberMember 98881887-Apr-14 2:01 
GeneralWord user confirmations Pinmemberjportelas12-Jun-07 3:48 
GeneralRe: Word user confirmations [modified] PinmemberStrattonN12-Jun-07 4:07 
GeneralRe: Word user confirmations Pinmemberjosepaulino12-Jun-07 4:19 
GeneralRe: Word user confirmations PinmemberNicolas MEURET14-Jun-07 6:08 
AnswerRe: Word user confirmations Pinmemberjosepaulino14-Jun-07 7:05 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web01 | 2.8.140415.2 | Last Updated 9 Jun 2007
Article Copyright 2007 by josepaulino
Everything else Copyright © CodeProject, 1999-2014
Terms of Use
Layout: fixed | fluid